Pages: [1]   Go Down
Author Topic: PROBLEMAS PARA MANDAR DATOS POR IC2  (Read 1045 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

HOLA GENTE DEL FORO!!! ESCRIBO POR SEGUNDA VEZ, YA QUE SOY UN POCO NUEVO EN ESTO DE ARDUINO.

TENGO UN PROBLEMA CON LA COMUNICACION ENTRE DOS PLACAS ARDUINO A TRAVES DE I2C.
MI PROBLEMA ES EL SIGUIENTE:

NECESITO TENER UN MAESTRO (ARDUINO MEGA), QUE RECIBA O LEA  LOS DATOS DE VARIOS ESCLAVOS QUE SON  (DUEMILANOVEs). LA CANTIDAD DE DATOS QUE MANDA MI ESCLAVO ES DE 20 DATOS O BYTES Y MI PROBLEMA ES QUE SOLO ME LLEGA UNO DE LOS DATOS, Y EL RESTO SON TODOS EL NUMERO 255.
ES DECIR QUE SI MANDO LOS DATOS 17, 78, 45.....ME LLEGAN 17, 255, 255

LA VERDAD ES QUE HE PROBADO DE MUCHAS FORMAS Y NO SE COMO SOLUCIONARLO.
POR LAS DUDAS DEJO LOS DOS PROGRAMAS ESCLAVO Y MAESTRO, POR SI ALGUIEN ME PUEDE AYUDAR ENCONTRANDO ALGUN ERROR.

ESPERO QUE ALGUIEN ME PUEDA AYUDAR Y MUCHAS GRACIAS.

PROGRAMA ESCLAVO:
#include <Wire.h>

byte a = 17;
byte b = 45;
byte c = 56;
byte d = 77;

void setup()
{
  Wire.begin(2);               
  Wire.onRequest(requestEvent);
}

void loop()
{
   delay(100);
}

void requestEvent()
{
  Wire.send(a);
  Wire.send(b);
  Wire.send(c);
  Wire.send(d);
 }

PROGRAMA MAESTRO:


#include <Wire.h>

void setup()
{
  Wire.begin();       
  Serial.begin(9600); 
}

void loop()
{
  Wire.requestFrom(2,4);   
   
    int a = Wire.receive();
    int b = Wire.receive();
    int c = Wire.receive();
    int d = Wire.receive();
   
    Serial.print(a,DEC);
    Serial.print(b,DEC);   
    Serial.print(c,DEC);
    Serial.print(d,DEC);

  delay(500);
}
Logged

Ciudad Real
Offline Offline
God Member
*****
Karma: 1
Posts: 747
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si no me equivoco la funcion wire.send termina con una condicion de STOP por lo que el master solo lee el primer dato

tu programa hace esto
start -- dir slv -- slv response -- stop start -- dir slv -- slv response -- stop start -- dir slv -- slv response -- stop start -- dir slv -- slv response -- stop

si el master no crea el start no podrá leer los demás datos

lo que quieres es start -- dir slv -- slv response -- slv response --slv response --slv response -- stop

tienes la solucion en http://arduino.cc/en/Tutorial/MasterReader
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Amigo martin83mza.
Creo que deberías revisar el concepto de maestro/sclavo y send/receiver ya que ambos tienen que poder hablar/escuchar, esa es la gracias del I2C-bus.

 Disculpa, no quisiera ofender a nadie.

 Saludos.
Logged

Pages: [1]   Go Up
Jump to: