Arduino

„HeliOS“, skirta „Arduino“

„HeliOS“, skirta „Arduino“
„Arduino“ mikrovaldikliai naudoja vieną programą, kad valdytų visus jungiklius, šviesos diodus ir kitas sistemos dalis. Pirmoji programa, kurią išmoko „Arduino“ vartotojas, paprastai yra „Blink“ programa, kuri naudoja uždelsimo funkciją, kad įjungtų ir išjungtų šviesos diodą lygiu pavidalu. Ši paprasta programa gali būti išplėsta daugeliui dalykų, tačiau ji negali apimti daugiafunkcinių užduočių.

Jei norite daugiau pažangių projektų, turite pakeisti vertes ir skaityti duomenis realiu laiku, o tai neįmanoma naudojant standartinę „Arduino“ uždelsimo funkciją. Todėl reikia kitokio sprendimo. Laimei, „HeliOS“ gali padėti.

„Arduino“ apribojimai

Kaip minėta įžangoje, standartinę „Arduino“ kalbą galima pritaikyti įvairiai. Tačiau yra problema: „Arduino“ negali atlikti daugybinių užduočių. Pvz., Negalima nustatyti, kad trys skirtingi šviesos diodai mirksėtų atskirais laiko tarpais. Šios užduoties atlikti negalima, nes jei naudojate uždelsimą, ilgiausiai delsiantis šviesos diodas blokuos kitų šviesos diodų mirksėjimą laukiant, kol bus perjungta būsena.

Standartinė apklausa taip pat kelia problemų, nes norint patikrinti mygtuko būseną reikia atlikti veiksmus. Standartiniame „Arduino“ įrenginyje turite nustatyti funkciją, kad apklausytumėte jungiklio būseną ar bet kurią kitą būseną.

Nors yra sprendimų šiems klausimams spręsti (el.g., aparatinės įrangos pertraukimai, „Millis“ funkcija, „FreeRTOS“ diegimas), tačiau šie sprendimai taip pat turi apribojimų. Norėdami išspręsti šių sprendimų problemas, Mannie Peterson išrado „HeliOS“. „HeliOS“ yra maža ir efektyvi, ji gali veikti net su 8 bitų valdikliais.

Apsvarstykite žemiau pateiktą kodą, kuris geriausiu atveju yra nepatikimas, nes vėlavimo ataskaita neleis patikrinti mygtuko.

int mygtukasPin = 2; // mygtuko kaiščio numeris
int ledPin = 4; // LED kaiščio numeris
// kintamieji pasikeis:
int mygtukasValstis = 0; // kintamasis mygtuko būsenos nuskaitymui
negaliojanti sąranka ()
// inicializuokite LED kaištį kaip išėjimą:
pinMode (ledPin, OUTPUT);
pinMode (LED_BUILTIN, OUTPUT);
// inicijuoti mygtuko kaištį kaip įvestį:
pinMode (buttonPin, INPUT);

negaliojanti kilpa ()
// skaitykite mygtuko vertės būseną:
buttonState = digitalRead (buttonPin);
// patikrinkite, ar spaudžiamas mygtukas. Jei taip, „buttonState“ yra AUKŠTAS:
jei (buttonState == HIGH)
„digitalWrite“ („ledPin“, HIGH); // įjungti šviesos diodą
Kitas
„digitalWrite“ („ledPin“, LOW); // išjungti šviesos diodą

„digitalWrite“ (LED_BUILTIN, HIGH); // įjunkite šviesos diodą (HIGH yra įtampos lygis)
vėlavimas (1000); // palauk sekundę
„digitalWrite“ (LED_BUILTIN, LOW); // išjunkite šviesos diodą, nustatydami žemą įtampą
vėlavimas (1000); // palauk sekundę

Paleidę šį kodą pamatysite, kad „ledPin“ mirksi paprastai. Tačiau paspaudus mygtuką, jis neužsidegs arba, jei užsidegs, atitolins mirksėjimo seką. Kad ši programa veiktų, galite pereiti prie kitų uždelsimo būdų; tačiau „HeliOS“ pateikia alternatyvą.

„Linux“ įdėta į „Arduino“ („HeliOS“)

Nepaisant „OS“ savo pavadinime, „HeliOS“ nėra operacinė sistema: tai daugiafunkcinių funkcijų biblioteka. Tačiau jis įgyvendina 21 funkcijų iškvietimą, kuris gali supaprastinti sudėtingas valdymo užduotis. Atliekant užduotis realiuoju laiku, sistema turi tvarkyti išorinę informaciją, kai ji gaunama. Norėdami tai padaryti, sistema turi sugebėti atlikti daug užduočių.

Realaus laiko užduotims tvarkyti gali būti naudojamos kelios strategijos: įvykių valdomos strategijos, vykdymo laiko subalansuotos strategijos ir pranešimo apie užduotis strategijos. Naudodami „HeliOS“ galite naudoti bet kurią iš šių strategijų naudodami funkcijų iškvietimus.

Kaip ir „FreeRTOS“, „HeliOS“ sustiprina valdiklių daugiafunkcines užduotis. Tačiau kūrėjams, planuojantiems sudėtingą ypatingos svarbos projektą, reikia naudoti „FreeRTOS“ ar kažką panašaus, nes „HeliOS“ yra skirtas entuziastams ir mėgėjams, norintiems ištirti daugiafunkcinį darbą.

„HeliOS“ diegimas

Naudojant „Arduino“ bibliotekas, su IDE galima įdiegti naujas bibliotekas. 1 versijai.3.5 ir naujesnėms versijoms pasirenkate naudoti bibliotekos tvarkyklę.


Arba galite atsisiųsti ZIP failą iš tinklalapio ir naudoti tą failą „HeliOS“ įdiegti.


Atkreipkite dėmesį, kad prieš pradėdami naudoti „HeliOS“ turite įtraukti į savo kodą.

Pavyzdys

Žemiau pateiktą kodą galima naudoti, kad šviesos diodas mirktų kartą per sekundę. Nors mes pridėjome „HeliOS“ kodą, galutinis efektas yra toks pat kaip ir įvadinės pamokos.

Pagrindinis skirtumas yra tas, kad turite sukurti užduotį. Ši užduotis perkeliama į laukimo būseną ir nustatomas laikmatis, nurodantis užduotį, kada ji turi būti vykdoma. Be to, kilpoje yra tik vienas sakinys: xHeliOSLoop (). Ši kilpa vykdo visą kodą, apibrėžtą kodo sąrankoje (). Kai planuojate kodą, viršutiniame nustatyme turite nustatyti visus kaiščius, konstantas ir funkcijas.

# įtraukti
// Naudojamas šviesos diodo būsenai išsaugoti
nepastovi int ledState = 0;
volatile int buttonState = 0;
const int mygtukasPin = 2;
const int ledPin = 4;
// Apibrėžkite mirksinčią užduotį
negaliojantis taskBlink (xTaskId id_)
jei (ledState)
„digitalWrite“ (LED_BUILTIN, LOW);
ledState = 0;
Kitas
„digitalWrite“ (LED_BUILTIN, HIGH);
ledState = 1;



// Apibrėžkite mygtuko skaitymo užduotį
void buttonRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// patikrinkite, ar spaudžiamas mygtukas. Jei taip, „buttonState“ yra AUKŠTAS:
jei (buttonState == HIGH)
// įjungti šviesos diodą:
„digitalWrite“ („ledPin“, HIGH);
Kitas
// išjungti šviesos diodą:
„digitalWrite“ („ledPin“, LOW);


negaliojanti sąranka ()
// id seka užduotis
xTaskId id = 0;
// Tai inicijuoja „Helios“ duomenų struktūras
xHeliOSSetup ();
pinMode (LED_BUILTIN, OUTPUT);
pinMode (ledPin, OUTPUT);
// inicijuoti mygtuko kaištį kaip įvestį:
pinMode (buttonPin, INPUT);
// Pridėkite ir palaukite taskBlink
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// „id“ laikmačio intervalas
„xTaskSetTimer“ (id, 1000000);
id = xTaskAdd ("Mygtukas", & buttonRead);
„xTaskStart“ (id);

negaliojanti kilpa ()
// Tai ir tik tai, visada naudojant „Helios“
xHeliosLoop ();

Naudodami šį kodą, galite bet kada užprogramuoti šviesos diodą mirksėti, nesijaudindami, kad „Arduino“ vėluoja.

Išvada

Šis projektas puikiai tinka žmonėms, kurie yra nauji „Arduino“, nes leidžia naudoti įprastą „Arduino“ kodą tvarkant užduotis realiuoju laiku. Tačiau šiame straipsnyje aprašytas metodas skirtas tik mėgėjams ir tyrėjams. Rimtesniems projektams reikalingi kiti metodai.

Kaip užfiksuoti ir perduoti savo žaidimų sesiją sistemoje „Linux“
Anksčiau žaidimai buvo laikomi tik pomėgiu, tačiau laikui bėgant lošimų pramonė labai augo technologijų ir žaidėjų skaičiaus atžvilgiu. Žaidimų audito...
Geriausi žaidimai, kuriuos reikia žaisti naudojant rankos stebėjimą
„Oculus Quest“ neseniai pristatė puikią rankos stebėjimo be valdiklių idėją. „Oculus Quest“ rankų sekimo žaidimai iki šiol buvo ribojami, kai žaidimų ...
Kaip rodyti OSD perdangą viso ekrano „Linux“ programose ir žaidimuose
Žaisdami viso ekrano žaidimus arba naudodamiesi programomis be išsiblaškymo viso ekrano režimu, galite nutraukti nuo susijusios sistemos informacijos,...