Arduino

HeliOS til Arduino

HeliOS til Arduino
Mikrocontrollere i en Arduino bruger et enkelt program til at styre alle kontakter, lysdioder og andre dele af systemet. Det første program, som en Arduino-bruger har lært, er typisk 'Blink' -programmet, der bruger forsinkelsesfunktionen til at tænde og slukke for en LED i et jævnt mønster. Dette enkle program kan udvides til at gøre mange ting, men det kan ikke omfatte multitasking.

For mere avancerede projekter skal du ændre værdier og læse data i realtid, hvilket ikke er muligt med standardforsinkelsesfunktionen i Arduino. Derfor er der behov for en anden løsning. Heldigvis kan HeliOS hjælpe.

Begrænsningerne ved Arduino

Som nævnt i indledningen kan standardsproget til en Arduino anvendes på mange måder. Der er dog et problem: Arduino kan ikke multitaske. For eksempel kan du ikke indstille tre forskellige lysdioder til at blinke med uafhængige intervaller. Denne opgave kan ikke udføres, fordi hvis du bruger forsinkelse, vil lysdioden med den længste forsinkelse blokere for de andre LEDs blinkende, mens du venter på at skifte tilstand.

Standard afstemning er også besværlig, da det er nødvendigt at foretage en handling for at kontrollere tilstanden for en knap. I en standard Arduino er du nødt til at opsætte en funktion til at undersøge tilstanden for en switch eller en hvilken som helst anden tilstand.

Mens der er løsninger til løsning af disse problemer (f.eks.g., hardware afbryder, millis funktion, FreeRTOS implementering), men disse løsninger har også begrænsninger. For at overvinde problemerne med disse løsninger opfandt Mannie Peterson HeliOS. HeliOS er lille og effektiv, og den kan endda køre på 8-bit controllere.

Overvej koden nedenfor, som i bedste fald er upålidelig, fordi forsinkelseserklæringen forhindrer, at knappen kontrolleres.

int buttonPin = 2; // nummeret på trykknapstiften
int ledPin = 4; // nummeret på LED-stiften
// variabler ændres:
int buttonState = 0; // variabel til aflæsning af trykknapstatus
ugyldig opsætning ()
// initialiser LED-stiften som output:
pinMode (ledPin, OUTPUT);
pinMode (LED_BUILTIN, OUTPUT);
// initialiser trykknapstiften som en input:
pinMode (buttonPin, INPUT);

ugyldig sløjfe ()
// læs tilstanden for trykknapværdien:
buttonState = digitalRead (buttonPin);
// kontroller, om trykknappen trykkes ned. Hvis det er tilfældet, er buttonState HIGH:
hvis (buttonState == HIGH)
digitalWrite (ledPin, HIGH); // tænd LED
andet
digitalWrite (ledPin, LOW); // sluk LED

digitalWrite (LED_BUILTIN, HIGH); // tænd lysdioden (HIGH er spændingsniveauet)
forsinkelse (1000); // vent et øjeblik
digitalWrite (LED_BUILTIN, LOW); // sluk for LED ved at gøre spændingen LAV
forsinkelse (1000); // vent et øjeblik

Når du kører denne kode, vil du se, at 'ledPin' blinker normalt. Men når du trykker på knappen, lyser den ikke, eller hvis den gør det, forsinker den blinkesekvensen. For at få dette program til at fungere kan du skifte til andre forsinkelsesmetoder; dog giver HeliOS et alternativ.

Linux integreret på Arduino (HeliOS)

På trods af "OS" i dets navn er HeliOS ikke et operativsystem: det er et bibliotek med multitasking-funktioner. Imidlertid implementerer den 21 funktionsopkald, der kan forenkle komplekse kontrolopgaver. Til realtidsopgaver skal systemet håndtere ekstern information, når den modtages. For at gøre dette skal systemet være i stand til at multitaske.

Flere strategier kan bruges til at håndtere realtidsopgaver: begivenhedsstyrede strategier, afbalancerede strategier og opgavemeddelelsesstrategier. Med HeliOS kan du anvende nogen af ​​disse strategier med funktionsopkald.

Ligesom FreeRTOS forbedrer HeliOS controllere med multitasking. Imidlertid skal udviklere, der planlægger et komplekst projekt af kritisk betydning, bruge FreeRTOS eller noget lignende, fordi HeliOS er beregnet til brug af entusiaster og hobbyister, der ønsker at udforske styrken ved multitasking.

Installation af HeliOS

Når du bruger Arduino-bibliotekerne, kan nye biblioteker installeres med IDE. Til version 1.3.5 og derover vælger du at bruge Library Manager.


Alternativt kan du downloade en zip-fil fra websiden og bruge den fil til at installere HeliOS.


Bemærk, at du skal medtage HeliOS i din kode, før du kan begynde at bruge den.

Eksempel

Koden nedenfor kan bruges til at få en LED til at blinke en gang i sekundet. Selvom vi har tilføjet HeliOS-kode, er den endelige effekt den samme som den indledende tutorial.

Den største forskel her er, at du skal oprette en opgave. Denne opgave sættes i ventetilstand, og en timer er indstillet til at fortælle opgaven, hvornår den skal køres. Derudover indeholder sløjfen kun en sætning: xHeliOSLoop (). Denne loop kører al den kode, der er defineret i opsætningen () af koden. Når du planlægger din kode, skal du indstille alle ben, konstanter og funktioner i den øverste indstilling.

#omfatte
// Bruges til at gemme LED-tilstanden
volatile int ledState = 0;
flygtig int-knapStat = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Definer en blinkopgave
ugyldig taskBlink (xTaskId id_)
hvis (ledState)
digitalWrite (LED_BUILTIN, LOW);
ledState = 0;
andet
digitalWrite (LED_BUILTIN, HIGH);
ledState = 1;



// Definer en læsning af knapper
ugyldig buttonRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// kontroller, om trykknappen er trykket ned. Hvis det er tilfældet, er buttonState HIGH:
hvis (buttonState == HIGH)
// tænde LED:
digitalWrite (ledPin, HIGH);
andet
// sluk LED:
digitalWrite (ledPin, LOW);


ugyldig opsætning ()
// id holder styr på opgaver
xTaskId id = 0;
// Dette initialiserer Helios datastrukturer
xHeliOSSetup ();
pinMode (LED_BUILTIN, OUTPUT);
pinMode (ledPin, OUTPUT);
// initialiser trykknapstiften som en input:
pinMode (buttonPin, INPUT);
// Tilføj og lad derefter taskBlink vente
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// Timerinterval for 'id'
xTaskSetTimer (id, 1000000);
id = xTaskAdd ("KNAP", & buttonRead);
xTaskStart (id);

ugyldig sløjfe ()
// Dette og kun dette er altid i løkken, når du bruger Helios
xHeliosLoop ();

Med denne kode kan du programmere LED'en til at blinke når som helst uden at skulle bekymre dig om, at Arduino bliver forsinket.

Konklusion

Dette projekt er fantastisk til folk, der er nye i Arduino, da det lader dig bruge den almindelige Arduino-kode til at håndtere realtidsopgaver. Metoden beskrevet i denne artikel er dog kun til hobbyister og forskere. For mere seriøse projekter er andre metoder nødvendige.

Installer nyeste Dolphin Emulator til Gamecube & Wii på Linux
Dolphin Emulator giver dig mulighed for at spille dine valgte Gamecube & Wii-spil på Linux Personal Computers (PC). Som en frit tilgængelig og open s...
Sådan bruges GameConqueror Cheat Engine i Linux
Artiklen dækker en vejledning om brug af GameConqueror-snydemotoren i Linux. Mange brugere, der spiller spil på Windows, bruger ofte "Cheat Engine" -a...
Bedste spilkonsolemulatorer til Linux
Denne artikel viser en liste over populære spilkonsolemuleringssoftware, der er tilgængelig til Linux. Emulation er et softwarekompatibilitetslag, der...