Pero vamos a ver un método sencillo, mediante la conexión serie que todas las Arduino llevan y que normalmente usamos para cargar los programas o para ver por el monitor del IDE lo que ocurre en nuestra tarjeta.
El proceso es parecido al bluetooth.
Aquí queremos que una Arduino envíe (MAESTRO) y que otra reciba (ESCLAVO), así que cada una correrá un programa distinto.
Podemos hacer también que ambas tarjetas envíen y reciban datos, para ello, la modificación sobre lo que expongo aquí serían muy sencillas, (básicamente copiar y pegar los trozos de código intercambiados.
Conexiones:
Usaremos los pines estándar de comunicación serie de Arduino:
0 : RX (pin por el que RECIBE los datos serie)
1 : TX (pin por el que ENVÍA los datos serie)
Para comunicación en 2 direcciones (los 2 pueden envíar/ recibir).
Las conexiones TX/RX se intercambian (lo que uno envía -TX- tiene que entrar en el otro -RX-).
Cualquiera de las 2 pueden ser Maestro o Esclavo.
IMPORTANTE: Para la correcta comunicación serie necesitamos unir los GND de las 2 Arduino
Para la comunicación en 1 dirección [ maestro(izquierda)->esclavo(derecha) ] sólo necesitamos 1 conexión:
NOTA: Ocurre que esos pines también los usa para comunicarse por USB cuando está conectado al ordenador, de manera que si queremos tener ambas conexiones (USB/trasmisión serie) deberemos crear una nueva conexión serie (en una conexión software).
En este ejemplo, una de las Arduino la vamos a tener conectada al PC, por tanto, en el MAESTRO vamos a crear la conexión software serie sobre los pines 10(RX), 11(TX).
CÓDIGO:
En el siguiente ejemplo , el maestro, cada 3 segundos envía un carácter al esclavo.
Si envía una "r", el esclavo hará parpadear su led (d13) rápido.
Si envía una "l", el esclavo hará parpadear su led (d13) lento.
MAESTRO:
//MAESTRO
#include
int i=0;
SoftwareSerial Serie2(10,11); //CREAMOS UN NUEVO PUERTO SERIE (RX, TX)
void setup()
{
pinMode(13,OUTPUT);
Serial.begin(9600); //Inicializa puerto estándar
Serie2.begin(9600); //Inicializa nuevo puerto
digitalWrite(13,LOW);
}
void loop()
{
Serie2.write("r");
delay(3000);
Serie2.write("l");
delay(3000);
}
ESCLAVO:
//ESCLAVO
void setup()
{
pinMode(13,OUTPUT);
Serial.begin(9600);
//Apagamos el led 13
digitalWrite(13,LOW);
}
void loop()
{
while (Serial.available())
{
//Guardamos en la variable dato el valor leido
char dato= Serial.read();
//Comprobamos el dato
switch(dato)
{
//Si recibimos una 'r' ...
case 'r':
{
for(int i=0; i<20 font="" i="">20>
digitalWrite(13,HIGH);
delay(80);
digitalWrite(13,LOW);
delay(80);}
break;
}
case 'l':
{
for(int i=0; i<10 font="" i="">10>
digitalWrite(13,HIGH);
delay(200);
digitalWrite(13,LOW);
delay(200);}
break;
}}}}