Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando
-- Tutorial de iniciación a Arduino --
Volver al índice del tutorial
___________________________
30B.- Conectar dos Arduinos. Bus I2C. Del Maestro a los Esclavos.
- Tenemos un Master con dos Pulsadores, uno en el terminal 2 y otro en el 3.
- Los Arduinos están conectados mediante el bus I2C.
- Al pulsar el pulsador 2 se encenderá el LED13 del Arduino esclavo 2.
- Al pulsar el pulsador 3 se encenderá el LED13 del Arduino esclavo 3.
- 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>
#define pin2 2 // Al terminal 2 lo llamamos pin2. Aquí irá un pulsador.
#define pin3 3 // Al terminal 3 lo llamamos pin3. Aquí irá otro pulsador.
int valor2; // Esto es una variable entera
int valor3; // Esto es una variable entera
// En el setup establecemos los parámetros iniciales.
void setup() {
pinMode(pin2, INPUT); // El pin2 será entrada. Pulsador.
pinMode(pin3, INPUT); // El pin3 será entrada. Pulsador.
Wire.begin(); // Conexión al Bus I2C
Serial.begin(9600); // Velocidad de transmisión.
}
void loop() {
valor2 = digitalRead(pin2); // Lee el valor del pin2 y se lo asigna a valor2. (Puede ser 0 o 1)
if (valor2 == HIGH) {
Wire.beginTransmission(2); // Transmite al esclavo 2
Wire.write("1"); // Envía un 1 (es el caracter 49)
Wire.endTransmission(); // Para la transmisión.
}
if (valor2 == LOW) {
Wire.beginTransmission(2); // Transmite al esclavo 2
Wire.write("0"); // Envía un 0 (es el caracter 48)
Wire.endTransmission(); // Para la transmisión.
}
////////////////////////////////////////////////////////////////////////////////
valor3 = digitalRead(pin3); // Lee el valor del pin3 y se lo asigna a valor3. (Puede ser 0 o 1)
if (valor3 == HIGH) {
Wire.beginTransmission(3); // Transmite al esclavo 3
Wire.write("1"); // Envía un 1 (es el caracter 49)
Wire.endTransmission(); // Para la transmisión.
}
if (valor3 == LOW) {
Wire.beginTransmission(3); // Transmite al esclavo 3
Wire.write("0"); // Envía un 0 (es el caracter 48)
Wire.endTransmission(); // Para la transmisión.
}
}
|
Código para el Esclavo 2 |
// Esclavo 2
#include <Wire.h>
#define pin13 13 // Al terminal 13 lo llamamos pin13. Aquí irá el LED.
// En el setup establecemos los parámetros iniciales.
void setup() {
pinMode(pin13, OUTPUT); // El pin13 será salida. LED.
Wire.begin(2); // Este Esclavo es el número 2
Wire.onReceive(receiveEvent);
Serial.begin(9600); // Velocidad de transmisión.
}
void loop() {
// delay(200);
}
void receiveEvent(int howMany) {
while (1 < Wire.available()) { // Comprueba si ha llegado bytes
char c = Wire.read(); // recibe los byte como caracteres
Serial.print(c);
}
int x = Wire.read(); // recibe los byte como entero
Serial.println(x);
if (x == 48){ // El 48 es el "0"
digitalWrite(pin13, HIGH);
} else {
digitalWrite(pin13, LOW);
}
}
|
Código para el Esclavo 3 |
// Esclavo 3
#include <Wire.h>
#define pin13 13 // Al terminal 13 lo llamamos pin13. Aquí irá el LED.
// En el setup establecemos los parámetros iniciales.
void setup() {
pinMode(pin13, OUTPUT); // El pin13 será salida. LED.
Wire.begin(3); // Este Esclavo es el número 3
Wire.onReceive(receiveEvent);
Serial.begin(9600); // Velocidad de transmisión.
}
void loop() {
// delay(200);
}
void receiveEvent(int howMany) {
while (1 < Wire.available()) { // Comprueba si ha llegado bytes
char c = Wire.read(); // recibe los byte como caracteres
Serial.print(c);
}
int x = Wire.read(); // recibe los byte como entero
Serial.println(x);
if (x == 48){ // El 48 es el "0"
digitalWrite(pin13, HIGH);
} else {
digitalWrite(pin13, LOW);
}
}
|
________________________________
|