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

Prima di inserire un commento, per favore, 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 Lug 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.