This is an old revision of the document!


Laboratorul 02 - Operații GPIO

Scop

  • familiarizarea cu operațiile legate de pinii arduino
  • familiarizarea cu conceptele de bază din programare

Cuvinte cheie

  • pinMode, digitalWrite, HIGH, LOW, LED
  • for, if, while, vector

Concepte de programare

Variabile

Variabilele sunt moduri în care referențiem valori de anumite tipuri.

variabile.c
#include <stdio.h>
 
int main(void) 
{
      int variabila_numar = 10;
      char variabila_caracter = 'c';
      float variabila_numar_zecimale = 10.25;
      return 0;
}

Șiruri / Vectori

Șirurile/Vectorii sunt variabile mai inteligente de o anumită dimensiune ce pot stoca un șir de valori de fiecare tip de mai sus. Exemplu:

variabile.c
#include <stdio.h>
 
int main(void) 
{
      int sir[6];
      int sir2[] = { 1,2,3,4,5,6};
      char sir3[] = {'a', 'b', 'c', 'd'};
      char sir[6] = "salut";
      return 0;
}

If - Else

Propoziția if este o propoziție condițională folosită pentru a executa instrucțiuni în funcție de anumite condiție construcția if-else se traduce prin “dacă - altfel”:

if_else.c
#include <stdio.h>
 
int main(void) 
{
      int a = 10;
      if (a == 10) { //dacă a este egal cu 10
          // Fă operații când a este 10
      } else { // Altfel
          // Fă operații când a este diferit de 10
      }
      return 0;
}

For

Structura for este o structură repetitivă în funcție de o condiție. Mod de utilizare:

for.c
#include <stdio.h>
 
int main(void) 
{
      //for(inițializare, condiție, operație) {}
      int i;
      for (i = 0; i <= 10; i++) {
          printf("%d ", i); // Afișează i;
      } 
      return 0;
 
      // Codul de mai sus va afișa: 0 1 2 3 4 5 6 7 8 9 10
}

Parcurgerea unui șir

Accesarea unei anumite valori dintr-un vector se face prin index-ul(poziția) valorii din vector.

vector.c
#include <stdio.h>
 
int main(void) 
{
      int i;
      int vector[] = {1,2,3,4,5,6,7,8,9};
      int sum = 0;
 
      printf("%d\n", vector[2]); // Afișează 3
 
      for (i = 0; i < 9; i++) { // Pozițiile în vector încep de la 0!!
 
          sum = sum + vector[i]; // Suma tuturor elementelor din vector
      } 
 
      return 0;
}

Funcții

Funcţiile împart taskuri complexe în bucăţi mici mai uşor de înţeles şi de programat. Acestea pot fi refolosite cu alte ocazii, în loc să fie rescrise de la zero. De asemenea, funcţiile sunt utile pentru a ascunde detalii de funcţionare ale anumitor părţi ale programului, ajutând la modul de lucru al acestuia. Utilizând funcţii, care reprezintă unitatea fundamentală de execuţie a programelor C, se obţine o divizare logică a programelor mari şi complexe.

vector.c
#include <stdio.h>
 
void afiseaza(int number) {
    printf("%d\n", number);
}
 
int main(void) 
{
    int x = 10;
 
    afiseaza(10); // Va afisa valoarea 10
 
    return 0;
}

Operații pini arduino

Pentru a folosi pinii unui arduino trebuie să setăm modul în care dorim să îi folosim (INPUT/OUTPUT). Exemplu:

void setup() {
    pinMode(PINUL_MEU, INPUT);
    pinMode(PINUL_MEU2, OUTPUT);
}
void loop() {
}

Dacă am setat un pin pe modul OUTPUT, acum putem elibera voltaj pe acest pin folosind digitalWrite. Exemplu:

void setup() {
    pinMode(PINUL_MEU, INPUT);
    pinMode(PINUL_MEU2, OUTPUT);
}
void loop() {
    digitalWrite(PINUL_MEU, HIGH); //Pe acest pin avem acum 5v
    delay(3000); // Așteaptă 3 secunde
    digitalWrite(PINUL_MEU, LOW); //Acum avem 0v pe acest pin
}

Exerciții

Toate exercițiile vor fi realizate pe Tinkercad

  1. Folosind un arduino, un Led și un resistor de 220 ohmi, aprindeți și stingeți un led la un interval fix de timp.
  2. Simulați un semafor de mașini și un semafor de pietoni care să fie sincronizate. Semafoarele vor fi implementate folosind led-uri și parcurgerea acestora trebuie făcută cu șiruri/vectori.
  3. Conectați la un arduino un 7 segment display și folosind funcții ajutătoare, afișați fiecare număr pe display 100
info2/laboratoare/02.1583232414.txt.gz · Last modified: 2020/03/03 12:46 by liviu.moraru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0