This shows you the differences between two versions of the page.
|
pm:lab:lab6-2021 [2021/04/18 21:28] alexandru.predescu [3. Regiștrii configurare I2C] |
pm:lab:lab6-2021 [2021/04/22 13:43] (current) dumitru.brigalda |
||
|---|---|---|---|
| Line 82: | Line 82: | ||
| {{ pm:lab:master_sender_bb.png?500 }} | {{ pm:lab:master_sender_bb.png?500 }} | ||
| - | **Master_reader_example** | + | **Master Writer** |
| + | <code c> | ||
| + | #include <Wire.h> | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | Wire.begin(); // join i2c bus (address optional for master) | ||
| + | } | ||
| + | |||
| + | byte x = 0; | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | Wire.beginTransmission(4); // transmit to device #4 | ||
| + | Wire.write("x is "); // sends five bytes | ||
| + | Wire.write(x); // sends one byte | ||
| + | Wire.endTransmission(); // stop transmitting | ||
| + | |||
| + | x++; | ||
| + | delay(500); | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | **Slave Reader** | ||
| + | <code c> | ||
| + | #include <Wire.h> | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | Wire.begin(4); // join i2c bus with address #4 | ||
| + | Wire.onReceive(receiveEvent); // register event | ||
| + | Serial.begin(9600); // start serial for output | ||
| + | } | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | delay(100); | ||
| + | } | ||
| + | |||
| + | // function that executes whenever data is received from master | ||
| + | // this function is registered as an event, see setup() | ||
| + | void receiveEvent(int howMany) | ||
| + | { | ||
| + | while(1 < Wire.available()) // loop through all but the last | ||
| + | { | ||
| + | char c = Wire.read(); // receive byte as a character | ||
| + | Serial.print(c); // print the character | ||
| + | } | ||
| + | int x = Wire.read(); // receive byte as an integer | ||
| + | Serial.println(x); // print the integer | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | |||
| + | **Master Reader** | ||
| <code c> | <code c> | ||
| #include <Wire.h> | #include <Wire.h> | ||
| Line 103: | Line 157: | ||
| </code> | </code> | ||
| - | **Slave_writer_example** | + | **Slave Writer** |
| <code c> | <code c> | ||
| Line 128: | Line 182: | ||
| ===== 5. Exerciții ===== | ===== 5. Exerciții ===== | ||
| - | **Task 0** Folosiți codul Arduino pentru a implementa exemplu Master Reader/Slave Writer astfel încât să activăm transmisiunea la apăsarea unui buton de pe Master iar pe Slave în momentul în care transmisiunea este recepționată se aprinde un led. | + | **Task 0** Folosiți codul Arduino pentru a implementa un Master Reader și un Slave Writer. Master-ul va avea atașat un led, iar Slave-ul un buton. Master-ul trebuie să interogheze Slave-ul despre starea butonului și să aprindă/stingă led-ul în funcție de starea butonului (apăsat/neapăsat). Cele două board-uri vor comunica pe I2C. Pentru realizarea comunicării, Master-ul trebuie să facă request de citire a 3 caractere, iar Slave-ul să răspundă cu starea butonului: "ON!" sau "OFF". |
| + | {{ :pm:lab:lab_i2c_task0.png?500 |}} | ||
| + | |||
| + | **Task 1** Folosiți codul Arduino pentru a implementa un Master Writer și un Slave Reader. Master-ul va avea atașate 2 butoane, iar Slave-ul un led. Master-ul trebuie să trimită Slave-ului una din cele 2 comenzi: "ON!" sau "OFF". Cele două board-uri vor comunica pe I2C. Pentru realizarea comunicării, la apăsarea primului buton, Master-ul trebuie să trimită comanda "ON!", iar la apăsarea butonului 2, comanda "OFF". În funcție de comanda recepționată, Slave-ul va aprinde/stinge led-ul. | ||
| + | {{ :pm:lab:lab_i2c_task1.png?500 |}} | ||
| - | **Task 1** Folosiți codul Arduino pentru a implementa exemplu Master Writer/Slave Reader astfel încât să activăm transmisiunea la apăsarea unui buton de pe Master iar pe Slave în momentul în care transmisiunea este recepționată se aprinde un led. | + | <hidden> |
| + | {{https://www.tinkercad.com/things/aWsNXOGkVBR|Soluție Task0 și Task1}} | ||
| + | </hidden> | ||
| + | <hidden> | ||
| **Task 2** Folosiți codul Arduino pentru a implementa un ceas digital folosind un model de LCD pornind de la codul disponibil: [[https://www.tinkercad.com/things/i5JAD1DytMu-copy-of-arduino-digital-clock-without-rtc-module/editel?sharecode=NA25XBlf6CdMtIZ9UNoAWGDuaUopZQh8aAye2WJZUEU|Arduino LCD Digital Clock]] | **Task 2** Folosiți codul Arduino pentru a implementa un ceas digital folosind un model de LCD pornind de la codul disponibil: [[https://www.tinkercad.com/things/i5JAD1DytMu-copy-of-arduino-digital-clock-without-rtc-module/editel?sharecode=NA25XBlf6CdMtIZ9UNoAWGDuaUopZQh8aAye2WJZUEU|Arduino LCD Digital Clock]] | ||
| + | </hidden> | ||
| ===== 6. Resurse ===== | ===== 6. Resurse ===== | ||