Beruflich Dokumente
Kultur Dokumente
https://electro2ar.wordpress.com/2014/06/19/comunicacion-i2c-entre-arduinos/
Este trabajo est hecho en base a lo presentado en la pgina cuyo link se muestra aqu.
Que es IC?
El bus IC, un estndar que facilita la comunicacin entre microcontroladores, memorias y
otros dispositivos con cierto nivel de inteligencia, slo requiere de dos lneas de seal y un
comn o masa. Fue diseado a este efecto por Philips y permite el intercambio de
informacin entre muchos dispositivos a una velocidad aceptable, de unos 100 Kbits por
segundo. La metodologa de comunicacin de datos del bus IC es en serie y sincrnica.
Una de las seales del bus marca el tiempo (pulsos de reloj) y la otra se utiliza para
intercambiar datos.
Puede haber un maestro y hasta 127 esclavos conectados a la misma linea de datos.
Vamos a hacer una introduccin rpida de uso de este protocolo para la comunicacin entre
estas dos placas Arduino. Vamos a realizar dos ejemplos, uno en que el Maestro enva una
peticin a un Esclavo y muestra la respuesta por el puerto serie del IDE Arduino, una cadena
de caracteres, y el segundo ejemplo el Maestro va a enviar un dato a un Esclavo, y sea lo
que sea este le devolver la lectura de un pin analgico para que el Maestro lo imprima por
el puerto serie del IDE Arduino.
Conexiones
Para poder empezar a comunicar a los Arduino, primero hay que cablearlos, para que los
bits fluyan! Uno ser Maestro y el otro Esclavo.
Se conectan con cables los pines A4 y A5 (seran las entradas Analgicas de la placa) del
Maestro con los mismos pines del Esclavo, o sea A4 con A4 y A5 con A5. Y obviamente un
tercer cable de GND o masa.
void setup()
{
Wire.begin();
obligatoria
Serial.begin(9600);
datos
}
void loop()
{
Wire.requestFrom(1, 20); // Manda una peticin al esclavo numero 2 de 12 bytes
while(Wire.available()) // Mientras tengamos datos en el buffer seguimos leyendo
{
char Datos = Wire.read(); // Leemos un byte y lo pasamos a una variable de tipo char
Serial.print(Datos); // Lo mostramos en el puerto serie (esto es un bucle donde van
llegando uno por uno cada carcter y se van imprimiendo por el serial)
}
delay(1500);
// Esperamos 1,5 segundos para que sea posible ver las respuestas
void setup()
{
Wire.begin(1); // Nos aadimos al bus como esclavo, con la direccin 1
Wire.onRequest(requestEvent); // Registro de eventos
}
void loop()
{
delay(100);
}
// Funcion que se ejecuta cuando recibe una peticin desde el maestro
void requestEvent()
{
Wire.write("A123456B7890C12D3456"); // Responde a la peticin del maestro de enviarle
20 bytes
}
void setup()
{
Wire.begin();
Serial.begin(9600);
}
void loop()
{
unsigned int lectura;
Wire.beginTransmission(1); // Enviamos a la direccin del esclavo 1
Wire.write(0);
Wire.endTransmission();
// Terminamos la transmision
{
lectura = Wire.read();
}
Serial.println(lectura);
delay(500);
}
El programa que hay que cargar en el Esclavo es el siguiente:
void loop()
{
lectura = analogRead(A0)/4; // La variable global es igual a la lectura analogica del pin A0
dividido en 4 para que entre en un byte (0 a 255)
delay(100);
// Damos un respiro
{
Wire.write(lectura);
Serial.println(lectura);
}
//*********************************************************
void recibidoEvento(int howMany) // Evento de recepcion
{
while( Wire.available())
enviar el maestro
{
pedido = Wire.read();
Serial.println(pedido);
}
}
Los cuatro programas estn en el archivo ZIP que han bajado.