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.
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
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);
}
uwefed
March 18, 2017, 11:12am
3
L' indirizzo del slave lo dai Tu nella Wire.begin(0x04);
Ciao Uwe