.. continuo dal precedente articolo hai analizzato la parte AtTiny85 encoder come master i2c, in questo articolo leggerai come realizzare un arduino o genuino slave i2c.
Lo scopo di questo articolo è chiarirti come realizzare la parte slave del dispositivo i2c.
Comunicazione I2C arduino / genuino
Alla comunicazione i2c arduino / genuino ho già dedicato qualche articolo che trovi nel blog, tuttavia un ripasso è comodo.
I pin destinati alla comunicazione i2c siano essi dispositivi master o slave sono SDA ed SCL rispettivamente, sulla genuino o arduino uno, corrispondenti ai pin A4 ed A5:
e riportati diametralmente opposti dalla R3 in poi.
Perché la comunicazione i2c funzioni è necessaria una configurazione simile a quella mostrata nell’immagine seguente:
in cui sono presenti due resistenze di pull-up da 10K ciascuna tra il pin Vcc ( +5v ) e ciascuna linea SDA ed SCL.
Warning!
Nell’esempio usato come schema ho omesso le resistenze di PULL-UP in quanto un esperimento di breve durata e solo a scopo dimostrativo.
Lo sketch AtTiny85 Encoder – Arduino Slave
Lo sketch elegge arduino o genuino a slave della comunicazione i2c in quanto il ruolo master è assolto dall’AtTiny85 Encoder:
#include <Wire.h> #define DEVICE_ID 0x08 void setup() { Serial.begin(9600); Wire.begin(DEVICE_ID); Wire.onReceive(receiveEvent); } void loop() { delay(1); } /***********************************************/ void receiveEvent(int howMany) { Serial.print( "Arg: " ); Serial.print( howMany ); Serial.print( " - rec: " ); while (Wire.available() > 0) { byte i = Wire.read(); byte sw = Wire.read(); Serial.print( i ); Serial.print( " - Switch: " ); Serial.println( sw ); } } /***********************************************/
lo sketch è simile a molti altri che hai già visto sul blog in merito all’argomento I2C, in cui alla linea 01: includi la libreria Wire.h necessaria per la comunicazione I2C;
linea 03: definisci l’indirizzo I2C che arduino dovrà avere e che deve essere identico a quello specificato nello sketch AtTiny85 encoder master altrimenti i due dispositivi non riusciranno a comunicare;
linee 09-10: inizializza la classe Wire dandole come indirizzo quello definito alla linea 03 e specifica che ogni ricezione dati sul bus I2C proveninete dall’AtTiny85 encoder deve richiamare la funzione receiveEvent che anlizzerai tra qualche linea;
linee 13-15: definisci la funzione loop(9 con u semplice delay di 1 millisecondo, in questo sketch potresti anche lasciarla vuota in quanto tutto il lavoro viene svolto dalla receiveEvent();
linea 19: definisci la funzione receiveEvent che accetta come parametro di input il numero di byte ricevuti;
linee 21-23: usa il monitor seriale per farti scrivere quanti byte ha ricevuto e del testo di separazione;
linea 25: se ricevi dei dati finché il buffer Wire è pieno esegui quanto specificato tra le parentesi graffe;
linea 26: leggi il primo byte e memorizzalo nella variabiel i ;
linea 27: leggi il secondo byte e memorizzalo nella variabile sw;
linee 29-31: scrivi sul monitor seriale i valori di i e sw letti sul bus I2c AtTiny85 encoder;
Il video AtTiny85 master I2C ed Arduino Slave
Il video che hai già visto nel precedente articolo dedicato all’AtTiny85 encoder master i2c
2 commenti
1 ping
Come faccio Mauro a ricomporre il byte e trasformarlo in int Dopo averlo inviato come high byte e low byte ? ,grazie!
Autore
Ciao Simone,
con le operazioni bitwise di shift, lo trovi nell’articolo successivo dedicato all’encoder AtTiny85 come encoder I2C
[…] Attiny85 Encoder Arduino Slave […]