Bogdan's Docs

Table of Contents

Table of Contents

  • Scurtă Introducere în C++
    • Cel mai simplu!
    • Să aprindem un LED!
    • Să culegem date!
    • Condiții

Ideas

  • Artificial Intelligence
    • Bond Pricing
    • Kubernetes Inference
    • Knowledge Bot
    • Ready to Use Models
    • Satellite Damage Detection

Curs IoT si AI (ro) Resources

  • Links
    • Artificial Intelligence
  • Recipes
    • MacOS
Bogdan's Docs
Docs » iot-si-ai:scurta_introducere_in_cpp

Scurtă Introducere în C++

C++ este un limbaj de programare foarte răspândit. Spre deosebire de alte limbaje de programare, este unul dintre puținele limbaje populare care este compilat. Asta înseamnă că pentru ca un program (i.e. o succesiune de instrucțiuni scrise folosind regulile limbajului) să poate fi rulat, trebuie convertit de o componentă numită compilator în limbaj specific mașinii pe care va rula. În cazul Arduino, acest procedeu este extrem de avantajos - asta deoarece programul compilat are o dimensiune suficient de mică pentru a încăpea în memoria Arduino și în același timp, fiind transcris în limbajul pe care mașina îl înțelege cel mai bine, programul va rula cu viteză maximă.

Principalul neajuns al limbajelor compilate - și în special al C++ - este că atunci când scriem un program în acest limbaj va trebui să gestionăm memoria noi înșine.

Totalitatea instrucțiunilor de bază disponibile pentru Arduino se găsesc aici. Acestea pot fi extinse în orice moment cu ajutorul bibliotecilor software - diferite funcții sau obiecte pe care alți programatori le-au scris și pe care le poți utiliza în programele tale fără să le rescrii.

Cel mai simplu!

Acest exemplu este cel mai simplu program valid pentru Arduino. Nu va face însă nimic:

void setup() {
  // put your setup code here, to run once:
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
}

Ce sunt?

  • { … }: În limbajul de programare C++, acoladele { și } sunt folosite pentru a delimita blocuri de cod, ceea ce înseamnă că toate instrucțiunile cuprinse între aceste acolade sunt considerate ca fiind parte a aceluiași bloc de cod. De exemplu, putem folosi acoladele pentru a delimita corpul unei funcții. În acest exemplu, acoladele sunt folosite pentru a delimita blocul de cod al funcției setup. Orice cod care urmează după acoladele de închidere a blocului de cod al funcției nu va mai fi considerat parte din această funcție. Acolo unde se găsesc acoladele, acestea pot fi folosite și pentru a marca începutul și sfârșitul unui bloc de cod condițional (de exemplu, un bloc if-else), sau pentru a marca începutul și sfârșitul unui bloc de cod de tip buclă (de exemplu, un bloc while sau for).
  • void setup() { … }: În limbajul de programare pentru plăcile Arduino, funcția setup este o funcție specială care este apelată o singură dată atunci când Arduino este pornit sau resetat și este folosită pentru a configura placa Arduino. Această funcție este obligatorie în orice program pentru Arduino și trebuie să fie prezentă, chiar dacă nu este necesar să facă nimic în interiorul ei. În cadrul funcției void setup, programatorul poate configura pini digitali sau analogici, poate inițializa comunicarea cu alte dispozitive (de exemplu, un modul Bluetooth sau un senzor) poate inițializa biblioteci și obiecte.
  • void loop() { … }: În limbajul de programare pentru plăcile Arduino, funcția void loop() este o funcție specială care este apelată continuu pe durata funcționării programului pe placa Arduino. Această funcție este obligatorie în orice program pentru Arduino și este locul în care se scrie codul care va fi executat în mod repetat, la fiecare iterație a buclei principale a programului. În cadrul funcției void loop(), programatorul poate scrie cod pentru a citi și procesa date de la senzori sau alte dispozitive, periodic, poate controla ieșirile digitale ale plăcii (cum ar fi LED-uri sau motoare), poate scrie date pe afișaje sau alte dispozitive de ieșire.

Să aprindem un LED!

Programul următor va aprinde și va stinge periodic un LED.

int ledPin = 4;
void setup() {
    pinMode(ledPin, OUTPUT);
}
void loop() {
    digitalWrite(ledPin, HIGH);
    delay(1000);
    digitalWrite(ledPin, LOW);
    delay(1000);
}

Ce sunt?

  • ;: În limbajul de programare C++, ; este un simbol utilizat pentru a marca sfârșitul unei instrucțiuni. Fiecare instrucțiune în C++ trebuie să fie închisă cu un ;, altfel compilatorul va afișa o eroare de sintaxă. Fără utilizarea simbolului ;, compilatorul nu va ști unde se termină o instrucțiune și unde începe alta, ceea ce va duce la erori în procesul de compilare a programului.
  • int ledPin = 4;: În limbajul de programare C++ pentru Arduino, int ledPin = 4; este o instrucțiune de declarație și inițializare a unei variabile de tip întreg, numită ledPin, cu valoarea 4. Această instrucțiune este utilizată pentru a defini un număr de pin pe placa Arduino care va fi utilizat pentru a controla un LED sau alt dispozitiv digital. În acest exemplu, int este tipul de date al variabilei ledPin, care reprezintă un număr întreg. Variabila ledPin este declarată și inițializată cu valoarea 4. Această valoare reprezintă numărul pinului de pe placa Arduino la care este conectat un LED. După această instrucțiune, variabila ledPin poate fi utilizată în program pentru a face referire la pinul specific al plăcii Arduino.
  • pinMode(ledPin, OUTPUT);: În limbajul de programare pentru plăcile Arduino, instrucțiunea pinMode este folosită pentru a configura modul de funcționare al unui pin de pe placa Arduino. Această instrucțiune specifică dacă un pin dat este utilizat ca intrare sau ieșire digitală. Sintaxa instrucțiunii pinMode este următoarea: pinMode(pin, mode); unde pin reprezintă numărul pinului pe care dorim să îl configurăm, iar mode reprezintă modul de funcționare pe care dorim să îl setăm pentru acel pin, care poate fi INPUT (intrare) sau OUTPUT (ieșire). În general, este important să configurăm corect modul de funcționare al pinilor pe placa Arduino, deoarece aceștia pot fi utilizați în diferite moduri pentru a comunica cu diferite dispozitive și senzori, pentru a controla motoare sau alte dispozitive de ieșire, sau pentru a citi date de la senzori sau alte surse de intrare.
  • OUTPUT: În limbajul de programare pentru plăcile Arduino, OUTPUT este denumirea unei constante ce reprezintă una dintre valorile posibile pentru modul de funcționare al unui pin digital, care indică în acest caz faptul că pinul respectiv va fi folosit ca ieșire digitală.
  • LOW, HIGH: În limbajul de programare pentru plăcile Arduino, LOW și HIGH sunt două constante care reprezintă valorile posibile pentru starea unui pin digital. Valoarea LOW indică faptul că pinul respectiv are o tensiune de ieșire de 0V, ceea ce poate fi utilizat pentru a controla dispozitive care necesită o tensiune de intrare de 0V. Valoarea HIGH, pe de altă parte, indică faptul că pinul respectiv are o tensiune de ieșire de 5V, ceea ce poate fi utilizat pentru a controla dispozitive care necesită o tensiune de intrare de 5V. Curentul maxim care poate trece prin circuitul care conține un pin Arduino este de 40mA.
  • digitalWrite(ledPin, HIGH);: Funcția digitalWrite() este o funcție în limbajul de programare pentru plăcile Arduino, utilizată pentru a seta starea unui pin digital. Aceasta poate fi utilizată pentru a controla dispozitive care necesită un semnal digital, cum ar fi LED-uri, motoare sau alte componente electronice. Sintaxa funcției este următoarea: digitalWrite(pin, value);, unde pin este numărul pinului digital pentru care se setează starea, iar value este valoarea stării, care poate fi HIGH sau LOW.
  • delay(1000);: Funcția delay() este o funcție în limbajul de programare pentru plăcile Arduino, utilizată pentru a aștepta un anumit interval de timp în milisecunde. Sintaxa funcției este următoarea delay(time); unde time este timpul de așteptare în milisecunde. De exemplu, delay(1000); va aștepta timp de 1 secundă. Această funcție poate fi utilă într-o varietate de scenarii, cum ar fi întârzierea unui anumit număr de milisecunde între două instrucțiuni consecutive sau crearea unui interval regulat de timp între două acțiuni, ca în cazul programului de mai sus.

Să culegem date!

Programul următor va trimite textul hello, world către calculatorul la care este conectat Arduino, o dată pe secundă, la nesfârșit:

void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println("hello, world");
  delay(1000);
}

Ce sunt?

  • Serial: Obiectul Serial este un obiect în cadrul limbajului de programare pentru plăcile Arduino, care permite comunicarea serială între placa Arduino și un alt dispozitiv, precum un calculator sau un alt microcontroler. Mai multe detalii aici: cum comunică Arduino?
  • Serial.begin(9600);:
  • “hello, world”: Textul hello, world cuprins între ghilimele duble, drepte “ reprezintă valoarea unui șir de caractere. Mai multe detalii aici: tipuri de date.
  • Serial.println(“hello, world”): Serial este un obiect definit în biblioteca standard a Arduino și este utilizat pentru comunicarea serială între placa Arduino și computer. Funcția println() este folosită pentru a trimite un mesaj împreună cu caracterul pentru o linie nouă către calculator, vizibil din Serial Monitor, iar în acest caz mesajul trimis este “hello, world”. În general, Serial.println() este utilizat frecvent în aplicațiile Arduino pentru a afișa date și informații utile în timpul procesului de dezvoltare și depanare.

Condiții

Programul de mai jos aprinde LED-ul conectat la pinul 4 al Arduino, dacă sunetul recepționat de microfonul conectat la pinul A0 este puternic:

int soundPin = A2;
int ledPin = 4;
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(soundPin, INPUT);
  Serial.begin(9600);
}
void loop(){
  int soundState = analogRead(soundPin);
  Serial.println(soundState);
  if (soundState > 400) {
    digitalWrite(ledPin, HIGH);
    delay(100);
  }else{
    digitalWrite(ledPin, LOW);
  }
}

Ce sunt?

  • int soundState = analogRead(soundPin);: Instrucțiunea este utilizată pentru a citi valoarea intrări analogice soundPin și a o stoca într-o variabilă întreagă numită soundState. analogRead(soundPin) este o funcție în biblioteca standard a Arduino care citește valoarea analogică de la pinul specificat (în acest caz, soundPin) și o convertește într-o valoare digitală între 0 (corespunzătoare 0V) și 1023 (corespunzătoare 5V). Această valoare digitală este apoi atribuită variabilei întregi soundState. În general, această instrucțiune este utilizată în aplicațiile Arduino care implică utilizarea senzorilor analogici, precum senzorii de lumină, de temperatură sau de sunet. Aceste senzori produc semnale analogice care trebuie citite și convertite într-o valoare digitală pentru a fi utilizate în programul Arduino.
  • soundState > 400: Expresia soundState > 400 în C++ este o expresie de tip boolean, care evaluează dacă valoarea stocată în variabila soundState este mai mare decât 400. Dacă valoarea stocată în soundState este mai mare decât 400, expresia va returna valoarea true (adevărat). În caz contrar, expresia va returna valoarea false (fals). Această expresie poate fi utilizată în cadrul instrucțiunilor de decizie (condiționale), cum ar fi instrucțiunea if, pentru a lua decizii bazate pe valoarea variabilei soundState.
  • if (soundState > 400) { … }: Cu expresia if (soundState > 400) { … }, instrucțiunea if verifică dacă valoarea variabilei soundState este mai mare decât 400 și în cazul în care acest lucru se întâmplă, programul va executa instrucțiunile cuprinse între acolade { … }.
  • if (…) { … } else { … }: Instrucțiunile de decizie if-else sunt utilizate în C++ pentru a permite programului să ia decizii în funcție de o condiție dată. Sintaxa generală a unei astfel de instrucțiuni este:
    if (conditie) {
      // blocul de cod care se va executa dacă condiția este adevărată
    } else {
      // blocul de cod care se va executa dacă condiția este falsă
    }

    Unde conditie este o expresie care trebuie evaluată ca adevărată sau falsă. Dacă condiția este adevărată, atunci se va executa blocul de cod din primul set de acolade, iar dacă este falsă, atunci se va executa blocul de cod din al doilea set de acolade. Blocurile de cod pot conține una sau mai multe instrucțiuni. De exemplu, să presupunem că vrem să verificăm dacă un număr este par sau impar și să afișăm un mesaj corespunzător. Un exemplu de cod care folosește instrucțiunea if-else pentru a realiza acest lucru ar fi:

    int numar = 5;
     
    if (numar % 2 == 0) {
        Serial.println("Numarul este par.");
    } else {
        Serial.println("Numarul este impar.");
    }

    În acest exemplu, variabila numar este verificată pentru a vedea dacă numărul conținut este par sau impar. Dacă restul împărțirii numărului la 2 este 0 (operatorul de rest %), atunci numărul este par și se va afișa mesajul Numarul este par.. Dacă restul împărțirii nu este 0, atunci numărul este impar și se va afișa mesajul Numarul este impar..

Previous Next