Differences

This shows you the differences between two versions of the page.

Link to this comparison view

info2:laboratoare:05-old [2021/03/29 23:45]
alexandru.vochescu created
info2:laboratoare:05-old [2021/03/30 15:25] (current)
alexandru.vochescu [Exerciții]
Line 1: Line 1:
-===== Lab 02 - GPIO operations ​=====+====== Laboratorul 05 Arduino: Interfața serială, ​GPIO și Led-uri ​ ======
  
-===== Purpose ​===== +===== Scopul laboratorului ​===== 
-  * Get familiar with operations related to Arduino ​pins +  * Familiarizarea cu operațiunile cu pinii Arduino 
-  * Get familiar with the basic concepts of programming+  * Reamintirea cunoștințelor de bază din C
  
-===== Keywords ​=====+===== Cuvinte cheie =====
   * pinMode, digitalWrite,​ HIGH, LOW, LED   * pinMode, digitalWrite,​ HIGH, LOW, LED
   * for, if, while, vector   * for, if, while, vector
  
-===== Programming concepts ​=====+===== Programarea în C ===== 
 + 
 +==== Variabile ==== 
 +Variabilele sunt folosite pentru a stoca diverse informații de tipuri diferite.
  
-==== Variables ==== 
-Variables are ways in which we store values ​​of certain types. ​ 
 <code c variabile.c>​ <code c variabile.c>​
  
Line 26: Line 27:
 </​code>​ </​code>​
  
-==== Arrays ​==== +==== Vectori ​==== 
-Arrays are complex variables of a certain size that can store a list of valuesExample+Vectorii sunt variabile mai complexe de o dimensiune specifică, setată, care pot stoca o listă de valoriDe exemplu:
 <code c variabile.c>​ <code c variabile.c>​
  
Line 43: Line 44:
    
 ==== If - Else ==== ==== If - Else ====
-The if statement is conditional sentence used to execute instructions based on certain conditionsThe if-else ​construction translates to "​if ​otherwise"​:+Propoziția ​if este o propoziție condițională folosită pentru ​executa instrucțiuni în funcție de anumite condițiiConstrucția ​if-else ​se traduce prin “dacă ​altfel”:
  
 <code c if_else.c>​ <code c if_else.c>​
Line 52: Line 53:
 { {
       int a = 10;       int a = 10;
-      if (a == 10) { //if is equal to 10 +      if (a == 10) { // Dacă este egal cu 10           
-          // do operations when is 10 +         ​// Fă operații dacă este 10 
-      } else { // Else +      } else { // Altfel 
-          // do operations when is different from 10+         ​// Fă operații când este diferit de 10
       }       }
       return 0;       return 0;
 } }
 </​code>​ </​code>​
 +
 ==== For ==== ==== For ====
-The for structure is a repetitive structure dependent on a conditionUsage:+Structura ​for este o structură repetitivă în funcție de o condițieMod de utilizare:
 <code c for.c> <code c for.c>
  
Line 75: Line 77:
       return 0;       return 0;
       ​       ​
-      // The code above will display: 0 1 2 3 4 5 6 7 8 9 10+      // Codul de mai sus va afișa: 0 1 2 3 4 5 6 7 8 9 10
 } }
 </​code>​ </​code>​
-==== Iterate an array ====  + 
-Accessing a certain value in an array is done by the index (positionof the value in the array+==== Parcurgerea unui șir ====  
 +Accesarea unei anumite valori dintr-un vector se face prin index-ul(pozițiavalorii din vector. 
 <code c vector.c>​ <code c vector.c>​
  
Line 90: Line 94:
       int sum = 0;       int sum = 0;
       ​       ​
-      printf("​%d\n",​ arr[2]); // show 3+      printf("​%d\n",​ arr[2]); // afișează ​3
                
-      for (i = 0; i < 9; i++) { // the positions in arrays start from 0!!+      for (i = 0; i < 9; i++) { // Pozițiile în vector încep de la 0!!
           ​           ​
-          sum = sum + arr[i]; // the sum of all the elements in the array+          sum = sum + arr[i]; // calculăm suma tuturor elementelor din vector
       }        } 
       ​       ​
Line 101: Line 105:
 </​code>​ </​code>​
  
-==== Functions ​====  +==== Funcții ​====  
-The functions divide complex tasks into small pieces that are easier to understand and to programThese can be reused for other occasionsinstead of being rewritten from scratchAlsothe functions are useful for hiding the operating details of certain parts of the program, ​helping in its working modeUsing functionswhich represent the fundamental ​unit of execution of programs, a logical division of large and complex programs is obtained.+Funcțiile separă sarcini diferite, complexe în părți mai mici care sunt mai ușor de înțeles și programatAvantajul este că putem refolosi aceste secțiuni de oricâte ori avem nevoiefără a mai rescrie acele zone de cod de la 0De asemeneaacestea sunt extrem de utile pentru ascunderea detaliilor de funcționare a unor bucăți de program, ​ajutând la scrierea și citirea coduluiPrin utilizarea funcțiilorcare reprezintă unitatea ​fundamentală de execuție a programelor din C, se obține o divizare logică ​programelor complexe și mari.
  
 <code c vector.c>​ <code c vector.c>​
Line 108: Line 112:
 #include <​stdio.h>​ #include <​stdio.h>​
  
-void show(int ​number) { +void show(int ​nr) { 
-    printf("​%d\n", ​number);+    printf("​%d\n", ​nr);
 } }
  
Line 116: Line 120:
     int x = 10;     int x = 10;
     ​     ​
-    show(10); // it will show 10+    show(10); // va printa pe ecran 10
     ​     ​
     return 0;     return 0;
 } }
 </​code>​ </​code>​
-===== Arduino ​pins operations ​===== + 
-To use the pins of the Arduino, ​we need to set the way we want to use them (INPUT/OUTPUT). Example+===== Arduino. Utilizarea serialei ​===== 
 +Pentru a afișa datele citite de pe pini de la senzori ne dorim să utilizăm Seriala de pe Arduino. Seriala este un utilitar similar cu **cout** din C++. 
 + 
 +==== Mod de utilizare Serială ==== 
 +**Funcții:​** 
 +  * Serial.print(cuvânt) - Afișează cuvânt fără spațiul 
 +  * Serial.println(cuvânt) - Printează cuvânt iar următorul print se va face pe linia următoare  
 +<code arduino.c>​ 
 +void setup() 
 +
 +  Serial.begin(9600);​ // Setăm frecvența pentru Serial Monitor 
 +  Serial.println("​Am început programul"​);​ 
 +
 + 
 +void loop() 
 +
 +  Serial.print("​Salut"​);​ // Printează Salut la infinit!!! 
 +
 +</​code>​ 
 + 
 +La rularea codului de mai susîn Serial Monitor se va afișa Salut la infinit fără spații între cuvinte: "​SalutSalutSalutSalutSalutSalut"​ 
 + 
 +<code arduino.c>​ 
 +int buton = 2; 
 +void setup(
 +
 +  Serial.begin(9600);​ // Setăm frecvența pentru Serial Monitor 
 +  Serial.println("​Am început programul"​);​ 
 +  pinMode(buton, ​INPUT); 
 +
 + 
 +int buttonState = 0; 
 +void loop() 
 +
 +  buttonState = digitalRead(buton);​ 
 +  Serial.print("​Starea butonului este: "); // Mesaj ce se afișează înaintea valorii 
 +  Serial.println(buttonState); ​            // 0 sau 1 funcție de starea butonului 
 +
 +</​code>​ 
 + 
 +Outputul codului de mai sus va fi: 
 + 
 +Am început programul 
 + 
 + 
 +Starea butonului este 0 
 + 
 + 
 +Starea butonului este 0 
 + 
 + 
 +Starea butonului este 0 
 + 
 + 
 +//Am apăsat pe buton// 
 + 
 +Starea butonului este 1 
 + 
 + 
 +Starea butonului este 1 
 + 
 + 
 +Starea butonului este 1 
 + 
 + 
 +==== Operații cu pinii Arduino ==== 
 + 
 +Pentru a utiliza pinii Arduino, trebuie să setăm modul în care vrem să îi folosim (Input/Output). De exemplu:
  
 <code arduino.c>​ <code arduino.c>​
 void setup() { void setup() {
-    pinMode(MY_PIN_IN, INPUT); +    pinMode(PINUL_DORIT, INPUT); ​// sau 
-    pinMode(MY_PIN_OUT, OUTPUT);+    pinMode(PINUL_DORIT, OUTPUT);
 } }
 +
 void loop() { void loop() {
 } }
 </​code>​ </​code>​
  
-If we set pin to OUTPUT modewe can now output voltage to this pin using digitalWrite(). ​Example:+Dacă setăm un pin în modul de outputputem seta tensiunea pe acesta folosind funcția ​digitalWrite(). ​De exemplu:
  
 <code arduino.c>​ <code arduino.c>​
 void setup() { void setup() {
-    pinMode(MY_PIN_IN, INPUT); +    pinMode(PINUL_DORIT, INPUT); 
-    pinMode(MY_PIN_OUT, OUTPUT);+    pinMode(PINUL_DORIT, OUTPUT);
 } }
 void loop() { void loop() {
-    digitalWrite(MY_PIN_OUT, HIGH); //on this pin we now have 5V +    digitalWrite(PINUL_DORIT, HIGH); // acum avem pe acest pin tensiunea de 5V 
-    delay(3000);​ // wait 3 seconds +    delay(3000);​ // așteptăm trei secunde 
-    digitalWrite(MY_PIN_OUT, LOW); //now we have 0V on this pin+    digitalWrite(PINUL_DORIT, LOW); // acum avem pe acest pin tensiunea de 0V
 } }
  
 </​code>​ </​code>​
  
-===== Exercises ​===== +==== Conectare LED la Arduino ==== 
-All exercises will be performed on[[https://​www.tinkercad.com/​| Tinkercad]] + 
-  - Use voltmeter to measure the voltage on GPIO pin number ​3. Set the pin to HIGH and LOW and notice how the values change+Pentru a conecta un LED, avem nevoie de fire, o rezistență de 220 de Ohmi și bineînțeles un LED. Un exemplu de conectare avem în poza de mai jos: 
-  - Using an **ARDUINO**, **LED** ​and a **220 ohm RESISTOR**, turn on the LED (don't use GPIO pins), then measure the current and the voltage on that circuit. + 
-  - Using an **ARDUINO**, **LED** ​and a **220 ohm RESISTOR**, make the LED blinkSolve this exercise in two ways.  +{{:​info2:​laboratoare:​led_arduino.jpeg?​400|}} 
-  - Simulate a car traffic light and a pedestrian traffic light to be synchronizedThe traffic lights will be implemented using LEDs and will iterate an arraySolve this exercise in two ways+ 
-  - Connect to an **ARDUINO** **7 SEGMENT DISPLAY** ​and using helper functions, display each number on the display. ​Solve this exercise in two waysuse a common ​anode 7 segment display, then a common ​cathode ​one+Circuitul este simplu: de la pinul de alimentare (pinul GPIO digital 3), conectăm rezistența de 220 de Ohmi, apoi conectăm anod-ul LED-ului. De la catod-ul LED-ului vom pleca apoi cu un fir până la un ground (GND) de pe placă. Apoi pentru a aprinde LED-ul va trebui să scriem valoarea **HIGH** pe pinul 3. 
-  - Using the 7 segment display implement a counter that displays the numbers from to 9.+===== Exerciții ​===== 
 +Toate exercițiile vor fi rezolvate pe [[https://​www.tinkercad.com/​| Tinkercad]]
 +  - Folosiți interfața serială pentru a afișa la infinit un mesaj de tipul: "​Salut,​ numele meu este X și am Y ani". Mesajul trebuie să fie afișat unul pe linie, iar X și Y trebuie să fie variabile în cod (Nu folosiți direct valorile voastre). 
 +  - Folosiți un voltmetru pentru ​măsura tensiunea pe pinul GPIO 3. Setați pinul pe HIGH și respectiv ​LOW și observați cum se schimbă valorile
 +  - Folosind un **Arduino**, un **LED** ​și o **rezistență de 220 de ohmi**, aprindeți ​LED-ul (fără a folosi pini GPIO) și apoi măsurați curentul și tensiunea în acel circuit. 
 +  - Folosind un **Arduino**, un **LED** ​și o **rezistență de 220 de ohmi** faceți ​LED-ul să "​pâlpâie"​Rezolvați exercițiul în două moduri
 +  - Transmiteți mesajul "​SOS"​ prin codul Morse folosind un **Arduino**,​ un **LED** și o **rezistență de 220 de ohmi**. 
 +  - Simulați un semafor pentru mașini și un semafor pentru pietoni care trebuie să fie sincronizateSemafoarele vor fi implementate folosind LED-uri, iar pentru semaforul de mașini se va folosi un vector
 +  - Conectați la un **Arduino** un **7 SEGMENT DISPLAY** ​și afișați fiecare cifră pe display. ​Rezolvați acest exercițiu în două modurifolosind varianta "anode" și respectiv "cathode"
 +  - Utilizând ecranul de la exercițiul anterior, implementați un numărător care să numere de la la 9.
 {{:​info2:​laboratoare:​arduino-7-segment-display.png?​200|100}} {{:​info2:​laboratoare:​arduino-7-segment-display.png?​200|100}}
-  - Connect 5 LEDs and control them so that each one flashes one at a time: first once, second twice, etc. 
-  - Use an LED to signal a word in morse code. 
-  - Use a buzzer to do the same. 
  
info2/laboratoare/05-old.1617050715.txt.gz · Last modified: 2021/03/29 23:45 by alexandru.vochescu
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