Para comunicar serialmente dos arduinos se debe usar los pines Rx y Tx, importante recordar que si una arduino envía tiene conectado el pin Tx,, por lo que la arduino que recibe deberá tener conectado el pin Rx.
- 0 : RX (pin por el que RECIBE los datos serie)
- 1 : TX (pin por el que ENVÍA los datos serie)
Se explica con la siguiente imagen. Adicionalmente las tierras deben estar conectadas. La arduino que trae conectado el potenciómetro será la arduino encargada para este primer ejemplo de realizar el envío de un dato para condiciones del potenciómetro, estos datos serán recibidos por la arduino que trae conectado el led para crear un led intermitente en un intervalo específico según reciba información de la primera arduino.
El código para enviar un dato de manera repetitiva para probar la transmisión es el siguiente:
void setup()
{
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop()
{
// read the input on analog pin 0:
sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(10); // Delay a little bit to improve simulation performance
Serial.write("a");
delay(1000);
Serial.write("b");
delay(2000);
Serial.write("c");
delay(4000);
}
El código para recibir un dato y activar el led es el siguiente:
void setup(){
pinMode(13,OUTPUT); Serial.begin(9600); } void loop(){ char dato= Serial.read();//Guardamos en la variable dato el valor leido Serial.print(dato); switch(dato){ //Comprobamos el dato case 'a': //Si recibimos una 'a' ... for(int i=0; i<20; i++){ digitalWrite(13,HIGH); delay(80); digitalWrite(13,LOW); delay(80); } break; case 'b': //si recibimos una 'b' ... for(int i=0; i<10; i++){ digitalWrite(13,HIGH); delay(1000); digitalWrite(13,LOW); delay(1000); } break; default: digitalWrite(13,LOW); break; } }
Ahora modificaremos el código para enviar un dato en función del potenciómetro:
- Si el dato es menor que 200 envíe la letra a
- Si el dato esta entre 200 y 600 envía la letra b
- y si el dato es mayor a 600 envía la letra c
int sensorValue = 0; void setup() { pinMode(A0, INPUT); Serial.begin(9600); } void loop() { // read the input on analog pin 0: sensorValue = analogRead(A0); // print out the value you read: Serial.println(sensorValue); delay(10); // Un pequeño tiempo if (sensorValue<200){ Serial.write('a'); delay(2000);} else if (sensorValue>200 && sensorValue<600){ Serial.write('b'); delay(2000);} else{ Serial.write('c'); delay(2000);} }Ahora modifica el código para enviar el dato del potenciómetro
Arduino 1int sensorValue = 0; void setup() { pinMode(A0, INPUT); Serial.begin(9600); } void loop() { // read the input on analog pin 0: sensorValue = analogRead(A0); // print out the value you read: Serial.println(sensorValue); delay(10); // Un pequeño tiempo }Arduino 2int sensorValue = 0; void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) { //char dato= Serial.read();//caracter int dato=Serial.parseInt();// enteroSerial.println(dato);delay(10); // Un pequeño tiempo }