Fade i2c attiny84 è l’esperimento di controllo dei led attarverso un attiny84 ed il protocollo IIC eseguito dalla Arduino Leonardo.
L’esempio da cui puoi partire per realizzare questo progetto è il fade che trovi tra gli esempi basic dell’IDE arduino.
In passato ho già trattato la descrizione di questo sketch che trovo tra gli esempi più significativi che lo staff arduino ci ha messo a disposizione.
Lo schema elettronico Fade i2c attiny84
per rendere semplice il collegamento dei led puoi utilizzare lo schema seguente:
già mostrato e descritto nell’articolo dedicato ai led ed Attiny84.
Ti puoi concentrare sul codice da caricare su Arduino Leonardo o su Arduino Uno senza cambiare nulla lato attiny84, comprendi come questo aspetto dell’uso del protocollo IIC è molto interessante.
Lo sketch Fade i2c attiny84
Lo sketch Fade i2c attiny84 mostrato di seguito lo caricherai sull’arduino:
//Code for the Arduino Master #include <Wire.h> #define TARGET_ID 0x08 byte brightness = 0; byte fadeAmount = 5; byte green = 0; void setup() { Wire.begin(); // join i2c bus (address optional for master) Serial.begin(9600); // start serial for output Serial.println( "Setup Success" ); } void loop() { Wire.beginTransmission(TARGET_ID); // send the address and the write cmnd Wire.write(brightness); Wire.write(255-brightness); Wire.write(green); // send three bytes Wire.endTransmission(); Serial.println( brightness ); brightness = brightness + fadeAmount; if (brightness <= 0 || brightness >= 255) { fadeAmount = -fadeAmount; green = !green; } delay(100); }
Descrizione dello sketch linea per linea
Iniziando dalla linea 02: includi la libreria Wire per gestire la comunicazione i2c;
linea 04: definisci l’ID target a cui l’attiny84 risponde;
linee 06-08: definisci 3 variabili di tipo byte che usi per la gestione dei valori da inviare allo slave;
linea 12: inizializza la libreria Wire;
linea 19: attiva la trasmissione i2c verso l’indirizzo target;
linea 20: invia come primo byte il valore brightness che in questo momento vale 0;
linea 21: invia l’inverso del valore brightness rispetto al valore massimo ( 255 );
linea 22: invia, come terzo byte, il valore di green, in questo momento 0;
linea 23: chiudi la trasmissione;
linea 27: incrementa il valore di brightness del corrispettivo fadeamount ( incremento );
linea 29: verifica se brightness è inferiore a 0 o maggiore a 255 per eseguire le linee successive;
linea 30: inverti il valore di fadeamount;
linea 31: inverti il valore di green;
Come avrai già intuito il led verde, o terzo valore inviato, serve a determinare se sei nel fronte ascendente o discendente. In ascesa il led resterà spento e viceversa in discesa.
Vedrai meglio il funzionamento nel video che ho realizzato durante la fase di test dello sketch: