Arduino

HeliOS za Arduino

HeliOS za Arduino
Mikrokrmilniki Arduina uporabljajo en sam program za nadzor vseh stikal, LED in drugih delov sistema. Prvi program, ki se ga nauči uporabnik Arduina, je običajno program "Blink", ki s funkcijo zakasnitve vklopi in izklopi LED v enakomernem vzorcu. Ta preprost program je mogoče razširiti tako, da naredi marsikaj, ne more pa vključevati večopravilnosti.

Za naprednejše projekte morate spremeniti vrednosti in brati podatke v realnem času, kar s standardno funkcijo zakasnitve v Arduinu ni mogoče. Zato je potrebna drugačna rešitev. Na srečo lahko HeliOS pomaga.

Omejitve Arduina

Kot je bilo omenjeno v uvodu, se standardni jezik Arduina lahko uporablja na več načinov. Vendar obstaja težava: Arduino ne more večopravilno. Na primer, ne morete nastaviti treh različnih LED, da utripajo v neodvisnih intervalih. Te naloge ni mogoče izvesti, ker če uporabite zakasnitev, bo LED z najdaljšo zakasnitvijo blokirala utripanje drugih LED med čakanjem na preklop.

Standardno glasovanje je prav tako težavno, saj je za preverjanje stanja gumba treba sprejeti ukrepe. V običajnem Arduinu morate nastaviti funkcijo za anketiranje stanja stikala ali katerega koli drugega stanja.

Čeprav obstajajo rešitve za reševanje teh vprašanj (npr.g., strojne prekinitve, funkcija milis, implementacija FreeRTOS), vendar imajo te rešitve tudi omejitve. Da bi premagal vprašanja teh rešitev, je Mannie Peterson izumil HeliOS. HeliOS je majhen in učinkovit, deluje pa lahko celo na 8-bitnih krmilnikih.

Upoštevajte spodnjo kodo, ki je v najboljšem primeru nezanesljiva, ker izjava o zamiku prepreči preverjanje gumba.

int buttonPin = 2; // številka zatiča gumba
int ledPin = 4; // številka zatiča LED
// spremenljivke se bodo spremenile:
int buttonState = 0; // spremenljivka za branje stanja tipk
void setup ()
// inicializiramo zatič LED kot izhod:
pinMode (ledPin, IZHOD);
pinMode (LED_BUILTIN, IZHOD);
// inicializiramo zatič tipke kot vhod:
pinMode (buttonPin, INPUT);

void loop ()
// preberemo stanje vrednosti gumba:
buttonState = digitalRead (buttonPin);
// preverimo, ali je pritisnjen gumb. Če je, je buttonState HIGH:
če (buttonState == HIGH)
digitalWrite (ledPin, HIGH); // vklop LED
še
digitalWrite (ledPin, LOW); // ugasnemo LED

digitalWrite (LED_BUILTIN, HIGH); // vklop LED (HIGH je nivo napetosti)
zamuda (1000); // počakajte sekundo
digitalWrite (LED_BUILTIN, LOW); // izklopimo LED tako, da napetost NIZKA
zamuda (1000); // počakajte sekundo

Ko zaženete to kodo, boste videli, da bo 'ledPin' normalno utripal. Ko pritisnete gumb, pa ne zasveti, če pa se, upočasni zaporedje utripanja. Če želite, da ta program deluje, lahko preklopite na druge metode zakasnitve; vendar HeliOS ponuja alternativo.

Linux vgrajen v Arduino (HeliOS)

Kljub »OS« v svojem imenu HeliOS ni operacijski sistem: je knjižnica večopravilnih funkcij. Vendar pa izvaja 21 klicev funkcij, ki lahko poenostavijo zapletene nadzorne naloge. Za naloge v realnem času mora sistem obvladovati zunanje informacije, ko jih prejme. Za to mora imeti sistem možnost večopravilnosti.

Za izvajanje nalog v realnem času je mogoče uporabiti več strategij: strategije, ki jih vodijo dogodki, uravnotežene strategije med izvajanjem in strategije obveščanja o nalogah. S HeliOS lahko katero koli od teh strategij uporabite s funkcijskimi klici.

Tako kot FreeRTOS tudi HeliOS izboljšuje večopravilnost krmilnikov. Vendar pa morajo razvijalci, ki načrtujejo zapleten projekt kritičnega pomena, uporabiti FreeRTOS ali kaj podobnega, ker je HeliOS namenjen navdušencem in ljubiteljem, ki želijo raziskati moč večopravilnosti.

Namestitev HeliOS

Pri uporabi knjižnic Arduino je mogoče z IDE namestiti nove knjižnice. Za različice 1.3.5 in novejše, izberete uporabo upravitelja knjižnice.


Lahko pa s spletne strani prenesete datoteko zip in s to datoteko namestite HeliOS.


Prosimo, upoštevajte, da morate v svojo kodo vključiti HeliOS, preden jo lahko začnete uporabljati.

Primer

Spodnjo kodo lahko uporabite za utripanje LED enkrat na sekundo. Čeprav smo dodali kodo HeliOS, je končni učinek enak učinku uvodne vaje.

Glavna razlika je v tem, da morate ustvariti nalogo. Ta naloga je postavljena v čakalno stanje in nastavljen je časovnik, ki opravilu sporoči, kdaj naj se zažene. Poleg tega zanka vsebuje le en stavek: xHeliOSLoop (). Ta zanka zažene vso kodo, določeno v setup () kode. Ko načrtujete kodo, morate v zgornji nastavitvi nastaviti vse nožice, konstante in funkcije.

#include
// Uporablja se za shranjevanje stanja LED
volatile int ledState = 0;
volatile int buttonState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Določite nalogo utripanja
void taskBlink (xTaskId id_)
če (ledState)
digitalWrite (LED_BUILTIN, LOW);
ledState = 0;
še
digitalWrite (LED_BUILTIN, HIGH);
ledState = 1;



// Določite nalogo branja gumba
void buttonRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// preverimo, ali je pritisnjen gumb. Če je, je buttonState HIGH:
če (buttonState == HIGH)
// vklop LED:
digitalWrite (ledPin, HIGH);
še
// izklop LED:
digitalWrite (ledPin, LOW);


void setup ()
// id beleži naloge
xTaskId id = 0;
// S tem se inicializirajo Heliosove podatkovne strukture
xHeliOSSetup ();
pinMode (LED_BUILTIN, IZHOD);
pinMode (ledPin, IZHOD);
// inicializiramo zatič gumba kot vhod:
pinMode (buttonPin, INPUT);
// Dodajte in nato počakajte na taskBlink
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// Interval časovnika za 'id'
xTaskSetTimer (id, 1000000);
id = xTaskAdd ("GUMB", & buttonRead);
xTaskStart (id);

void loop ()
// To in samo to je pri uporabi Heliosa vedno v zanki
xHeliosLoop ();

S to kodo lahko LED lučko kadar koli programirate, da utripa, ne da bi vas skrbelo, ali bo Arduino zamujal.

Zaključek

Ta projekt je odličen za ljudi, ki so novi v Arduinu, saj vam omogoča uporabo običajne kode Arduino za izvajanje nalog v realnem času. Vendar pa je metoda, opisana v tem članku, namenjena samo ljubiteljem in raziskovalcem. Za resnejše projekte so potrebne druge metode.

Kako namestiti League Of Legends na Ubuntu 14.04
Če ste ljubitelj League of Legends, je to priložnost, da preizkusite League of Legends. Upoštevajte, da LOL podpira PlayOnLinux, če uporabljate Linux....
Namestite najnovejšo strategijo igre OpenRA v Ubuntu Linux
OpenRA je Libre / Free Real Time strateški stroj, ki poustvarja zgodnje igre Westwood, kot je klasična Command & Conquer: Red Alert. Porazdeljeni modi...
Namestite najnovejši Dolphin Emulator za Gamecube & Wii v Linux
Dolphin Emulator vam omogoča igranje izbranih iger Gamecube in Wii na osebnih računalnikih Linux (PC). Dolphin Emulator je prosto dostopen in odprtok...