Pages: [1] 2 3   Go Down
Author Topic: problemi i2c e comunicazione seriale tra 2 arduino  (Read 2410 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
//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:
//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 smiley
« Last Edit: January 17, 2013, 01:10:59 pm by lupo95 » Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 266
Posts: 21665
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
c'è qualcosa che non va
Cos'é di preciso quel "qualcosa che non va"?
Ciao Uwe
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
God Member
*****
Karma: 2
Posts: 551
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Full Member
***
Karma: 1
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Offline Offline
God Member
*****
Karma: 2
Posts: 551
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok grazie mille smiley
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Offline Offline
God Member
*****
Karma: 2
Posts: 551
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Full Member
***
Karma: 1
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

Offline Offline
God Member
*****
Karma: 2
Posts: 551
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Full Member
***
Karma: 1
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
God Member
*****
Karma: 2
Posts: 551
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Full Member
***
Karma: 1
Posts: 150
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1] 2 3   Go Up
Jump to: