Go Down

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

superzaffo

Non hai un altro UNO al posto del leonardo ? Cosi andiamo a piccoli step...


superzaffo

ok.. quindi hai collegato i pin SDA-->SDA e SCL-->SCL
Hai collegato i due pin GND (GND dell'UNO e GND del Leonardo) tra di loro ?

lupo95

praticamente nella breadboard ho collegato i pin e trammite una resistenza da 4,7k ai 5V e poi ho collegato i GND dei due arduino


superzaffo

Aspetta... intanto le resistenze le puoi togliere.. per adesso non sono indispensabili ...
Salta la breadboard e collega direttamente con i cavi i pin dei due arduino.

Poi sullo slave (penso il leonardo) fai girare questo sketch.
Code: [Select]

// Written by Nick Gammon
// February 2012

#include <Wire.h>

const byte MY_ADDRESS = 42;

#define BETA_ARDUINO ARDUINO < 100

void setup ()
{
  Wire.begin (MY_ADDRESS);
  for (byte i = 2; i <= 7; i++)
    pinMode (i, OUTPUT);
  Wire.onReceive (receiveEvent);
}  // end of setup

void loop()
{
// nothing in main loop
}

// called by interrupt service routine when incoming data arrives
void receiveEvent (int howMany)
{
  while (Wire.available () > 0)
  {
    byte c;
#if BETA_ARDUINO   
    c = Wire.receive ();
#else
    c = Wire.read ();
#endif
    // toggle requested LED
    if (digitalRead (c) == LOW)
      digitalWrite (c, HIGH);
    else
      digitalWrite (c, LOW);
  }
}  // end of receiveEvent

lupo95

caricato visto che uso l'arduino uno come slave l'ho caricato su quello

superzaffo

ok
Ora carica questo sketch sul master.
Code: [Select]

// Written by Nick Gammon
// February 2012

#include <Wire.h>

const byte SLAVE_ADDRESS = 42;
const byte LED = 13;

#define BETA_ARDUINO ARDUINO < 100

void setup ()
{
  Wire.begin ();
  pinMode (LED, OUTPUT);     
}  // end of setup

void loop ()
{

  for (int x = 2; x <= 7; x++)
    { 
    Wire.beginTransmission (SLAVE_ADDRESS);
#if BETA_ARDUINO   
    Wire.send (x);
#else
    Wire.write (x);
#endif
    if (Wire.endTransmission () == 0)
      digitalWrite (LED, HIGH);
    else
      digitalWrite (LED, LOW);
     
    delay (200);
    }
}  // end of loop



Quindo lo farai partire si dovrebbe vedere il led dello slave accendere.

Riesci a fare una foto dei collegamenti e postarla?

lupo95

ok ho caricato
il led 13 si accende subito indipendentemente che i cavi siano collegati o no e se attacco un led esterno quest'ultimo non si accende e si spegne alche quello interno all'arduino uno.
per la foto non so se riesco a metterla comunque posso provare ma i due arduini sono montati su un robot ed è tuto abbastanza incasinato tra fili e roba varia quindi non so se ti può servire a qualcosa
vuoi lo stesso che provo a fare delle foto?

superzaffo

non è che puoi fare la prova con i due arduini sulla scrivania solo collegati tra loro ?

lupo95

magari :( ma li ho avvitati al telaio e comunque non potrei togliere tutti gli altri cavetti dalle schede perche poi diventerei pazzo per riuscire a ricollegare tutto (sempre se ci riuscissi)
comunque non posso aver sbagliato a collegare i fili 2(leonardo)-->4 (uno) 3(leonardo)-->5(uno), 5V collegate su breadboard e anche GND (arriva la corrente su entrambe le schede)

superzaffo

Ok... hai messo dei led nei pin D2-D7 (o almeno un led in un pin di questi) dello slave ?

This was displayed on LEDs plugged into pins D2 through to D7 using an appropriate resistor in series with each one (eg. 470 ohms).

Il codice slave, se riceve i dati, accende o spegne i led collegati ai pin D2-D7

lupo95


lupo95

però ho notato che se inverto i programmi mi parte un motore che dovrebbe essere collegato al pin 2 (intendo leonardo slave e uno master)

superzaffo

prova a mettere i led nel leonardo... almeno dove i pin non sono già impegnati... come il D2 (se ho capito bene)

Go Up