Sintaxa Arduino. Limbaje de programare

Introducere

Freeduino/Arduino este programat într-un limbaj de programare special - se bazează pe C/C++ și vă permite să utilizați oricare dintre funcțiile sale. Strict vorbind, nu există un limbaj Arduino separat, la fel cum nu există un compilator Arduino - programele scrise sunt convertite (cu modificări minime) într-un program în C/C++ și apoi compilate de compilatorul AVR-GCC. Deci, de fapt, este folosit specializat pentru Microcontrolere AVR Opțiunea C/C++.

Diferența este că obțineți un mediu de dezvoltare simplu și un set de biblioteci de bază care simplifică accesul la perifericele situate „la bord” microcontrolerului.

De acord, este foarte convenabil să începeți să lucrați cu un port serial la o viteză de 9600 de biți pe secundă, efectuând un apel într-o singură linie:

Serial.begin(9600);

Și atunci când utilizați C/C++ „nud”, ar trebui să vă ocupați de documentația pentru microcontroler și să apelați ceva de genul acesta:

UBRR0H = ((F_CPU / 16 + 9600 / 2) / 9600 - 1) >> 8;
UBRR0L = ((F_CPU / 16 + 9600 / 2) / 9600 - 1);
sbi(UCSR0B, RXEN0);
sbi(UCSR0B, TXEN0);
sbi(UCSR0B, RXCIE0);

Iată o scurtă prezentare a principalelor funcții și caracteristici Programare Arduino. Dacă nu sunteți familiarizat cu sintaxa limbajelor C/C++, vă recomandăm să consultați orice literatură despre această problemă, sau surse de Internet.

Pe de altă parte, toate exemplele prezentate sunt foarte simple și, cel mai probabil, nu veți avea dificultăți în înțelegerea textelor sursă și în redactarea propriilor programe chiar și fără a citi literatură suplimentară.

Documentație mai completă (la engleză) este prezentat pe site-ul oficial al proiectului - http://www.arduino.cc. Există, de asemenea, un forum, link-uri către biblioteci suplimentare și descrierile acestora.

Prin analogie cu descrierea de pe site-ul oficial al proiectului Arduino, un „port” se referă la un contact de microcontroler conectat la un conector sub numărul corespunzător. În plus, există un port de comunicație serial (port COM).

Structura programului

În programul dvs. trebuie să declarați două funcții principale: setup() și loop().

Funcția setup() este apelată o dată, după fiecare pornire sau resetare a plăcii Freeduino. Folosiți-l pentru a inițializa variabile, pentru a seta moduri de operare ale porturilor digitale etc.

Funcția loop() execută secvențial comenzile descrise în corpul său din nou și din nou. Aceste. După finalizarea funcției, aceasta va fi apelată din nou.

Să ne uităm la un exemplu simplu:

void setup() // setările inițiale
{
beginSerial(9600); // setează viteza portului serial la 9600 bps
pinMode(3, INPUT); // setarea celui de-al 3-lea port pentru introducerea datelor
}

// Programul verifică al 3-lea port pentru prezența unui semnal pe el și trimite un răspuns către
// ca mesaj text către portul serial al computerului
void loop() // corpul programului
{
if (digitalRead(3) == HIGH) // condiție pentru interogarea celui de-al 3-lea port
serialWrite("H"); // trimite un mesaj sub forma literei „H” la portul COM
altfel
serialWrite("L"); // trimite un mesaj sub forma literei "L" la portul COM
întârziere (1000); // întârziere 1 sec.
}

pinMode(port, mod);

Descriere:

Configura portul specificat pentru a intra sau a ieși un semnal.

Parametri:

port – numărul portului al cărui mod doriți să îl setați (o valoare întreagă de la 0 la 13).

modul - fie INPUT (intrare) fie OUTPUT (ieșire).

pinMode(13, IEȘIRE); //Al 13-lea pin va fi ieșirea
pinMode(12, INPUT); //iar al 12-lea este intrarea

Nota:

Intrările analogice pot fi folosite ca intrări/ieșiri digitale prin accesarea lor folosind numerele 14 (intrare analogică 0) la 19 (intrare analogică 5)

digitalWrite(port, valoare);

Descriere:

Setează nivelul de tensiune la ridicat (HIGH) sau scăzut (LOW) pe portul specificat.

Parametri:

port: numărul portului

valoare: HIGH sau LOW

digitalWrite(13, HIGH); // setați pinul 13 la starea „înalt”.

valoare = digitalRead(port);

Descriere:

Citește valoarea pe portul specificat

Parametri:

port: numărul portului interogat

Valoare returnată: returnează valoarea curentă pe portul (HIGH sau LOW) de tip int

int val;
val = digitalRead(12); // sondaj al 12-lea pin

Nota:

Dacă nu există nimic conectat la portul care este citit, atunci funcția digitalRead() poate returna valorile HIGH sau LOW în mod neregulat.

Intrare/ieșire semnal analogic

valoare = analogRead(port);

Descriere:

Citește o valoare de la portul analog specificat. Freeduino conține 6 canale, convertor analog-digital de 10 biți fiecare. Aceasta înseamnă că o tensiune de intrare de la 0 la 5V este convertită într-o valoare întreagă de la 0 la 1023. Rezoluția citirii este: 5V/1024 valori = 0,004883 V/valoare (4,883 mV). Este nevoie de aproximativ 100 nS (0,0001 C) pentru a citi o valoare de intrare analogică, astfel încât rata maximă de citire este de aproximativ 10.000 de ori pe secundă.

Parametri:

Valoare returnată: returnează un număr int în intervalul de la 0 la 1023 citit de la portul specificat.

int val;
val = analogRead(0); // citește valoarea la a 0-a intrare analogică

Nota:

Porturile analogice sunt definite ca semnal de intrare în mod implicit și, spre deosebire de porturile digitale, nu trebuie să fie configurate prin apelarea funcției pinMode.

analogWrite(port, valoare);

Descriere:

Emite o valoare analogică către port. Această funcție funcționează pe: 3, 5, 6, 9, 10 și 11 porturi digitale Freeduino.

Poate fi folosit pentru a schimba luminozitatea unui LED, a controla un motor etc. După apelarea funcției analogWrite, portul corespunzător începe să funcționeze în modul de modulare a lățimii impulsului de tensiune până când există un alt apel la funcția analogWrite (sau funcțiile digitalRead / digitalWrite pe același port).

Parametri:

port: numărul intrării analogice interogate

valoare: un număr întreg între 0 și 255. O valoare de 0 generează 0 V pe portul specificat; o valoare de 255 generează +5V pe portul specificat. Pentru valori între 0 și 255, portul începe să alterneze rapid între nivelurile de tensiune 0 și +5 V - cu cât valoarea este mai mare, cu atât portul generează mai des nivelul HIGH (5 V).

analogWrite(9, 128); // setați pinul 9 la o valoare echivalentă cu 2,5V

Nota:

Nu este nevoie să apelați pinMode pentru a seta portul să iasă semnale înainte de a apela analogWrite.

Frecvența de generare a semnalului este de aproximativ 490 Hz.

timp = milis();

Descriere:

Returnează numărul de milisecunde de când Freeduino a executat programul curent. Contorul se va depăși și se va reseta după aproximativ 9 ore.

Valoare returnată: returnează o valoare lungă nesemnată

nesemnat de mult timp; // declararea unei variabile de timp de tip unsigned long
timp = milis(); // transferă numărul de milisecunde

întârziere (timp_ms);

Descriere:

Întrerupe programul pentru numărul specificat de milisecunde.

Parametri:

time_ms – timpul de întârziere al programului în milisecunde

întârziere (1000); //pauză 1 secundă

întârziereMicrosecunde

delayMicrosecunde(time_μs);

Descriere:

Întrerupe programul pentru numărul specificat de microsecunde.

Parametri:

time_μs – timpul de întârziere al programului în microsecunde

delayMicrosecunde(500); //pauză 500 de microsecunde

pulseIn(port, valoare);

Descriere:

Citește un impuls (înalt sau scăzut) de la un port digital și returnează durata pulsului în microsecunde.

De exemplu, dacă parametrul „valoare” este setat la HIGH la apelarea funcției, atunci pulseIn() așteaptă să ajungă un nivel ridicat de semnal pe port. Din momentul în care sosește, începe numărătoarea inversă până când portul primește nivel scăzut semnal. Funcția returnează lungimea pulsului ( nivel înalt) în microsecunde. Funcționează cu impulsuri de la 10 microsecunde până la 3 minute. Rețineți că această funcție nu va returna un rezultat până când nu este detectat un puls.

Parametri:

port: numărul portului din care citim pulsul

valoare: tip puls HIGH sau LOW

Valoarea returnată: returnează durata pulsului în microsecunde (tip int)

int durata; // declararea unei variabile durate de tip int
durata = pulseIn(pin, HIGH); // măsoară durata pulsului

Transmiterea datelor în serie

Freeduino are un controler încorporat pentru transmiterea datelor în serie, care poate fi folosit atât pentru comunicarea între dispozitivele Freeduino/Arduino, cât și pentru comunicarea cu un computer. Pe un computer, conexiunea corespunzătoare este reprezentată de un port USB COM.

Comunicarea are loc prin porturile digitale 0 și 1 și, prin urmare, nu le puteți utiliza pentru I/O digitale dacă utilizați funcții seriale.

Serial.begin(baud_rate);

Descriere:

Setează viteza de transmisie Port COM biți pe secundă pentru transmisia de date în serie. Pentru a comunica cu un computer, utilizați una dintre aceste viteze standardizate: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 sau 115200. Puteți, de asemenea, să comunicați cu alte microcontroloare. porturile 0 și 1.

Parametri:

baud_rate: Rata de flux de date în biți pe secundă.

Serial.begin(9600); //setează viteza la 9600 bps

Serial.disponibil

count = Serial.available();

Descriere:

Octeții primiți prin portul serial ajung în bufferul microcontrolerului, de unde programul dumneavoastră îi poate citi. Funcția returnează numărul de octeți acumulați în buffer. Buffer-ul serial poate stoca până la 128 de octeți.

Valoarea returnată:

Returnează o valoare int - numărul de octeți disponibili pentru citire în memoria tampon serial sau 0 dacă nu este nimic disponibil.

if (Serial.available() > 0) ( // Dacă există date în buffer
// aici ar trebui să existe recepția și procesarea datelor
}

char = Serial.read();

Descriere:

Citește următorul octet din bufferul portului serial.

Valoarea returnată:

Primul octet disponibil de date primite de la portul serial sau -1 dacă nu există date de intrare.

incomingByte = Serial.read(); // citire octet

Descriere:

Șterge bufferul de intrare a portului serial. Datele din buffer se pierd, iar apelurile ulterioare către Serial.read() sau Serial.available() vor avea sens pentru datele primite după apelul Serial.flush().

Serial.flush(); // Ștergeți memoria tampon - începeți să primiți date „de la zero”

Descriere:

Datele de ieșire pe portul serial.

Parametri:

Funcția are mai multe forme de apel în funcție de tipul și formatul datelor de ieșire.

Serial.print(b, DEC) tipărește un șir ASCII - reprezentarea zecimală a numărului b.

int b = 79;

Serial.print(b, HEX) tipărește un șir ASCII - reprezentarea hexazecimală a numărului b.

int b = 79;

Serial.print(b, OCT) tipărește un șir ASCII - reprezentarea octală a numărului b.

int b = 79;
Serial.print(b, OCT); //va scoate șirul „117” către port

Serial.print(b, BIN) tipărește un șir ASCII - reprezentarea binară a numărului b.

int b = 79;
Serial.print(b, BIN); //va scoate șirul „1001111” în port

Serial.print(b, BYTE) tipărește octetul inferior al lui b.

int b = 79;
Serial.print(b, BYTE); //va afișa numărul 79 (un octet). În monitor
//din portul serial obținem simbolul „O” - its
//codul este 79

Serial.print(str) dacă str este un șir de caractere sau o matrice de caractere, transferă str la byte-ul portului COM.

octeți de caractere = (79, 80, 81); //matrice de 3 octeți cu valorile 79,80,81
Serial.print("Aici octeții noștri:"); // scoate linia „Aici octeții noștri:”
Serial.print(octeți); //imite 3 caractere cu codurile 79,80,81 –
//acestea sunt caracterele „OPQ”

Serial.print(b) dacă b este de tip byte sau char, imprimă numărul b însuși în port.

char b = 79;
Serial.print(b); //va scoate caracterul „O” în port

Serial.print(b) dacă b este de tip întreg, tipărește reprezentarea zecimală a lui b în port.

int b = 79;
Serial.print(b); //va scoate șirul „79” către port

Descriere:

Funcția Serial.println este similară cu funcția Serial.print și are aceleași opțiuni de apel. Singura diferență este că două caractere suplimentare sunt scoase după date - un caracter de întoarcere carucior (ASCII 13 sau „\r”) și un caracter de linie nouă (ASCII 10 sau „\n”).

Exemplul 1 și exemplul 2 vor scoate același lucru în port:

int b = 79;
Serial.print(b, DEC); //va scoate șirul „79” către port
Serial.print("\r\n"); //va afișa caracterele „\r\n” – line feed
Serial.print(b, HEX); //va scoate șirul „4F” către port
Serial.print("\r\n");//va imprima caracterele "\r\n" – line feed

int b = 79;
Serial.println(b, DEC); //va scoate șirul „79\r\n” către port
Serial.println(b, HEX); //va scoate șirul „4F\r\n” în port

În monitorul portului serial obținem.

Buna ziua! Sunt Alikin Alexander Sergeevich, profesor educație suplimentară, conduc cluburile „Robotică” și „Inginerie radio” la Centrul pentru tineret și tehnologie pentru tineret din Labinsk. Aș dori să vorbesc puțin despre o metodă simplificată de programare a Arduino folosind programul ArduBlock.

Am introdus acest program în procesul educațional și sunt încântat de rezultat, este foarte solicitat în rândul copiilor, mai ales atunci când scriu programe simple sau pentru a crea un fel de; stadiu inițial programe complexe. ArduBlock este un mediu de programare grafic, adică toate acțiunile sunt efectuate cu imagini desenate cu acțiuni semnate în limba rusă, ceea ce simplifică foarte mult învățarea platformei Arduino. Copiii din clasa a II-a pot stăpâni cu ușurință lucrul cu Arduino datorită acestui program.

Da, cineva ar putea spune că Scratch încă există și este, de asemenea, un mediu grafic foarte simplu pentru programarea Arduino. Dar Scratch nu aprinde Arduino, ci doar îl controlează folosind cablu USB. Arduino este dependent de computer și nu poate funcționa autonom. Atunci când vă creați propriile proiecte, autonomia este principalul lucru pentru Arduino, mai ales atunci când creați dispozitive robotizate.

Chiar și roboții LEGO cunoscuți, precum NXT sau EV3, nu mai sunt atât de interesanți pentru studenții noștri odată cu apariția programului ArduBlock în programarea Arduino. Arduino este, de asemenea, mult mai ieftin decât orice trusă de construcție LEGO și multe componente pot fi pur și simplu luate din vechile electronice de uz casnic. Programul ArduBlock va ajuta nu numai începătorii, ci și utilizatorii activi ai platformei Arduino.

Deci, ce este ArduBlock? După cum am spus deja, acesta este un mediu de programare grafică. Aproape complet tradus în rusă. Dar punctul culminant al ArduBlock este nu numai acesta, ci și faptul că programul ArduBlock pe care l-am scris se transformă în cod. Arduino IDE. Acest program este încorporat în mediul de programare Arduino IDE, adică este un plugin.

Mai jos este un exemplu de LED intermitent și un program convertit în Arduino IDE. Toate lucrările cu programul sunt foarte simple și orice student o poate înțelege.


Ca urmare a lucrului cu programul, puteți nu numai să programați Arduino, ci și să studiați comenzi pe care nu le înțelegem în formatul text al IDE-ului Arduino, dar dacă vă este prea lene să scrieți comenzi standard, puteți utiliza rapid mouse-ul pentru a schița un program simplu în ArduBlok și a-l depana în Arduino IDE.

Pentru a instala ArduBlok, trebuie mai întâi să descărcați și să instalați Arduino IDE de pe site-ul web oficial Arduino și să înțelegeți setările atunci când lucrați cu Placa Arduino O.N.U. Cum să faceți acest lucru este descris pe același site web sau pe Amperka, sau vizionați-l pe YouTube. Ei bine, când toate acestea sunt descoperite, trebuie să descărcați ArduBlok de pe site-ul oficial, aici. Nu recomand să descărcați cele mai recente versiuni, sunt foarte complicate pentru începători, dar versiunea din 2013-07-12 este cea mai bună, acest fișier este cel mai popular acolo.

Apoi, redenumiți fișierul descărcat în ardublock-all și în folderul „documente”. Creăm următoarele foldere: Arduino > instrumente > ArduBlockTool > instrument și în acesta din urmă aruncăm fișierul descărcat și redenumit. ArduBlok funcționează pe toată lumea sisteme de operare o, chiar și pe Linux, l-am verificat eu pe XP, Win7, Win8, toate exemple pentru Win7. Instalarea programului este aceeași pentru toate sistemele.


Ei bine, ca să spun simplu, am pregătit o arhivă pe discul 7z Mail, despachetând care vei găsi 2 foldere. Într-una deja program de lucru Arduino IDE, iar într-un alt folder conținutul trebuie trimis în folderul documente.

Pentru a funcționa în ArduBlok, trebuie să rulați IDE-ul Arduino. Apoi mergem la fila Instrumente și acolo găsim articolul ArduBlok, facem clic pe el - și iată-l, scopul nostru.


Acum să ne uităm la interfața programului. După cum înțelegeți deja, nu există setări în el, dar există o mulțime de pictograme pentru programare și fiecare dintre ele poartă o comandă în format text Arduino IDE. Există și mai multe pictograme în versiunile noi, așa că înțelegeți-vă cu ArduBlok ultima versiune dificil și unele dintre icoane nu sunt traduse în rusă.


În secțiunea „Management” vom găsi o varietate de cicluri.


În secțiunea „Porturi”, putem gestiona valorile porturilor, precum și emițătorul de sunet, servo sau senzorul de proximitate ultrasonic conectat la acestea.


În secțiunea „Numere/Constante”, putem selecta valori digitale sau crea o variabilă, dar este puțin probabil să utilizați ceea ce este mai jos.


În secțiunea „Operatori” vom găsi toți operatorii de comparare și calcul necesari.


Secțiunea Utilități utilizează în principal pictograme cronometrate.


„TinkerKit Bloks” este secțiunea pentru senzorii TinkerKit achiziționați. Noi, desigur, nu avem un astfel de set, dar asta nu înseamnă că pictogramele nu sunt potrivite pentru alte seturi, dimpotrivă, este foarte convenabil ca băieții să folosească pictograme precum aprinderea unui LED sau a unui buton. Aceste semne sunt folosite în aproape toate programele. Dar au o particularitate - atunci când le selectați, există pictograme incorecte care indică porturi, așa că trebuie să le eliminați și să înlocuiți pictograma din secțiunea „numere/constante” din partea de sus a listei.


„DF Robot” - această secțiune este utilizată dacă senzorii specificați în ea sunt disponibili, uneori se găsesc. Iar exemplul nostru de astăzi nu face excepție, avem un „Comutator IR reglabil” și un „Senzor de linie”. „Senzorul de linie” este diferit de cel din imagine, deoarece este de la compania Amperka. Acțiunile lor sunt identice, dar senzorul Ampere este mult mai bun, deoarece are un regulator de sensibilitate.


„Seedstudio Grove” - Nu am folosit niciodată senzorii din această secțiune, deși există doar joystick-uri. În versiunile noi, această secțiune a fost extinsă.


Și ultima secțiune este „Kitul de linkuri”. Nu am dat peste senzorii prezentați în ea.

Aș dori să arăt un exemplu de program pe un robot care se mișcă de-a lungul unei benzi. Robotul este foarte simplu, atât de asamblat, cât și de achiziționat, dar pe primul loc. Să începem cu achiziția și asamblarea acestuia.

Iată setul de piese în sine, totul a fost achiziționat de pe site-ul Amperka.


  1. AMP-B001 Scut motor (2 canale, 2 A) 1.890 RUB
  2. AMP-B017 Troyka Shield 1.690 RUB
  3. AMP-X053 Compartiment baterie 3×2 AA 1 60 RUR
  4. AMP-B018 Senzor digital de linie 2.580 RUB
  5. ROB0049 Platformă cu două roți MiniQ 1.1890 RUB
  6. SEN0019 Senzor de obstacol cu ​​infraroșu 1.390 RUB
  7. FIT0032 Suport pentru senzor infraroșu obstacol RUB 1,90
  8. A000066 Arduino Uno 1 1150 RUR


Mai întâi, să asamblam platforma cu roți și să lipim firele la motoare.


Apoi vom instala rafturi pentru a monta placa Arduino UNO care au fost luate din vechi placa de baza sau alte elemente de fixare similare.


Apoi atașăm placa Arduino UNO la aceste rafturi, dar nu putem fixa un șurub - conectorii sunt în cale. Puteți, desigur, să le dezlipiți, dar acest lucru este la discreția dvs.


Apoi fixăm senzor infrarosu obstacole în calea montării sale speciale. Vă rugăm să rețineți că regulatorul de sensibilitate este situat în partea de sus, acesta este pentru ușurință de reglare.



Acum instalăm senzori digitali de linie, aici va trebui să căutați câteva șuruburi și 4 piulițe pentru ele. Instalăm două piulițe între platformă în sine și senzorul de linie și fixăm senzorii cu restul.


Apoi instalăm Motor Shield, sau altfel îl puteți numi driverul motorului. În cazul nostru, acordați atenție jumperului. Nu vom folosi o sursă de alimentare separată pentru motoare, așa că este instalată în această poziție. Partea inferioară este sigilată cu bandă electrică pentru a preveni scurtcircuitele accidentale de la conectorul USB Arduino UNO, pentru orice eventualitate.



Instalăm Troyka Shield deasupra motorului Shield. Este necesar pentru confortul conectării senzorilor. Toți senzorii pe care îi folosim sunt digitali, astfel încât senzorii de linie sunt conectați la porturile 8 și 9, deoarece sunt numiți și pini, iar senzorul de obstacol în infraroșu este conectat la portul 12. Asigurați-vă că rețineți că nu puteți utiliza porturile 4, 5, 6, 7 deoarece sunt folosite de Motor Shield pentru a controla motoarele. Chiar am pictat special peste aceste porturi cu un marker roșu, astfel încât studenții să-și poată da seama.


Dacă ați observat deja, am adăugat o bucșă neagră, pentru orice eventualitate, pentru ca compartimentul bateriei pe care l-am instalat să nu zboare. Și, în sfârșit, asigurăm întreaga structură cu o bandă de cauciuc obișnuită.

Există 2 tipuri de conexiuni la compartimentul bateriei. Prima conexiune a firelor la Troyka Shield. De asemenea, este posibil să lipiți ștecherul de alimentare și să îl conectați la Placa Arduino O.N.U.



Robotul nostru este gata. Înainte de a începe programarea, va trebui să învățați cum funcționează totul, și anume:
- Motoare:
Porturile 4 și 5 sunt folosite pentru a controla un motor, iar 6 și 7 pe celălalt;
Reglam viteza de rotatie a motoarelor folosind PWM pe porturile 5 si 6;
Înainte sau înapoi, trimițând semnale către porturile 4 și 7.
- Senzori:
Toți suntem digitali, așa că dau semnale logice sub formă de 1 sau 0;
Iar pentru a le regla, au regulatoare speciale, iar cu ajutorul unei surubelnite potrivite pot fi calibrate.

Detalii pot fi găsite la Amperke. De ce aici? Pentru că există o mulțime de informații despre lucrul cu Arduino.

Ei bine, probabil că am privit totul superficial, l-am studiat și, bineînțeles, am asamblat robotul. Acum trebuie programat, iată-l - programul mult așteptat!


Și programul a fost convertit în Arduino IDE:

Void setup() (pinMode(8, INPUT); pinMode(12, INPUT); pinMode(9, INPUT); pinMode(4, OUTPUT); pinMode(7, OUTPUT); pinMode(5, OUTPUT); pinMode(6) , OUTPUT ) void loop() ( if (digitalRead(12)) ( if (digitalRead(8)) ( if (digitalRead(9)) ( digitalWrite(4, HIGH); analogWrite(5, 255); analogWrite( 6, 255); digitalWrite(7, HIGH); else ( digitalWrite(4, HIGH); analogWrite(5, 255); analogWrite(6, 50); digitalWrite(7, LOW); ) else ( if (digitalRead); (9)) ( digitalWrite(4, LOW); analogWrite(5, 50); analogWrite(6, 255); digitalWrite(7, HIGH); ) else ( digitalWrite(4, HIGH); analogWrite(5, 255); analogWrite(6, 255); digitalWrite(7, HIGH); else ( digitalWrite(4, HIGH); analogWrite(5, 0); analogWrite(6, 0); digitalWrite(7, HIGH); )

În concluzie, vreau să spun că acest program este pur și simplu o mană divină pentru educație, chiar și pentru auto-studiu, vă va ajuta să învățați comenzile Arduino IDE; Principalul punct culminant este faptul că există mai mult de 50 de pictograme de instalare, începe să „se defecteze”. Da, într-adevăr, acesta este punctul culminant, deoarece programarea numai pe ArduBlok tot timpul nu vă va învăța să programați în Arduino IDE. Așa-numitul „glitch” vă oferă posibilitatea de a gândi și de a încerca să vă amintiți comenzile pentru depanarea precisă a programelor.

iti doresc succes.

28 09.2016

Te-ai gândit vreodată să-ți faci viața mai ușoară acasă? Pentru a avea lucruri care ar rezolva sarcinile de zi cu zi, de rutină pentru tine. Un dispozitiv inteligent care ar funcționa functie utila, de exemplu, uda grădina, curăța camera, ducea încărcătura. Aceste probleme pot fi rezolvate. Dar doar cumpărarea lui nu va fi suficient. Orice controler logic industrial sau cip are nevoie de un „creier” pentru a efectua o anumită secvență de acțiuni. Pentru a efectua operații în cazul nostru, limbajul de programare Arduino este potrivit.

Din acest articol veți învăța:

Salutări, prieteni! Pentru cei care nu mă cunosc, numele meu este Gridin Semyon. Puteți citi despre mine. Articolul de astăzi va fi dedicat două programe principale, fără de care nu vom mai avea mișcare și înțelegere reciprocă.

Descrierea generală a limbajelor de programare

După cum am scris mai sus, vom lua în considerare două medii de dezvoltare populare. Prin analogie cu, poate fi împărțit într-un editor grafic și un „notepad inteligent”. Acestea sunt programele Arduino IDE și FLprog.


Baza mediului de dezvoltare este Procesarea/Wiring - acesta este C++ obișnuit, completat cu funcții și diferite biblioteci. Există mai multe versiuni pentru sistemele de operare sisteme de ferestre, Mac OS și Linux.

Care este diferenta lor fundamentala?? Arduino IDE este un mediu de dezvoltare care descrie codul programului. Și FLprog este similar cu CFC CoDeSyS, care vă permite să desenați diagrame. Care mediu este mai bun? Ambele sunt bune și convenabile în felul lor, dar dacă doriți să vă ocupați serios de controlere, cel mai bine este să învățați limbi similare SI. Principalul lor avantaj este flexibilitatea și natura nelimitată a algoritmului. Îmi place foarte mult IDE-ul Arduino.

Descrierea Arduino IDE

Distribuția poate fi descărcată de pe site-ul oficial. Descărcați arhiva, ocupă puțin mai mult de 100 MB. Instalarea este standard, ca toate aplicațiile pentru Windows. Driverele pentru toate tipurile de plăci trebuie instalate în pachet. Și așa arată fereastra de lucru a programului.

miercuri Dezvoltare Arduino constă din:

  • editor de coduri de program;
  • zone de mesaje;
  • ferestre de ieșire a textului;
  • bare de instrumente cu butoane pentru comenzile utilizate frecvent;
  • mai multe meniuri

Setări Arduino IDE

Se numește un program scris în mediul de dezvoltare Arduinoschiţa. Schița este scrisă într-un editor de text, care are evidențierea colorată a codului de program creat. Un exemplu de program simplu în imaginea de mai jos.

Funcționalități suplimentare pot fi adăugate folosindbiblioteci,reprezentând cod conceput într-un mod special. Practic, nu este accesibil dezvoltatorului. Mediul înconjurător vine de obicei cu un set standard, care poate fi completat treptat. Sunt în subdirectorbiblioteci Directorul Arduino.

Multe biblioteci vin cu exemple situate în folderexemplu.Selectarea unei biblioteci din meniu o va adăuga cod sursă linii:

Arduino

#include

#include

Aceasta este o directivă - un fel de instrucțiune, un fișier antet care descrie obiecte, funcții și constante de bibliotecă. Multe funcții au fost deja dezvoltate pentru cele mai comune sarcini. Crede-mă, asta ușurează viața programatorului.

După ce am conectat placa electronică la computer. Facem urmatoarele setari – selectam placa Arduino si portul Com prin care ne vom conecta.

Arduino

void setup() ( // inițializați pinul digital 13 ca ieșire. pinMode(13, OUTPUT); ) void loop() ( digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000) );

void setup() (

// inițializați pinul digital 13 ca ieșire.

pinMode(13, IEȘIRE);

void loop() (

digitalWrite(13, HIGH);

întârziere (1000);

digitalWrite(13, LOW);

întârziere (1000);

Deci, apropo, este convenabil să verificați funcționalitatea plăcii care a venit din magazin. Rapid și ușor.

Mai este un lucru convenabil. Se numeșteMonitorul portului serial (Monitor serial). Afișează datele trimise către platformăArduino.De obicei mă uit la ce semnale îmi dau diferiții senzori conectați la placă.


Conectarea bibliotecilor

Sunt moduri diferite pentru a adăuga caracteristici personalizate. Puteți conecta biblioteci în trei moduri:

  1. Folosind Library Manager
  2. Utilizarea importului ca fișier .zip
  3. Instalare manuală.

1. Folosind Library Manager.În fereastra de lucru a programului, selectați fila Schiță. După aceea, faceți clic pe butonul Conectare bibliotecă. Directorul bibliotecii se va deschide în fața noastră. Fereastra va afișa fișierele deja instalate cu o semnăturăinstalatsi cele care pot fi instalate.

2. Utilizarea importului ca fișier .zip.Adesea, pe Internet puteți găsi fișiere de bibliotecă ambalate în arhive cu extensie zip. Conține un antet fișier.h și un cod fișier.cpp. Nu este nevoie să despachetați arhiva în timpul instalării. Doar accesați meniul Schiță - Conectați biblioteca - Adăugați o bibliotecă .ZIP

3. Instalare manuală.Mai întâi închidem Programul Arduino IDE. Mai întâi despachetăm arhiva. Și transferăm fișierele cu extensia .h și .cpp într-un folder cu același nume ca și arhiva. Puneți folderul în directorul rădăcină.

Documentele mele\Arduino\biblioteci

Descrierea FLPprog

FLprog este un proiect gratuit de la dezvoltatori independenți care vă permite să lucrați cu blocuri funcționale sau diagrame ladder. Acest mediu este convenabil pentru oameni - nu pentru programatori. Vă permite să vedeți vizual și clar algoritmul folosind diagrame și blocuri funcționale. Puteți descărca distribuția de la site-ul oficial.


Urmaresc proiectul de destul de mult timp. Băieții se dezvoltă, adăugând constant noi funcționalități și schimbându-le pe cele vechi. Văd promisiuni în acest mediu. Deoarece îndeplinește două funcții importante:simplitate și ușurință în utilizare.

Să încercăm să creăm un proiect simplu. Vom comuta ieșirea 13 la LED.

Să creăm un nou proiect. În fereastra de sus adăugați cantitatea necesară intrări și ieșiri, setați un nume și atribuiți o intrare sau ieșire fizică plăcii.


Scoatem elementele de care avem nevoie din arborele de obiecte și elementele de care avem nevoie pe pânza de editare. În cazul nostru, putem folosi un simplu declanșator RS pentru a-l porni și opri.


După crearea algoritmului, faceți clic pe butonul de compilare, programul oferă o schiță gata făcută în IDE.

Am analizat capacitățile și comoditatea programelor pentru dezvoltarea algoritmilor pe controlerul din seria Arduino. Există și programe care vă permit să creați diagrame structurale și imagini vizuale. Dar recomand să folosești un editor de text pentru că îți va fi mai ușor mai târziu. Spune-mi, ce mediu este cel mai convenabil pentru tine și de ce??

Pe 22 septembrie, am participat la un seminar la Krasnodar „Controle cu panou tactil OVEN SPK.” Conferința a avut loc în elegantul și frumosul hotel Bristol. A fost foarte interesant și mișto.


În prima parte a seminarului, ni sa spus despre capabilitățile și avantajele produselor OWEN. Apoi a fost o pauză de cafea cu gogoși. Am luat o grămadă de lucruri, gogoși, prăjituri și bomboane, pentru că îmi era foarte foame =)

În partea a doua a seminarului, după prânz, am fost prezentați. Ne-au spus multe despre vizualizarea Web. Această tendință începe să capete amploare. Ei bine, desigur, controlați echipamentul prin orice browser de internet. Acest lucru este foarte cool. Apropo, echipamentul în sine este în valiză.


Voi publica o serie de articole despre CoDeSyS 3.5 în viitorul apropiat. Așadar, dacă cineva este interesat, abonează-te sau vine pur și simplu în vizită. Voi fi mereu bucuros!!!

Apropo, aproape că am uitat, următorul articol va fi despre placa electronică Arduino. Va fi interesant, nu-l ratați.

Ne vedem în articolele următoare.

Salutări, Gridin Semyon.

Deci ai un procesor. Probabil înțelegeți că procesorul poate fi programat cumva să facă ceea ce doriți. Pentru a face o muncă utilă, este necesar să (a) scrieți un program util și (b) să îl dați procesorului pentru execuție.

În general, nu contează ce tip de procesor aveți: cel mai recent Intel Pentium în laptop sau un microcontroler pe o placă Arduino. Principiile scrierii unui program, de ex. programare, în ambele cazuri la fel. Singura diferență este viteza și domeniul de aplicare a capabilităților de lucru cu alte dispozitive.

Ce este un program și unde să-l scrie

Procesorul, în ciuda întregii complexități a producției, este în esență un lucru destul de simplu și direct. Nu știe să gândească. El poate doar orbește, octet cu octet, să execute instrucțiunile care i-au fost înmânate. Un exemplu aproximativ al secvenței de instrucțiuni poate fi dat:

Octet de instrucțiuneCe înseamnă pentru procesor
00001001 înseamnă: luați următorul octet și stocați-l în celula nr. 1
00000110 ... acesta este exact următorul octet pe care îl amintim în celula nr. 1: numărul 5
00011001 înseamnă: scădeți unul din valoarea din celula nr. 1 și lăsați rezultatul actualizat acolo
00101001 înseamnă: comparați valoarea din celula nr. 1 cu zero și, dacă este zero, treceți prin cât mai mulți octeți indicați în octetul următor
00000100 ...dacă rezultatul a fost zero, vrem să sărim 4 octeți la penultima instrucțiune
10000011
01000001 ...litera „A” corespunde exact acestui cod
00101000 înseamnă că vrem să sărim înapoi la cât mai mulți octeți indicați în octetul următor
00000110 ... vom sări cu 6 octeți înapoi la instrucțiunea nr. 3
10000011 înseamnă că dorim să afișăm caracterul al cărui cod este scris în octetul următor
00100001 ... semnul "!" Acest cod se potrivește exact

Ca rezultat al executării acestei secvențe de instrucțiuni, pe ecran va fi afișată fraza în panică „AAAH!”.

Destul de mult cod pentru un scop atât de simplu! Este clar că dacă toate programele ar fi scrise așa, direct, dezvoltarea unor produse complexe ar dura secole.

De ce sunt necesare limbaje de programare?

Pentru a simplifica sarcina de un milion de ori, au fost inventate limbaje de programare. Există o mulțime de ele și chiar și dintre cele care sunt auzite în mod constant, vă puteți aminti rapid o duzină sau două: Assembler, C, C++, C#, Java, Python, Ruby, PHP, Scala, JavaScript.

Programele în aceste limbi sunt mult mai apropiate de limbajul uman natural. Și, prin urmare, sunt mai ușor, mai rapid și mai plăcut de scris și, cel mai important, sunt mult mai simple citire: ție imediat după ce ai scris, ție un an mai târziu, sau colegului tău.

Problema este că astfel de limbi nu sunt de înțeles de procesor și înainte de a-i oferi acest program, trebuie să o faci compila: traduceți din limbajul natural în aceleași instrucțiuni sub formă de zerouri și unu. Acest lucru se face prin programe numite compilatoare. Fiecare limbaj, cu excepția cazului în care rămâne la nivel de fantezie, are propriul său compilator. Pentru limbile populare, există de obicei mai multe dintre care să alegeți diferiți producătoriși pentru diferite platforme. Cele mai multe dintre ele sunt disponibile gratuit pe Internet.

Deci, există programe într-un limbaj care este pe deplin înțeles de oameni: ele mai sunt numite și „cod sursă”, pur și simplu „cod” sau „coduri sursă”. Ele sunt scrise în fișiere text simple folosind orice editor de text, chiar și folosind notepad. Apoi, ele sunt transformate în seturi de zerouri și de înțeles de procesor folosind compilatorul: compilatorul primește codul sursă ca intrare și creează executabil binar, cel de înțeles de procesor.

Fișierele binare nu pot fi citite și, în general, sunt destinate doar execuției de către procesor. Ei pot avea tip diferitîn funcție de ce au fost primite: .exe sunt programe pentru Windows, .hex sunt programe pentru execuție de către un microcontroler precum Arduino etc.

De ce există atât de multe limbaje de programare și care este diferența?

    De ce? Pentru că există mulți oameni și companii pe Pământ și mulți credeau că pot face ce e mai bun: mai convenabil, mai clar, mai rapid, mai subțire.

    Care este diferența: diferitele limbi au un echilibru diferit între viteza de scriere, lizibilitate și viteza de execuție.

Să ne uităm la același program, care afișează pe ecran o melodie despre 99 de sticle de bere. diferite limbi programare.

De exemplu, limbajul Perl. Se scrie repede; este imposibil de înțeles ce a vrut să spună programatorul; executat incet:

sub b( $n = 99 - @_ - $_ || Nu; "$n sticla" . "s" x!!-- $n . "de bere" ) ​​; $w = "pe perete" ; harta morții ( b. „$w,\n" . b. ",\n Luați unul jos, treceți-l,\n " . b(0) . „$w.} 0 .. 98

\n\n"

limbajul Java. Este nevoie de un timp relativ lung pentru a scrie; ușor de citit; se execută destul de repede, dar ocupă multă memorie: sticle de clasă ( public static void main(Şir sticle de clasă ( public static void main( argumente) ( s = "s"; pentru (int beers= 99 ; beers>- 1 ; ) ( s = "s"; Sistem s = "s";.out .print (beri + "sticlă" + s + "de bere pe perete, " ) ; .out .println (beri + "sticlă" + s + "de bere, " ) ;) ; s = "s"; dacă (beri== 0 ) ( .out .print () ; s = "s";„Du-te la magazin, cumpără-ți mai multe.” s = "s";.out .print (beri + "sticlă" + s + "de bere pe perete, " ) ; .out .println ("99 de sticle de bere pe perete.\n " s = "s";.exit(0); ) altfel) ; } } }

„Luați unul jos, dați-l în jur.”

); s = (-- bere == 1) ?"" : "s" ; .out .println (beri + „sticlă” + s +" de bere pe perete.\n " Limbajul de asamblare. Este nevoie de mult timp pentru a scrie; greu de citit; se execută foarte repede: segmentul de cod presupune cs : cod , ds : cod org 100h start : ; Bucla principală mov cx, 99; sticle pentru a începe cu loopstart: apelați printcx ; tipăriți numărul mov dx , offset line1 ; tipăriți restul primei rânduri mov ah, 9; Rutina șir de tipărire MS-DOS int 21h apel printcx ; tipăriți numărul mov dx , offset line2_3 ; restul rândurilor a 2-a și a 3-a mov ah, 9 int 21h dec cx; a lua un apel în jos printcx ; tipăriți numărul mov dx , offset line4 ; imprimați restul celei de-a patra rânduri mov ah, 9 int 21h cmp cx, 0; De bere? jne loopstart; dacă nu, continuați int 20h; părăsiți la MS-DOS; subrutină pentru a imprima registrul CX în zecimală printcx: mov di , offset numbufferend; umpleți tamponul de la sfârșit mov ax, cx; puneți numărul în AX ca să-l putem împărți printcxloop: mov dx, 0; cuvânt de ordin înalt al numărătorului - întotdeauna 0 mov bx, 10 div bx ; împărțiți DX:AX la 10. AX=cot, DX=restul adăugați dl , "0"; converti restul într-un caracter ASCII mov[ds:di],dl; pune-l în tamponul de imprimare cmp ax, 0; Mai sunt cifre de calculat? je printcxend; daca nu, sfarsitul dec di ; pune următoarea cifră înaintea celei curente jmp printcxloop ; loop printcxend: mov dx , di ; imprimare, începând de la, 13 , 10 , 13 , 10 , "$" numbuffer db 0 , 0 , 0 , 0 , 0 numbufferend db 0 , "$" codul se termină sfârşitul începutului

Cum este programat Arduino?

Dacă vorbim despre Arduino sau microcontrolere de la Atmel, în ce limbă poți scrie programe pentru ele? Răspunsul teoretic: oricare. Dar, în practică, alegerea este limitată la limbajele Assembler, C și C++. Acest lucru se datorează faptului că, în comparație cu un computer desktop, au resurse foarte limitate. Kilobytes de memorie, nu gigabytes. Megaherți pe procesor, nu gigaherți. Acesta este un preț de plătit pentru ieftinitate și eficiență energetică.

Prin urmare, avem nevoie de un limbaj care să poată compila și executa eficient. Adică se traduce chiar în acele zerouri și unuri din instrucțiuni cât mai optim posibil, fără a irosi instrucțiuni prețioase și memorie. Limbile menționate mai sus au acest tip de eficiență. Folosindu-le chiar și în limitele înguste ale resurselor microcontrolerului, puteți scrie programe bogate în funcții care rulează rapid.

Assembler, după cum ați văzut, nu poate fi numit cel mai simplu și mai elegant și, prin urmare, limbajul emblematic pentru Arduino este C/C++.

Multe surse spun că Arduino este programat în Limbajul Arduino, Prelucrare, Cablare. Aceasta nu este o afirmație complet corectă. Arduino este programat în C/C++, iar ceea ce se numește în aceste cuvinte este doar un „kit de corp” convenabil, care vă permite să rezolvați multe probleme comune fără a reinventa roata de fiecare dată.

De ce sunt menționate C și C++ în aceeași propoziție? C++ este o suprastructură a lui C. Fiecare program C este un program C++ valid, dar nu invers. Puteți folosi ambele. De cele mai multe ori, nici nu te vei gândi la ce folosești atunci când rezolvi problema actuală.

Mai aproape de subiect: primul program

Să scriem primul program pentru Arduino și să facem ca placa să-l execute. Trebuie să creați un fișier text cu codul sursă, să îl compilați și să alimentați fișierul binar rezultat la microcontrolerul de pe placă.

Să mergem în ordine. Să scriem codul sursă. Îl poți scrie în notepad sau în orice alt editor. Cu toate acestea, pentru a face munca convenabilă, există așa-numitele medii de dezvoltare (IDE: Integrated Development Environment). Sub forma unui singur instrument, acestea oferă un editor de text cu evidențiere și sugestii, un compilator lansat de un buton și multe alte bucurii. Pentru Arduino, acest mediu se numește Arduino IDE. Este disponibil gratuit pentru descărcare de pe site-ul oficial.

Instalați mediul și rulați-l. În fereastra care apare veți vedea: cele mai multe spațiu este acordat unui editor de text. Codul este scris în el. Codul din lumea Arduino este de asemenea numit schiţa.

Deci haideți să scriem o schiță care nu face nimic. Adică programul corect minim posibil în C++, care pur și simplu pierde timp.

void setup() ( ) void loop() ( )

Să nu ne concentrăm deocamdată pe sensul codului scris. Să-l compilam. Pentru a face acest lucru, în Arduino IDE, există un buton „Verificare” pe bara de instrumente. Faceți clic pe el și în câteva secunde fișierul binar va fi gata. Acest lucru va fi anunțat prin inscripția „Compilare finalizată” sub editorul de text.

Ca urmare, avem un fișier binar cu extensia .hex, care poate fi executat de microcontroler.

Acum trebuie să-l introduceți în Arduino. Acest proces se numește booting, flashing sau flooding. Pentru a încărca în Arduino IDE, există un buton „Încărcare” pe bara de instrumente. Conectați Arduino la computer printr-un cablu USB, faceți clic pe „Încărcați” și în câteva momente programul va fi încărcat pe Arduino. În acest caz, programul care a fost acolo anterior va fi șters.

Mesajul „Încărcare finalizată” va indica instalarea cu succes a firmware-ului.

Dacă întâmpinați o eroare când încercați să descărcați, asigurați-vă că:

    În meniul Instrumente → Placă, selectați portul la care este conectat de fapt Arduino. Puteți conecta și scoate cablul USB pentru a vedea ce port apare și dispare: acesta este Arduino.

    Ai instalat driverele necesare pentru Arduino. Acest lucru este necesar pe Windows, nu este necesar pe Linux și este necesar doar pe plăci mai vechi înainte de Arduino Duemilanove pe MacOS.

Felicitări! Ați trecut de la o tablă goală la un program de lucru în Arduino. Poate că nu face nimic, dar acesta este deja un succes.