Ардуино

HeliOS за Arduino

HeliOS за Arduino
Микроконтролерите на Arduino използват една програма за управление на всички ключове, светодиоди и други части на системата. Първата програма, научена от потребител на Arduino, обикновено е програмата "Blink", която използва функцията за забавяне, за да включи и изключи светодиода по равномерен модел. Тази проста програма може да бъде разширена, за да прави много неща, но не може да включва многозадачност.

За по-напреднали проекти трябва да променяте стойности и да четете данни в реално време, което не е възможно със стандартната функция за забавяне в Arduino. Следователно е необходимо различно решение. За щастие, HeliOS може да помогне.

Ограниченията на Arduino

Както бе споменато във въведението, стандартният език на Arduino може да се прилага по много начини. Има обаче проблем: Arduino не може да изпълнява много задачи. Например не можете да настроите три различни светодиода да мигат на независими интервали. Тази задача не може да бъде изпълнена, защото, ако използвате забавяне, светодиодът с най-голямо закъснение ще блокира мигането на останалите светодиоди, докато чака да превключва състоянията.

Стандартното анкетиране също е обезпокоително, тъй като проверката на състоянието на бутон изисква да се предприемат действия. В стандартен Arduino трябва да настроите функция за анкетиране на състоянието на превключвател или друго състояние.

Въпреки че има решения за справяне с тези проблеми (напр.ж., хардуерни прекъсвания, функция милис, внедряване на FreeRTOS), но тези решения също имат ограничения. За да преодолее проблемите на тези решения, Мани Питърсън изобретява HeliOS. HeliOS е малък и ефективен и може дори да работи на 8-битови контролери.

Помислете за кода по-долу, който в най-добрия случай е ненадежден, защото изявлението за забавяне ще попречи на проверката на бутона.

int buttonPin = 2; // номерът на щифта на бутона
int ledPin = 4; // номерът на LED щифта
// променливите ще се променят:
int buttonState = 0; // променлива за четене на състоянието на бутона
void setup ()
// инициализираме LED щифта като изход:
pinMode (ledPin, OUTPUT);
pinMode (LED_BUILTIN, OUTPUT);
// инициализираме щифта на бутона като вход:
pinMode (buttonPin, INPUT);

цикъл void ()
// четем състоянието на стойността на бутона:
buttonState = digitalRead (buttonPin);
// проверяваме дали бутонът е натиснат. Ако е, buttonState е HIGH:
ако (buttonState == HIGH)
digitalWrite (ledPin, HIGH); // включване на светодиода
друго
digitalWrite (ledPin, LOW); // изключване на светодиода

digitalWrite (LED_BUILTIN, HIGH); // включете светодиода (HIGH е нивото на напрежението)
забавяне (1000); // изчакайте секунда
digitalWrite (LED_BUILTIN, LOW); // изключете светодиода, като направите напрежението НИСКО
забавяне (1000); // изчакайте секунда

Когато стартирате този код, ще видите, че 'ledPin' ще мига нормално. Когато обаче натиснете бутона, той няма да светне или ако го направи, ще забави последователността на мигането. За да накарате тази програма да работи, можете да преминете към други методи за забавяне; HeliOS обаче предлага алтернатива.

Linux вграден в Arduino (HeliOS)

Въпреки „ОС“ в името си, HeliOS не е операционна система: това е библиотека с многозадачни функции. Той обаче изпълнява 21 извиквания на функции, които могат да направят опростени сложни задачи за контрол. За задачи в реално време системата трябва да обработва външна информация при получаването. За целта системата трябва да има възможност за многозадачност.

Няколко стратегии могат да се използват за справяне със задачи в реално време: стратегии, управлявани от събития, балансирани стратегии за изпълнение и стратегии за уведомяване на задачи. С HeliOS можете да използвате всяка от тези стратегии с извиквания на функции.

Подобно на FreeRTOS, HeliOS подобрява многозадачността на контролерите. Разработчиците, които планират сложен проект от критично значение, трябва да използват FreeRTOS или нещо подобно, защото HeliOS е предназначен за използване от ентусиасти и любители, които искат да изследват силата на многозадачността.

Инсталиране на HeliOS

Когато използвате библиотеките на Arduino, новите библиотеки могат да бъдат инсталирани с IDE. За версии 1.3.5 и по-горе, вие избирате да използвате библиотечния мениджър.


Като алтернатива можете да изтеглите zip файл от уеб страницата и да използвате този файл, за да инсталирате HeliOS.


Моля, обърнете внимание, че трябва да включите HeliOS в кода си, преди да започнете да го използвате.

Пример

Кодът по-долу може да се използва за мигане на LED веднъж в секунда. Въпреки че сме добавили HeliOS код, крайният ефект е същият като този на уводния урок.

Основната разлика тук е, че трябва да създадете задача. Тази задача се поставя в състояние на изчакване и таймерът е настроен да казва на задачата кога да се изпълни. Освен това цикълът съдържа само един израз: xHeliOSLoop (). Този цикъл изпълнява целия код, дефиниран в setup () на кода. Когато планирате кода си, трябва да зададете всички пинове, константи и функции в горната настройка.

#include
// Използва се за съхраняване на състоянието на светодиода
волатилен int ledState = 0;
изменчив int buttonState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Определете мигаща задача
void taskBlink (xTaskId id_)
if (ledState)
digitalWrite (LED_BUILTIN, LOW);
ledState = 0;
друго
digitalWrite (LED_BUILTIN, HIGH);
ledState = 1;



// Определете задача за четене на бутон
бутон voidRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// проверяваме дали бутонът е натиснат. Ако е, buttonState е HIGH:
ако (buttonState == HIGH)
// включване на светодиода:
digitalWrite (ledPin, HIGH);
друго
// изключване на светодиода:
digitalWrite (ledPin, LOW);


void setup ()
// id следи задачите
xTaskId id = 0;
// Това инициализира структурите от данни на Helios
xHeliOSSetup ();
pinMode (LED_BUILTIN, OUTPUT);
pinMode (ledPin, OUTPUT);
// инициализираме щифта на бутона като вход:
pinMode (buttonPin, INPUT);
// Добавяне и след това накарайте taskBlink да изчака
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// Интервал на таймера за 'id'
xTaskSetTimer (id, 1000000);
id = xTaskAdd ("БУТОН", & buttonRead);
xTaskStart (id);

цикъл void ()
// Това и само това винаги е в течение, когато се използва Helios
xHeliosLoop ();

С този код можете да програмирате светодиода да мига по всяко време, без да се притеснявате за забавянето на Arduino.

Заключение

Този проект е чудесен за хора, които са нови за Arduino, тъй като ви позволява да използвате обикновения код на Arduino за обработка на задачи в реално време. Обаче методът, описан в тази статия, е само за любители и изследователи. За по-сериозни проекти са необходими други методи.

Най-добрите игри за игра с ръчно проследяване
Oculus Quest наскоро представи страхотната идея за ръчно проследяване без контролери. С непрекъснато нарастващия брой игри и дейности, които изпълнява...
Как да покажете OSD наслагване в приложения на цял екран за Linux и игри
Играта на цял екран или използване на приложения в режим на цял екран без разсейване може да ви откъсне от съответната системна информация, видима в п...
Топ 5 карти за залавяне на игри
Всички сме виждали и обичаме поточни игри в YouTube. PewDiePie, Jakesepticye и Markiplier са само някои от най-добрите геймъри, които са спечелили мил...