Arduino

HeliOS za Arduino

HeliOS za Arduino
Mikrokontroleri Arduina koriste jedan program za upravljanje svim prekidačima, LED-ima i ostalim dijelovima sustava. Prvi program koji je naučio korisnik Arduina obično je program 'Blink' koji koristi funkciju odgode za uključivanje i isključivanje LED diode u ravnomjernom uzorku. Ovaj jednostavan program može se proširiti na mnoge stvari, ali ne može uključivati ​​višezadaćnost.

Za naprednije projekte trebate mijenjati vrijednosti i čitati podatke u stvarnom vremenu, što nije moguće pomoću standardne funkcije odgode u Arduinu. Stoga je potrebno drugačije rješenje. Srećom, HeliOS može pomoći.

Ograničenja Arduina

Kao što je spomenuto u uvodu, standardni jezik Arduina može se primijeniti na mnogo načina. Međutim, postoji problem: Arduino ne može raditi više zadataka. Na primjer, ne možete postaviti tri različite LED diode da trepere u neovisnim intervalima. Ovaj se zadatak ne može izvršiti jer će, ako upotrijebite odgodu, LED s najvećim zakašnjenjem blokirati treptanje ostalih LED dok čeka na prebacivanje stanja.

Standardno anketiranje je također problematično, jer provjera stanja gumba zahtijeva poduzimanje radnje. U standardnom Arduinu morate postaviti funkciju za ispitivanje stanja prekidača ili bilo kojeg drugog stanja.

Iako postoje rješenja za rješavanje ovih problema (npr.g., hardverski prekidi, funkcija milisa, implementacija FreeRTOS), ali ta rješenja također imaju ograničenja. Kako bi prevladao probleme ovih rješenja, Mannie Peterson izumio je HeliOS. HeliOS je mali i učinkovit, a može raditi i na 8-bitnim kontrolerima.

Razmotrite donji kod, koji je u najboljem slučaju nepouzdan jer će izjava o odgodi spriječiti provjeru gumba.

int buttonPin = 2; // broj zatiča tipke
int ledPin = 4; // broj LED pina
// varijable će se promijeniti:
int buttonState = 0; // varijabla za očitavanje statusa tipke
void setup ()
// inicijaliziramo LED pin kao izlaz:
pinMode (ledPin, IZLAZ);
pinMode (LED_BUILTIN, IZLAZ);
// inicijaliziramo iglu tipke kao ulaz:
pinMode (buttonPin, INPUT);

petlja void ()
// očitavanje stanja vrijednosti tipke:
buttonState = digitalRead (buttonPin);
// provjeravamo je li pritisnut gumb. Ako jest, buttonState je VISOK:
if (buttonState == HIGH)
digitalWrite (ledPin, HIGH); // uključiti LED
ostalo
digitalWrite (ledPin, LOW); // isključiti LED

digitalWrite (LED_BUILTIN, VISOKO); // uključiti LED (HIGH je razina napona)
kašnjenje (1000); // pričekaj sekundu
digitalWrite (LED_BUILTIN, LOW); // isključimo LED tako što napon NISKA
kašnjenje (1000); // pričekaj sekundu

Kada pokrenete ovaj kod, vidjet ćete da će 'ledPin' normalno treptati. Međutim, kad pritisnete gumb, on se neće upaliti, ili ako se dogodi, odgodit će slijed treptanja. Da bi ovaj program radio, možete se prebaciti na druge metode odgode; međutim, HeliOS pruža alternativu.

Linux ugrađen u Arduino (HeliOS)

Unatoč "OS" u svom imenu, HeliOS nije operativni sustav: on je knjižnica višezadaćnih funkcija. Međutim, implementira 21 poziv funkcije koji može pojednostaviti složene kontrolne zadatke. Za zadatke u stvarnom vremenu sustav mora rukovati vanjskim informacijama čim ih primi. Da bi to učinio, sustav mora moći obavljati više zadataka.

Nekoliko se strategija može koristiti za rješavanje zadataka u stvarnom vremenu: strategije vođene događajima, uravnotežene strategije u tijeku i strategije obavještavanja o zadacima. S HeliOS-om možete koristiti bilo koju od ovih strategija s pozivima funkcija.

Kao i FreeRTOS, HeliOS poboljšava multitasking mogućnosti kontrolera. Međutim, programeri koji planiraju složeni projekt od ključne važnosti trebaju koristiti FreeRTOS ili nešto slično jer je HeliOS namijenjen entuzijastima i hobistima koji žele istražiti snagu multitaskinga.

Instaliranje HeliOS-a

Kada koristite Arduino knjižnice, nove biblioteke mogu se instalirati s IDE-om. Za verzije 1.3.5 i više, odaberete upotrebu Upravitelja knjižnice.


Možete i preuzeti zip datoteku s web stranice i pomoću te datoteke instalirati HeliOS.


Imajte na umu da morate uključiti HeliOS u svoj kod prije nego što ga možete početi koristiti.

Primjer

Kôd u nastavku može se upotrijebiti za LED treptanje jednom u sekundi. Iako smo dodali HeliOS kôd, konačni je učinak jednak učinku uvodnog vodiča.

Glavna razlika ovdje je u tome što morate stvoriti zadatak. Ovaj se zadatak prebacuje u stanje čekanja i postavlja se tajmer koji će zadati zadatak kada treba pokrenuti. Uz to, petlja sadrži samo jednu izjavu: xHeliOSLoop (). Ova petlja pokreće sav kôd definiran u setup () koda. Kada planirate svoj kôd, morate postaviti sve pinove, konstante i funkcije u gornju postavku.

#include
// Koristi se za pohranu stanja LED-a
volatile int ledState = 0;
volatile int buttonState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Definiraj zadatak treptanja
void taskBlink (xTaskId id_)
if (ledState)
digitalWrite (LED_BUILTIN, LOW);
ledState = 0;
ostalo
digitalWrite (LED_BUILTIN, VISOKO);
ledState = 1;



// Definiraj zadatak čitanja gumba
void buttonRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// provjeravamo je li pritisnut gumb. Ako jest, buttonState je VISOK:
if (buttonState == HIGH)
// uključivanje LED diode:
digitalWrite (ledPin, HIGH);
ostalo
// isključiti LED:
digitalWrite (ledPin, LOW);


void setup ()
// id prati zadatke
xTaskId id = 0;
// Ovo inicira Heliosove podatkovne strukture
xHeliOSSetup ();
pinMode (LED_BUILTIN, IZLAZ);
pinMode (ledPin, IZLAZ);
// inicijaliziramo iglu tipke kao ulaz:
pinMode (buttonPin, INPUT);
// Dodaj i zatim učini da taskBlink čeka
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// Interval vremena za 'id'
xTaskSetTimer (id, 1000000);
id = xTaskAdd ("GUMB", & buttonRead);
xTaskStart (id);

petlja void ()
// Ovo i samo ovo uvijek je u toku kada se koristi Helios
xHeliosLoop ();

Ovim kodom možete programirati LED da trepće u bilo kojem trenutku, a da ne brinete hoće li Arduino kasniti.

Zaključak

Ovaj je projekt izvrstan za ljude koji su novi u Arduinu, jer vam omogućuje upotrebu uobičajenog Arduino koda za obradu zadataka u stvarnom vremenu. Međutim, metoda opisana u ovom članku namijenjena je samo hobistima i istraživačima. Za ozbiljnije projekte potrebne su druge metode.

HD Remastered igre za Linux koje ranije nisu imale Linux izdanje
Mnogi programeri i izdavači igara dolaze s HD remasterom starih igara kako bi produžili životni vijek franšize, molimo obožavatelje da zatraže kompati...
Kako koristiti AutoKey za automatizaciju Linux igara
AutoKey je uslužni program za automatizaciju radne površine za Linux i X11, programiran na Python 3, GTK i Qt. Koristeći njegovu skriptiranje i MACRO ...
Kako prikazati brojač FPS-a u Linux igrama
Linux gaming dobio je velik poticaj kada je Valve najavio Linux podršku za Steam klijent i njihove igre 2012. godine. Od tada su mnoge AAA i indie igr...