ciao a tutti
in questi giorni stavo provando a utilizzare la connessione i2c fra due arduini:leonardo (master) e uno (slave)
c'è qualcosa che non va mi sapreste aiutare?
grazie mille
//MASTER
#include <Wire.h>
int x=1;
void setup()
{
Wire.begin(); //inizializza la libreria wire come master
Serial.begin(9600);
}
void loop()
{
delay(500);
Serial.println("AVVIA");
/* invio sul bus i2c di un byte al device che ha come indirizzo
il valore 0x04*/
// avvio transmissione
Wire.beginTransmission(0x04);
//invio di un byte
Wire.write(x);
//chiude la transmissione
Wire.endTransmission();
delay(10);
x=x+1;
}
//SLAVE
#include <Wire.h>
int x=0;
void setup()
{
// inizializzo la libreria
// imposto l'indirizzo dello slave
Wire.begin(0x04);
//eventi per la ricezione del dato
//e per la richiesta del dato
Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);
Serial.begin(9600);
}
void loop()
{
Serial.println(x);
}
void receiveEvent(int data)
{
// questo evento è generato quando sul bus
// è presente un dato da leggere
// eseguo la lettura
x=Wire.read();
}
void requestEvent()
{
// questo evento viene generato quando il master
// richiede ad uno specifico slave
// una richiesta di dati
// spedisco il dato al master
Wire.write(x);
}
nn saprei cosa non va i programmi li carica quindi non ci sono errori di lettura ma lo slave dovrebbe stampare su seriale i numeri che il master gli invia ma stampa sempre e solo 0
qua dice di collegare la porta analogica 4 e cinque di un arduino con rispettivamente la porta 4 e 5 dell'altro
io collegavo la 4 con l'sda e la 5 con scl sbagliavo?
ok l'ho guardato e ho continuato a provare ma non riuscivo a concludere niente quindi ho provato a utilizzare la connessione seriale ma (come era logico) non sono riuscito a concludere nulla.
ho provato sia utilizzando la seriale "normare" pin 0 e 1 sia utilizzzando software serial ma con software serial ottengo sempre valori ripetitivi (485 495 505 515 525 535 545 555 565 575 485 ...) mentre utilizzando i pin 0 e 1 sempre -1 mi puoi aiutare?
praticamente io ho costruito un robottino che segue la luce e evita gli ostacoli (ancora da finire la programmazione) e visto che ho 2 arduini volevo farli comunicare per poter mettere anche un lcd e avere qualche pin libero per eventuali necessità future.
con il protocollo i2c non so bene che errori avessi semplicemente come ho messo i vari programmi nel primo post con l'arduino leonardo (che sarebbe il master e controlla i motori e il semsore di prossimità) invii dei dati mentre lo slave (arduino uno) in base a quello che riceve scrive sul lcd ( per esempio che vede l'ostacolo,il task avviato... ancora non so bene cosa fare) il problema è che lo slave non riceve questi dati e vedendo che non ci riuscivo pensavo " la seriale mi pare più facile proviamo quella" ma mi sbagliavo e ho già scritto cosa ottenevo.
poi in giro su internet ci sono + versioni del protocollo i2c che cambiano sia con i pin utilizzati sia con il programma e dopo aver provato tutti i vari tutorial che trovavo(o almeno credo) in italiano (con l'inglese invece faccio abbastanza a pugni).
ho provato anche a seguire la guida che mi hai scritto ma non ci capisco molto (anche per l'inglese)
sinceramente mi piace di più il protocollo i2c ma se prorpio non riesco mi "accontenterò" della seriale o di qualsiasi altro metodo di comunicazione
grazie mile per le risposte, x il tuo tempo e per il tuo aiuto
Ok.. adesso sono in forze... se vuoi proviamo con l' I2C.
Dimmi se vuoi provare... ed eventualmente domani iniziamo i test..
Inanzi tutto, collega come da schema di Nick Gammon i due arduino... e dimmi quando hai fatto.
fatto solo che nell'arduino leonardo anzichè usare le porte analogiche 4-5 ho usato 2-3 (c'è scritto nell'esempio del protocollo i2c e nell'arduino playground che nell'arduino leonardo le porte sono diverse)