Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando
-- Tutorial de iniciación a Arduino --
Volver al índice del tutorial
___________________________
30C.- Conectar dos Arduinos. Bus I2C. De los Esclavos al Maestro.
- Tenemos dos Esclavos, cada uno con un pulsador.
- Los Arduinos están conectados mediante el bus I2C.
- Al pulsar el pulsador 2 se enviará un mensaje al Maestro.
- Al pulsar el pulsador 3 se enviará un mensaje al Maestro.
- Cuando hayas cargado los programas en cada Arduino, conecta el Master al USB del ordenador y observa el Monitor Serie.
- En la foto de arriba se aprecia las conexiones. Los esclavos no tienen USB porque ya tienen cargado el programa y están alimentados con los cables rojo y negro que provienen del Maestro.
- El Maestro está conectado al USB para poder visualizar la información en el Serial Monitor, si no quisiéramos ver esa información, simplemente alimentaríamos al Maestro con una pila de 9V y lo independizamos del ordenador.
Código para el Maestro |
// Código para el Maestro
// Juan A. Villalpando
// KIO4.COM
#include <Wire.h>
void setup()
{
Wire.begin(); // Conexión al Bus I2C
Serial.begin(9600); // Velocidad de conexión
}
void loop()
{
//////// Petición al Esclavo 2
Wire.requestFrom(2, 1); // Le pide 1 byte al Esclavo 2
while(Wire.available()) // slave may send less than requested
{
char c = Wire.read(); // Recibe byte a byte
Serial.print(c); // Presenta los caracteres en el Serial Monitor
}
Serial.println(); // Cámbia de línea en el Serial Monitor.
delay(200);
//////// Petición al Esclavo 3
Wire.requestFrom(3, 1); // Le pide 1 byte al Esclavo 3
while(Wire.available()) // slave may send less than requested
{
char c = Wire.read(); // Recibe byte a byte
Serial.print(c); // Presenta los caracteres en el Serial Monitor
}
Serial.println(); // Cámbia de línea en el Serial Monitor.
delay(200);
}
|
Código para el Esclavo 2 |
// Esclavo 2
#include <Wire.h>
#define pin2 2 // Al terminal 3 lo llamamos pin2. Aquí irá un pulsador.
int valor2; // Esto es una variable entera
void setup()
{
pinMode(pin2, INPUT); // El pin2 será entrada. Pulsador.
Wire.begin(2); // Este Esclavo es el número 2
Wire.onRequest(requestEvent); // Cuando el Maestro le hace una petición,
// realiza el requestEvent
}
void loop()
{
delay(100);
}
// Esto es lo que envía cuando le hace la petición.
void requestEvent()
{
valor2 = digitalRead(pin2); // Lee el valor del pin2 y se lo asigna a valor2. (Puede ser 0 o 1)
if (valor2 == HIGH) {
Wire.write("1"); // Envía un 1 (es el caracter 49)
}
if (valor2 == LOW) {
Wire.write("0"); // Envía un 0 (es el caracter 48)
}
}
|
Código para el Esclavo 3 |
// Esclavo 3
#include <Wire.h>
#define pin3 3 // Al terminal 3 lo llamamos pin3. Aquí irá un pulsador.
int valor3; // Esto es una variable entera
void setup()
{
pinMode(pin3, INPUT); // El pin3 será entrada. Pulsador.
Wire.begin(3); // Este Esclavo es el número 3
Wire.onRequest(requestEvent); // Cuando el Maestro le hace una petición,
// realiza el requestEvent
}
void loop()
{
delay(100);
}
// Esto es lo que envía cuando le hace la petición.
void requestEvent()
{
valor3 = digitalRead(pin3); // Lee el valor del pin3 y se lo asigna a valor3. (Puede ser 0 o 1)
if (valor3 == HIGH) {
Wire.write("1"); // Envía un 1 (es el caracter 49)
}
if (valor3 == LOW) {
Wire.write("0"); // Envía un 0 (es el caracter 48)
}
}
|
___________________
- Propuesta.
- Conecta dos LED en el Master, de manera que desde cada Esclavo podamos encender/apagar su correspondiente LED
________________________________
|