AtTiny85 Encoder – Arduino Slave

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

Attiny85 Encoder nolight

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:

Basetta prototipazione semplificata arduino pinout

e riportati diametralmente opposti dalla R3 in poi.

Perché la comunicazione i2c funzioni è necessaria una configurazione simile a quella mostrata nell’immagine seguente:

from www.ermicro.com/blog

from www.ermicro.com/blog

in cui sono presenti due resistenze di pull-up da 10K ciascuna tra il pin Vcc ( +5v ) e ciascuna linea SDA ed SCL.

Attiny85 Encoder schema

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

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/attiny85-encoder-arduino-slave.html

2 comments

1 ping

    • Simone on 21 luglio 2018 at 18:52
    • Reply

    Come faccio Mauro a ricomporre il byte e trasformarlo in int Dopo averlo inviato come high byte e low byte ? ,grazie!

    1. Ciao Simone,
      con le operazioni bitwise di shift, lo trovi nell’articolo successivo dedicato all’encoder AtTiny85 come encoder I2C

  1. […] Attiny85 Encoder Arduino Slave […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.