Go Down

Topic: problemi i2c e comunicazione seriale tra 2 arduino (Read 2928 times) previous topic - next topic

lupo95

Jan 13, 2013, 12:39 pm Last Edit: Jan 17, 2013, 07:10 pm by lupo95 Reason: 1
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

Code: [Select]

//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;
}



Code: [Select]

//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);
}


grazie a tutti :)

uwefed

Quote
c'è qualcosa che non va

Cos'é di preciso quel "qualcosa che non va"?
Ciao Uwe

lupo95

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

superzaffo

leggi questo link e prova quello che è scritto.. http://www.gammon.com.au/forum/?id=10896
A me tempo fa ha funzionato...

lupo95

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?

superzaffo

Si perchè non è un RX-TX.. ma un pin serve per i dati e l' altro pin per il clock.
Se leggi quella pagina, ti spiegherà anche come funzioan l' I2C.

ciao

lupo95


lupo95

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?

superzaffo

Aspetta.. inanzi tutto... cosa vorresti fare esattamente ?
Cosa non ti riusciva con i2c ?

lupo95

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 :)

superzaffo

Ok.. abbi solo un po' di pazienza perchè sono ko con la febbre.

lupo95

si si tranquillo non preoccuparti so cosa vuol dire e grazie x l'aiuto nonostante tutto :)
ti auguro di guarire presto :)

superzaffo

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.

lupo95

ok stasera non riesco perchè ho dei problemi con il computer e vorrei risolverli domani appena posso faccio tutto :)

lupo95

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)

Go Up