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 ===== |