Čomu rozumie Arduino ? (jazyk)
Programovanie na Arduine rozhodne nie je to isté ako programovanie na štandardnom počítači. Takže, čo presne je jazyk Arduino?
Zdá sa, že programujete v C/C++, no čoskoro si uvedomíte, že to nie je presne C/C++. Naozaj nevieš, čo môžeš a čo nemôžeš. V tomto príspevku vám ukážem všetky tajomstvá za jazykom Arduino, takže budete presne vedieť, čo od neho očakávať a ako ho môžete používať efektívnejšie!
Aký je jazyk Arduino ?
Jazyk Arduino je podmnožinou C/C++, kde môžete tiež použiť assembler pre kód na ultra nízkej úrovni. Keď hovoríte „programovanie na Arduine“, v skutočnosti neprogramujete samotnú dosku Arduino, ale mikrokontrolér vo vnútri dosky.
Napríklad Arduino Uno má mikrokontrolér AtMega328-P. A zvyčajne pri písaní kódu pre mikrokontroléry veľmi záleží na výkone. Preto musíte mať silné a rýchle programovacie jazyky. C a C++ patria medzi najvýkonnejšie jazyky, aké môžete nájsť. Sú pomerne rýchle a stabilné, a preto sú dobrou voľbou pre mikrokontroléry. Kompilátor používaný na transformáciu kódu na objektové súbory je ( avr-g++ ). Potom sa program s názvom avrdude použije na nahranie programu do mikrokontroléra Arduino.
Obmedzenia C++ ?
Takže, ak je jazyk Arduino podmnožinou C++, znamená to, že môžete použiť všetky funkcie C++?
Bohužiaľ, odpoveď je nie – aspoň s jadrom Arduino.
Tu sú niektoré z hlavných funkcií C++, ktoré nemôžete použiť s Arduino:
- Knižnica STL. Zabudnite na používanie std::vector pre zoznamy, std::string alebo std::map (dobre, v skutočnosti môžete použiť externú knižnicu na získanie niektorých funkcií z vektorov, reťazcov atď.). Budete musieť definovať svoje polia sami a spravovať ich priestor. V každom prípade je pamäť Arduina oveľa menšia ako pamäť vášho počítača, takže správa pamäte je tu skutočne dvôležitá záležitosť. Budete chcieť, aby boli vaše polia čo najmenšie. Pre strings typ však môžete použiť vstavaný typ Arduino String.
- Výnimky. Budete sa musieť vysporiadať s chybovými kódmi.
Môžete použiť objektovo orientované programovanie s jazykom Arduino ?
Ak už ste adeptom na OOP, potom nebudete musieť zabudnúť na všetko, čo viete.
// Len príklad kódu, ktorý ukáže, že môžete
// používať triedy s jazykom Arduino
class MyMotor {
private:
// atribúty
int some_attribute;
public:
// Motor
MyMotor() {
some_attribute = 4;
}
void init() {
// naštartujte motor
}
void start() {
// spustiť motor
}
void stop() {
// stop motor
}
};
MyMotor motor;
void setup() {
motor.init();
}
void loop() {
motor.start();
delay(500);
motor.stop();
delay(500);
}
Knižnica Arduino.h
Pred odoslaním kódu do kompilátora prostredie Arduino automaticky pridá knižnicu „Arduino.h“ na začiatok kódu, ak ste to neurobili sami.
#include <Arduino.h>
Nastavenie a funkcia slučky : loop()
Program v C/C++ zvyčajne spúšťa svoje vykonávanie z funkcie main().
Ako môžete vidieť na programe Arduino, neexistuje nič také ako funkcia main(). V skutočnosti máte 2 povinné funkcie, ktoré musíte implementovať:
Funkcia setup() sa zavolá iba raz, akonáhle program spustí svoju činnosť. Potom sa funkcia loop() bude volať na neurčito. Hneď ako sa cyklus loop() skončí, bude sa volať znova a znova.
void setup() {
// vložte sem svoj kód, aby sa spustil raz:
}
void loop() {
// vložte sem svoj hlavný kód, aby sa spustil opakovane:
}
// No main() function here!
Variabilná inicializácia s jazykom Arduino
Ak v C/C++ deklarujete premennú bez jej inicializácie, potom neviete, aká je jej prvá hodnota. Môže to byť čokoľvek. S jazykom Arduino, akonáhle deklarujete premennú, Arduino ju za vás inicializuje na nulu. Samozrejme to bude závisieť od typu premennej, ktorú máte. Pre celé čísla bude hodnota 0. Pre pohyblivé číslo 0,0. A pre ukazovatele získate iba ukazovateľ NULL.
int i;
float f;
void setup() {
Serial.begin(9600);
Serial.println(i); // --> will print 0
Serial.println(f); // --> will print 0.00
}
void loop() {}
Automatické prototypovanie
V C/C++ sa prototypy vo všeobecnosti vytvárajú v súbore .h, ktorý zahrniete do svojich programov, zatiaľ čo vaša implementácia kódu bude napísaná v súboroch .c alebo .cpp. Pre Arduino môžete urobiť to isté. Ale v prípade, že nedeklarujete prototyp funkcie, Arduino to automaticky urobí za vás pred odovzdaním kódu kompilátoru.
Pre začiatočníkov, ak za funkciu A napíšete funkciu A a ďalšiu funkciu B, potom funkcia A nemôže dosiahnuť funkciu B. Ak vo funkcii A zavoláte funkciu B, dostanete chybu pri kompilácii. Pokiaľ nevytvoríte prototyp funkcie pre obe funkcie, ktorý zahrniete na začiatok svojho súboru (alebo do samostatného súboru .h). To je to, čo by ste normálne mali robiť pri písaní kódu C/C++.
Arduino túto chybu opraví za vás. Ale buďte opatrní, generovanie prototypu nie je 100% spoľahlivé v závislosti od toho, ako píšete svoj kód, takže… Aj tak by ste sa mali začať učiť o funkčných prototypoch.
void function_A() {
function_B(); //chyba kompilácie v C++, žiadna chyba s Arduino!
}
void function_B() {
}
void setup() {
function_A();
}
void loop() {}
Boolean, byte a ďalšie špecifické typy Arduino
Pri programovaní v jazyku Arduino môžete použiť dátové typy ako „boolean“ alebo „byte“.
Tieto typy absolútne nie sú zahrnuté v štandarde C++. „boolean“ je jednoduchý alias pre „bool“ v C++ a dokonca aj dokumentácia Arduino odporúča, aby ste namiesto boolean používali bool. „Byte“ je 8-bitové číslo bez znamienka. Môžete uložiť ľubovoľné číslo od 0 do 255. Dátový typ „String“ je tiež špecifický pre Arduino a má svoje vlastné pravidlá.
Organizácia priečinkov
S Arduino nevytvárate program, ale vytvárate „náčrt“.
Hlavný súbor obsahujúci funkcie setup() a loop() má príponu .ino. Všetky ostatné súbory môžu mať prípony .c, .cpp, .h. Ak chcete otvoriť „náčrt“ do Arduino IDE, vedzte, že budete musieť vytvoriť priečinok s názvom presne ako súbor .ino a umiestniť všetky svoje súbory do tohto priečinka.
Napríklad, ak sa váš hlavný súbor volá ArduinoTest.ino, mal by byť umiestnený v priečinku „ArduinoTest“. Knižnice, ktoré inštalujete, by mali byť umiestnené v priečinku „knižnica“ vášho globálneho priečinka Arduino (zvyčajne vytvoreného vo vašom domácom úložisku po nainštalovaní Arduino IDE). Tieto pravidlá nie sú špecifické pre samotný jazyk Arduino, ale je veľmi dôležité ich poznať, pretože ovplyvnia spôsob, akým organizujete súbory pri písaní kódu.
Na písanie kódu pomocou jazyka Arduino použite alternatívne IDE
Možno by ste chceli vedieť: existujú iné IDE ako Arduino IDE na vývoj programov pomocou jazyka Arduino? Pretože, aby som bol úprimný, Arduino IDE má ďaleko od dokonalosti. A ak musíte stráviť všetky svoje dni vývojom na Arduino IDE, rýchlo sa z vás zblázni. Čo musíte pochopiť, je, že prostredie Arduino sa líši od kompilátora Arduino (avr-g++), ktorý sa líši od nahrávacieho programu Arduino (avrdude), ktorý… sa líši od Arduino IDE.
IDE je tu hlavne na to, aby vám umožnilo písať kód. Potom použije prostredie a ďalšie softvérové nástroje na kompiláciu a nahranie kódu na vašu nástenku. Takže dobrá správa: môžete použiť mnoho iných IDE, samozrejme za predpokladu, že majú určitú podporu pre Arduino.
Nie je to len o jazyku
Rozdiel medzi vývojom programu Arduino alebo desktopového programu nekončí pri jazyku Arduino.
Pri programovaní na mikrokontroléri máte bližšie k hardvéru a spôsob myslenia je úplne iný. Preto často neuvidíte popis práce zahŕňajúci vývoj webu A vývoj videohier A skúsenosti s programovaním mikrokontrolérov, pretože tieto oblasti sú úplne odlišné. S Arduino máte obmedzené zdroje, ktoré musíte vziať do úvahy. Menej RAM, nižšia výpočtová frekvencia, žiadne multi-threading atď. Máte tiež prístup k mnohým hardvérovým veciam, napríklad PWM a hardvérovým časovačom.
Zvládnutie týchto konceptov si bude vyžadovať oveľa viac ako len vedieť programovať. Budete si musieť prečítať niekoľko údajových listov a rozšíriť svoje znalosti v niekoľkých oblastiach.
Pochopenie toho, čo je – a čo nie – jazyk Arduino, je prvým skvelým krokom na vašej ceste učenia. Teraz ste pripravení vyhnúť sa najčastejším chybám začiatočníkov a ponoriť sa do pokročilejších konceptov!
Pridaj komentár