Arduino tramite I2C

:slight_smile:
salve amici di arduino mi sto scervellando come posso comunicare tramite I2C
con due schede arduino una come Master e la seconda come Slave.
La seconda dovrebbe mandare una info Bit alla scheda Master quando
premo il pulsante, il tutto lo letto in un tutorial sul web e lo sto cercando di mettere in atto.

:frowning: Grazie


#include <Wire.h>
#include <SoftwareSerial.h>


//MASTER
#include <Wire.h>

byte a=0;
byte z;
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("Partenza");
}

void loop()
{
Wire.beginTransmission(0x04);

Wire.write(z);
Wire.write(a);
Wire.endTransmission();
delayMicroseconds(500);
Wire.requestFrom(0x04, 2);
while(Wire.available())
{
z=Wire.read();
}

if(z== 2)
{
Serial.println("vero");

}
else
{
Serial.println("falso");

}

}

//SLAVE
#include <Wire.h>
#include <SoftwareSerial.h>
#define Button 7
byte a;
byte z;
void setup()
{
Wire.begin(0x04);
Serial.begin(9600);
Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);
 pinMode (Button,INPUT);

}
void loop()
{
//  fai qualcosa
delay(1000);
}

void receiveEvent(int data)
{
z = Wire.read();
a = Wire.read();

if  (a==0)
{
    if (digitalRead (Button)==HIGH)
{
byte z=2;
 Serial.println("HIGH");
Wire.write(z);
}

else if (digitalRead (Button)==LOW)
{
byte z=1;
  Serial.println("LOW");

}
}

}
void requestEvent()
{

Wire.write(z);
}

--- ti ricordo che NON è permesso fare "up" e sollecitare risposte prima di 48 ore dall'ultimo post. Grazie. - gpb01

:slight_smile:
Ok la comunicazione funziona che nel mio caso e-- arduino uno e arduino Mega---
quale e l indirizzo univoco del arduino Mega, e in questo modo ad esempio con due o piu mega
collegate fra di loro posso avere a disposizione piu porte da controllare ?

grazie

//MASTER
#include <Wire.h>
int morsetto1 ;
int morsetto2 ;
int risultato_morsetto1;
int risultato_morsetto2 ;
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("START OK");

}

void loop()
{
Wire.beginTransmission(0x04);
Wire.write((morsetto1,morsetto2));
Wire.endTransmission();
delayMicroseconds(500);
Wire.requestFrom(0x04, 2);
while(Wire.available())
{
risultato_morsetto1 = Wire.read();
risultato_morsetto2 = Wire.read();
}
if(risultato_morsetto1 == 1)
Serial.println("morsetto 1 ok");
if(risultato_morsetto1 == 2)
Serial.println("morsetto 1 errore");
if(risultato_morsetto2 == 1)
Serial.println("morsetto 2 ok");
if(risultato_morsetto2 == 2)
Serial.println("morsetto 2 errore");
delay(5);

}
//SLAVE
#include <Wire.h>
#include <SoftwareSerial.h>
#define Button 7
int morsetto1 ;
int morsetto2;
void setup()
{
Wire.begin(0x04);
Serial.begin(9600);
Wire.onReceive(riceviEvento);
Wire.onRequest(richiediEvento);
pinMode (Button,INPUT);
}
void loop()
{
delay(1000);
}
void riceviEvento(int data)
{
morsetto1 = Wire.read();
morsetto2 = Wire.read();
// per comandare morsetto 2 in realta metto un secondo pulsante

if (digitalRead (Button)==HIGH)
{
 morsetto1=1;
 morsetto2=1;
 Serial.println("HIGH");

}

else if (digitalRead (Button)==LOW)
{
 morsetto1=2;
 morsetto2=2;
  Serial.println("LOW");

}

}

void richiediEvento()
{
//spedisco il dato al Master
Wire.write(morsetto1);
Wire.write(morsetto2);
}

L' indirizzo del slave lo dai Tu nella Wire.begin(0x04);
Ciao Uwe