miércoles, 13 de abril de 2016

Comunicacion serial asincrona en Arduino

COMUNICACIÓN SERIAL ASÍNCRONA ENTRE DOS TARJETAS ARDUINO

Este ejemplo básico realiza la comunicación entre un Arduino que hace de emisor y otro de receptor
En este ejemplo se emplea la función Serial.write() para enviar un numero entero que puede ser cualquier valor entre 0 a 255, es decir el dato de 1 Byte
En el receptor se declara una variable entera para almacenar el valor leído por medio de la función Serial.read() la variable de almacenamiento también puede ser de tipo char pero en este caso se tendrá en cuenta el valor equivalente en código ASCII para realizar la comparación, por ejemplo las equivalencias en las estructuras condicionales serian:
  • if(Dato==48) equivale a if(Dato=='0') si Dato es de tipo char en lugar de int
En este ejemplo se debe de tener en cuenta que la lectura de datos se realiza dos veces mas rápido de lo que se hace el envío gracias a funciones de retardo realizadas tanto en el receptor como en el emisor.

Ejemplo Realizado En 123D Circuits 

En este ejemplo se conectan dos tarjetas un que envía la que tiene la conexión en TX y otra que recibe la que tiene la conexión en RX.

Conexión Serial Básica

Código de Arduino que transmite:

int Dato;
void setup(){
  Serial.begin(9600);
  pinMode(13,OUTPUT);//Led que trae incorporado la tarjeta Arduino
}

void loop(){
  if (Serial.available() > 0) {//Verifica que hay datos en el buffer de recepcion
    Dato = Serial.read();//Lee dato
    Serial.print("Dato Recibido = ");//Muestra que dato fue leido en el Serial Monitor
    Serial.println(Dato);
    if(Dato==48){
      digitalWrite(13,LOW);//Apaga Led
    }
    if(Dato==49){
      digitalWrite(13,HIGH);//Enciende Led
    }
    delay(100);//Retardo entre lecturas de datos
  }
}

Código de Arduino que recibe:

int Dato;
void setup(){
  Serial.begin(9600);
  pinMode(13,OUTPUT);//Led que trae incorporado la tarjeta Arduino
}

void loop(){
  if (Serial.available() > 0) {//Verifica que hay datos en el buffer de recepcion
    Dato = Serial.read();//Lee dato
    Serial.print("Dato Recibido = ");//Muestra que dato fue leido en el Serial Monitor
    Serial.println(Dato);
    if(Dato==48){
      digitalWrite(13,LOW);//Apaga Led
    }
    if(Dato==49){
      digitalWrite(13,HIGH);//Enciende Led
    }
    delay(100);//Retardo entre lecturas de datos
  }

No hay comentarios:

Publicar un comentario