home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca
 
COMUNICAZIONE I2C FRA 2 ARDUINO tipo: livello:
Inviare attraverso la porta I2C un valore che identifica l'accensione di un Led, da un button switch su la prima scheda arduino a l'accensione del led sulla seconda scheda arduino.
 
 



 

 Comunicazione I2C tra due arduino


Questo progetto serve a spiegare a neofiti (come me), come si fa a collegare in modo semplice e veloce 2 schede arduino o anche due microcontrollori qualsiasi che hanno a disposizione le porte I2C. Nell'esempio che propongo accenderò un led collegato ad una scheda con la pressione di pulsante su l'altra scheda.

Descrizione


Materiale occorrente:

2 resistenze da 4,7kohm

2 resistenze da 10k ohm

1 led

1 button switch

2 schede arduino uno

_______________________________

i2c arduino

Lo schema sopra è stato sviluppato con fritzing, bisogna prima di tutto che il 5v ed il GND delle due schede siano condivise (obbligatorio), poi collegare le porte 4(SDA) e 5(SCL) delle due schede, tutte e due le porte vanno collegate in pull up con una resistenza su ogni porta di 4,7k, nel nostro caso sono collegate solo le due schede, ma I2C prevede fino a 128 collegamenti.

 

Scheda 1 "slave"

Per continuare su una scheda verrà collegato il pulsante switch alla porta 4, il pulsante ha una resistenza di 10k su GND.

di seguito il codice:

#include <Wire.h>

const int buttonPin = 4;

void setup()

{

  pinMode(buttonPin, INPUT);

  Wire.begin(2);                // entra nel bus I2C con indirizzo 2

  Wire.onRequest(requestEvent); // esegue la funzione quando ha una richiesta

}

 

void loop()

{

  delay(10);

}

void requestEvent()

{

  if (digitalRead(buttonPin) == HIGH){

  Wire.write("acceso");       // se il pulsante è premuto invia acceso

  } else {

  Wire.write("spento");      // altrimenti invia spento

  }

}

 

Scheda 2 "Master"

Nella seconda scheda verrà collegato un led sulla porta 2 digitale, con una resistenza su vdd di 10k almeno,

#include <Wire.h>

void setup()

{

  Wire.begin();        // join i2c bus (address optional for master)

  Serial.begin(9600);  // start serial for output

}

void loop()

{

  Wire.requestFrom(2, 6);

  String b = "";

  while(Wire.available())    // slave may send less than requested

  {

    char c = Wire.read(); // receive a byte as character

    Serial.print(c);    // print the character

    b += c; 

}

  if (b == "acceso") {

    digitalWrite(10, HIGH); 

  } else {

    digitalWrite(10, LOW);

  }

delay(10);

}

 

Il master invia una richiesta allo slave con indirizzo 2 che risponde inviando lo stato del pulsante sullo slave in quel momento, se il pulsante viene premuto invia "accesso" altrimenti "spento". Il master riceve il valore inviato dallo slave che attraverso una condizione accende il led  oppure lascia spento.

 

Conclusioni


Mi rendo conto che questo esempio sia molto banale, ma per chi come me è all'inizio credo possa essere utile sapere come far cominicare tra loro due microcontrollori, l'esempio usa arduino, ma comunque è possibile usare anche altri microcontrollori, inoltre va detto che I2C non è il più veloce, e nemmeno quello che offre più distanza, infatti si parla di circa 2 metri come distanza massima, ma ha il vantaggio di poter collegare più periferiche con solo 2 fili.

 






  il parere della community
esprimi il tuo voto approvi questa pagina? promo


  non sei autenticato, per questo non puoi visualizzare i commenti sulla pagina. Se sei registrato accedi oppure registrati.


difficoltà
costo
informazioni
Questa pagina è stata creata da ninjanero
il 16/03/2012 ore 21:27
ultima modifica del 16/03/2012 ore 21:27
la pagina è stata visitata 14489 volte




Lo staff di www.grix.it non si assume responsabilità sul contenuto di questa pagina.
Se tu sei l'autore originale degli schemi o progetti proposti in questo articolo, e ritieni che siano stati violati i tuoi diritti, contatta lo staff di www.grix.it per segnalarlo.

   
 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale