Prisijungę

We have 2 guests and no members online

Pirmosios programos kodo struktūra

 

Tam, kad suprastume pagrindinės programos struktūrą, išskaidykime LED‘o mirksėjimo programą. Programos dalys sužymėtos numeriais, kad būtų lengviau orientuotis.
Kaip veikia kodas, dalis po dalies:

1. Tai kelių eilučių komentaras. Komentarai labai svarbi dalis, norint paaiškinti tam tikras programos dalis. Viskas kas parašyta tarp šių simbolių nebus kompiliuojama ir Arduino to net nematys. Kelių eilučių komentaras prasideda ženklu /* ir baigiasi */. Šiuos komentarus naudojame tokiu atveju, kai mums reikia daug rašyti. Tarkim šiuo atveju paaiškinti programos paskirtį.

2. Tai vienos eilutės komentaras. Kai jūs įvedate // bet kurioje eilutėje, kompiliatorius ignoruos viską nuo šio simbolio iki eilutės galo. Tai labai patogu, kai reikia paaiškinti tam tikras kodo eilutes. Ypač sudėtingesnes.

3. Šioje kodo dalyje aprašome kintamuosius. Kintamasis tai vieta Arduino atmintyje, kuris saugo tam tikrą informaciją. Kintamieji yra skirtingų tipų. Šiuo atveju, tai kintamas int, kuris reiškia, kad atmintyje bus saugomas sveikasis skaičius. Mes jį pavadinome led  ir priskyrėme reikšmę 13, kuri yra pin‘no numeris Arduino plokštėje. Dabar visoje programoje naudodami kintamąjį led galėsime kontroliuoti 13 pin‘ą. Tai labai patogu, jeigu jums reiktų pakeisti pin‘ą, užtektų kodą pataisyti tik vienoje vietoje ir viskas veiktų puikiai.

4. void setup() yra viena ir dviejų funkcijų, kurios įtrauktos kiekvienoje Arduino programoje. Funkcija tai dalis programos, kuri atlieka specinę užduotį. Kodas, kuris patalpintas tarp riestinių skliaustelių bus įvykdytas tik vieną kartą startavus programai. Tai patogu tam tikriems nustatymams, pvz kaip pin‘ų INPUT OUTPUT nustatymams ir t.t.

5. Arduino skaitmeniniai pin‘ai gali dirbti kaip įėjimai ir išėjimai. Kad nustatyti kryptį, naudosime komandą pinMode(). Ši komanda turi du argumentus. Argumentai suteikia komandoms informaciją apie tai kaip jos privalo veikti. Jie patalpinami paprastuose skliausteliuose iškart po komandos pavadinimo. Pirmasis argumentas nurodo kuriam pin‘ui bus nurodoma kryptis. Kadangi pin‘ą apsirašėme anksčiau kaip led kintamąjį, programa supras, kad kalba eina pie 13 pin‘ą. Antrasis argumentas nurodo pin‘o kryptį: INPUT arba OUTPUT. Pagal nutylėjimą pin‘ai yra įėjimai (INPUT), todėl būtinai aprašyti kai norime, kad jis būtų išėjimu. Atkreipkite dėmesį, kad visa tai mes turime daryti tik vieną kartą. Kokią kryptį nurodysime, taip ir bus visoje programoje, nebent kažkuriuo momentu pakeisime į INPUT.

6. Antroji būtina funkcija Arduino programose yra void loop(). Šioje funkcijoje esanti informacija bus kartojama nuolat, kol bus įjungtas Arduino. Netgi jeigu jums reikės kažką įvykdyti tik vieną kartą, jūs privalėsite įtraukti tuščią loop funkciją.

7. digitalWrite() naudojama nurodyti output pin‘o būsenai. Skaitmeninis signalas turi tik dvi reikšmes, kurias atitinka du elektrinės įtampos lygmenys – aukštasis ir žemasis. Būsena gali būti 5V (voltai) arba 0V. Kai LED‘as ir varža (rezistorius) prijungti prie pin‘o, būsena 5V uždegs LED‘ą. Pirmasis digitalWrite() argumentas yra pin‘o, kurį kontroliuosime numeris. Antrasis argumentas nurodo reikšmę HIGH(5V) arba LOW(0V). Pin‘o būsena išlieka tol, kol jos nepakeičiame kode.

8. delay() funkcija turi tik vieną argumentą: uždelsimo laiką milisekundėmis. Kai iškviečiame komandą delay(), Arduino padaro nurodyto laiko pauzę. Šiuo atveju 1000 milisekundžių, kas yra lygu 1 sekundei. Reiškia, kad LED‘as išlaikys nepakitusią būseną 1 sekundei, po to bus įvykdyta kita komanda.

9. Šiuo atveju digitalWrite() yra naudojama LED‘ui išjungti, nustatant pin‘o būseną LOW.

10. Vėl gi laukiame 1 sekundę ir tada ciklas bus kartojamas iš naujo.

kodas

Išsiaiškinome visą kodą. Jeigu liko neaiškių vietų, klauskite mokytojo. Skubėti nėra kur. Kai peržvelgsite daugiau kodo pavyzdžių, viskas pasidarys aiškiau. Kai viskas bus pakankamai aišku, galėsite pradėti rašyti ir savo programas.

 

Kintamųjų tipai ir jų užimama atmintis

 

Kiekvienas kintamųjų tipas naudoja tam tikrą atminties dalį. Vieni kintamieji naudoja 1 baitą, kiti 4 ir pan. Kadangi mikrokontroleriai turi ribotą atminties kiekį, pavyzdžiui 1 kilobaitą (1024 baitai) ar 2 kilobaitus, tai nėra daug didesnėse programose. Gali nutikti taip, kad pritrūksite atminties. Tada jums reikės optimizuoti kodą. Kaip matote žemiau esančioje lentelėje kai kurie kintamųjų tipai naudoja gerokai daugiau atminties nei reikia mums. Pavyzdžiui, išsaugoti pin'o numerį, kuris bus maksimum 13, galima vietoj int naudoti byte tipą. Tai mums leistų sutaupyti atminties.

 

   Kintamojo tipas       RAM (užimama atmintis)    Skaičių intervalas
boolean 1 baitas 0 arba 1 (True arba False)
byte 1 baitas nuo 0 iki 255
char 1 baitas nuo -128 iki 127
int 4 baitai    nuo -2 147 483 648 iki 2 147 483 647   
long 4 baitai nuo -2 147 483 648 iki 2 147 483 647
float 4 baitai nuo -3.4E+38 iki 3.4E+38
double 8 baitai nuo -1.7E+308 iki  1.7E+308
string 1 baitas + x char masyvas 
array 1 baitas + x  kintamųjų rinkinys 

 

Terminologija

 

Kad ir ką bepradėtumėte mokytis, pirmoji kliūtis yra terminologija. Dirbant su elektronika ar programuojant dauguma sutinkamų terminų yra angliški. Juos galima išversti, bet tada žmonės nesusikalba. Pradėkime nuo dažniausiai pasitaikančių.

 

Breadboard

Tai montažinė plokštė, skirta kurti elektros grandinėms, kad jų nereiktų lituoti.

 

Compiler

Tai kompiliatorius, kuris jūsų parašytą programą sugeba paversti į kompiuteriui suprantamą kalbą. Mes juk nekalbame dvejetainiu kodu.

 

EEPROM

EEPROM - Electrically Erasable Programmable Read-Only Memory. Tai toks kompiuterio lustas, į kurį galima įrašyti kodą arba jį perrašyti. Jis išvalomas elektriniu būdu. Tai reiškia, kad elektros srovė naudojama ištrynimui, po to galima lustą naudoti iš naujo. Svarbu, kad trinant išnyksta visa informacija, dalimis netrinama. Ši atmintis skiriasi nuo operatyviosios (RAM) tuo, kad operatyviojoje galima trinti tam tikras vietas, o ne viską iš karto.

RAM galima įsivaizduoti kaip popieriaus lapą, kuriame rašome su pieštuku, ko nereikia ištriname ir perrašome iš naujo. EEPROM panašiau į rašymą ant popieriaus su tušiniu ar parkeriu. Trynimo atveju visas lapas išmetamas ir imamas naujas.

 

External Interrupt

Mes visi žinome kas yra pertraukimas. Su kompiuteriai yra panašiai, atsiranda kažkas kompiuterio sistemos išorėje, kas reikalauja dėmesio.

 

Flash Memory

Tai kitokio tipo atmintis. Ji saugo duomenis ir tuo atveju kai srovės nėra. Geras pavyzdys yra atmintukai: jie saugo informaciją, netgi kai yra atjungti nuo kompiuterio. Tai patogu laikyti duomenims, kurie vėliau gali keistis, bet jiems reikia išlikti jeigu nėra srovės.

 

Input/Output

Digital Input/Output

Skaitmeniniai pin'ai turi dvi reikšmes: low arba high, kur low reiškia 0 arba false, o high reiškia 1 arba true. Pin'ų kiekis nėra vienodas skirtingose Arduino, Freaduino ar Infiduino plokštėse.

Daugiausiai pin'ų turi plokštės MEGA 2560 ir  MEGA ADK (su ATmega2650 procesoriumi). Tai būtų 54 input (įėjimo) tipo ir 15 output(išėjimo) tipo pin'ų. Kita šiek tiek mažesnė plokštė DUE (su ATSAM3X8E procesoriumi) turi 54 input ir 12 output pin'ų. Mažiausia plokšė yra Gemma (su ATtiny85 procesoriumi), kuri turi 3 input ir 2 output tipo pin'us.

Analog Input/Output

Analoginis signalas yra kitos nei skaitmeninis. Analoginis tai kintamas elektros signalas, kai tuo tarpu skaitmeninis turi reikšmę 1 arba 0. Kitas variantas kuo skiriasi plokštės tai analoginių input ir output tipo pin'ų skaičiumi. Analoginis įėjimas gali priimti analoginius signalus į procesorių, o išėjimas priešingai.

Pavyzdžiui plokštė Esplora (su ATmega32U4 procesoriumi) neturi jokių analoginių input output pin'ų. Dauguma plokščių turi analoginius input pin'us, bet neturi analoginių output pin'ų. Pavyzdžiui plokštė Fio (su Atmega328P procesoriumi) turi 8 analoginius input pin'us, bet visiškai neturi analoginių output pin'ų.  O Due plokštė (su ATSAM3X8E procesoriumi) turi 12 analoginių input pin'ų ir 2 analoginius output pin'us.

 

Processor

Procesorius vykdo kompiuterio komandas. Arduino plokštės naudoja: ATtiny85, ATmega168V, ATmega2560, ATmega168, ATmega328P, ATmega32U4, AR9331Linux, ATSAMD21G18 arba ATSAM3X8E procesorius.

Procesoriaus greitis yra matavimo vienetas, kuris parodo kokiu tempu yra vykdomos komandos. Matuojame MHz (arba GHz laptopams, staliniams kompiuteriams). MHz - megaherzai, reiškia kiek milijonų veiksmų atlieka procesorius per sekundę. GHz - milijardai veiksmų per sekundę. Dauguma Arduino procesorių dirba tarp 8 MHz ir 16 MHz, išskyrus AR9331Linux 400 MHz ir ASTSAMD21G18 48 MHz.

 

PWM

PWM angl. Pulse-width modulation - analoginiai moduliuojami signalai.  

 

Serial Commyunication

Serial communication reiškia, kad dvi sistemos siunčia skaitmeninius impulsus viena kitai suderintu dažniu.

Sakykime jūs ir jūsų draugas kalbate telefonu. Jūs susitariate, kad kalbėsite kas 5 sekundes pakaitomis. Kai jūsų 5 sekundės baigiasi net jeigu ir nebaigėte sakinio, tada pradeda kalbėti jūsų draugas. Po 5 draugo sekundžių jūs galite kalbėti vėl.

 

Sketch

Arduino programoje parašytas kodas vadinamas sketch'u. Jame yra komandos, kurias jūs norėsite, kad įvykdytų Arduino plokštė. Prieš naudojant kodą Arduino plokštėje jis turi būti sukompiliuotas ir nusiųstas į plokštę.

 

SPI

SPI - serial peripheral interface. Tai sinchonizuotų duomenų komunikacijos protokolas naudojamas trumpuose atstumuose.

 

SRAM

SRAM - Static Random Access Memory. Ši atmintis skiriasi nuo RAM, kitaip DRAM - Dynamic Random Access Memory, nes jos nereikia pastoviai atnaujinti. Kol SRAM turi srovę, tol ji saugo duomenis. Ji yra greitesnė nei RAM ar DRAM. RAM atmintį galima įsivaizduoti kaip žmogų, kuriam reikia pastoviai viską priminti. SRAM nereikia dvigubo tikrinimo, nes ji viską atsimena.

 

UART

UART - Universal Asynchronous Receiver/Transmitter. Tai mikrolustas, kuris konvertuoja duomenis iš serial į parallel tipą ir atvirkščiai. Sakykime mes gavome informacijos iš kelių pararelinių srautų, bet negalima visų jų paversti į vientisą serial tipo duomenų srautą. Kitu atveju, mes galima gauti vientisą serial tipo duomenų srautą (sakykim iš modemo) ir konvertuoti jį į kelis srautus, kad sistema veiktų geriau. Trumpiau tariant, UART tipo lustas leidžia sistemai siųsti duomenų srautą ne tik parareliniu būdu bet ir vientisu.


 

Papildomos užduotys: 

1. Parašykite ir išbandykite programą, kuri įsijungia ir išsijungia vieną po kito 6 LED'us.

2. Parašykite ir išbandykite programą, kuri įjungia ir išjungia visus 6 LED'us vienu metu.

3. Parašykite ir išbandykite programą, kuri imituoja bėgiojančią gyvatėlę.

4. Sukurkite įvairesnių kombinacijų.

 

  6led