====== Protocoale de transmisie ====== Pentru lucrarea curentă de laborator veți folosi biblioteca SparrowTransfer ce folosește clasele definite în laboratorul anterior pentru transmisia radio. Clasa implementează un protocol peste functiile de transmisie și recepție obișnuite și poate fi descărcată de {{::sparrowradio.zip|aici}}. Instalarea bibliotecii este foarte facilă, trebuie doar să dezarhivați arhiva în Arduino\libraries Mai jos aveți un exemplu care vă permite să trimiteți și să recepționați pachete de date de pe interfața radio. Pentru aceasta aveți nevoie de două noduri: primul rulează codul care transmite (Tx) și al doilea recepționează (Rx). Codul pentru Transmitter: #include "SparrowTransfer.h" //create object SparrowTransfer ST; struct SEND_DATA_STRUCTURE{ //put your variable definitions here for the data you want to send //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO uint16_t data; }; //give a name to the group of data SEND_DATA_STRUCTURE mydata; void blinkLED() //blinks the LED { digitalWrite(8,LOW); delay(20); digitalWrite(8,HIGH); } void setup(){ Serial.begin(9600); //start the library, pass in the data details ST.begin(details(mydata)); pinMode(8, OUTPUT); digitalWrite(8, LOW); mydata.data = 0; } void loop(){ mydata.data++; //send the data ST.sendData(); blinkLED(); delay(1000); } Codul pentru Receiver: #include "SparrowTransfer.h" //create object SparrowTransfer ST; struct RECEIVE_DATA_STRUCTURE{ //put your variable definitions here for the data you want to send //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO uint16_t data; }; //give a name to the group of data RECEIVE_DATA_STRUCTURE mydata; uint16_t old_index, received_index, lost; void setup(){ Serial.begin(9600); //start the library, pass in the data details ST.begin(details(mydata)); pinMode(11, OUTPUT); digitalWrite(11, HIGH); } void blinkLED() { digitalWrite(11, LOW); delay(20); digitalWrite(11, HIGH); } void loop(){ //check and see if a data packet has come in. if(ST.receiveData() == SUCCESS){ blinkLED(); received_index++; if(old_index != 0) lost += mydata.data - old_index - 1; Serial.print("Frame arrived: "); Serial.print(mydata.data); Serial.print(" "); Serial.print(", lost: "); Serial.print(lost); Serial.print(", loss: "); Serial.print(lost*100.0/(lost+received_index), 3); Serial.println("%"); old_index = mydata.data; } //optional delay, to disable flooding serial interface //delay(250); } **Task 0:** Rulați exemplele de mai sus. **Task 1:** Modificați structura de date pentru a conține urmatoarele câmpuri: adresa nodului care face transmisia (un octet), sequence number pentru transmisie (doi octeți) și payload (32 octeți). Trimiteți mesaje și afișati-le pe serială. **Task 2:** Modificați biblioteca pentru a permite transmisia bidirecțională de date.