viernes, 21 de diciembre de 2018

Comunicación Arduino con Processing


Utilizaremos el puerto serie para comunicar Processing con Arduino.  Para ver cómo funciona conectaremos 3 ledes a Arduino y mediante un programa en Processing haremos que se enciendan los ledes de forma secuencial uno tras otro con un segundo de diferencia y luego se apaguen todos a la vez.

Programa de Arduino: En este programas leemos el buffer del puerto según se vaya llenando y dependiendo de si es una 'a', un '1', un '2' o un '3' encendemos el led correspondiente.



int valor='a'; //variable para cargar el buffer del Serial
void setup() {
 pinMode(2,OUTPUT); //declaramos salidas a los tres pines
 pinMode(3,OUTPUT); //donde están conectados los ledes
 pinMode(4,OUTPUT);
 Serial.begin(9600);
}

void loop() {

if (Serial.available()>0){ //Si el puerto tienen algo en el buffer
  
  valor=Serial.read(); //leemos el puerto serie y lo cargamos en valor.

  if (valor=='1'){
            digitalWrite(2,HIGH); //dependiendo de lo que se lea se
           }                                    //enciende un led u otro
  if (valor=='2'){
            digitalWrite(3,HIGH);
           }
  if (valor=='3'){
            digitalWrite(4,HIGH);
           }
  if (valor=='a'){                 // cuando lee 'a' se apagan todos.
           digitalWrite(2,LOW);
           digitalWrite(3,LOW);
           digitalWrite(4,LOW);
         }
}
}

Programa de Processing: Con este programa enviaremos la información al puerto serie para que sea leida por Arduino. Aqui controlaremos los tiempos.

import processing.serial.*; //importamos la librería para trabajar con el puerto serie

int m=0;       //en esta variable almacenaremos el tiempo transcurrido desde el inicio
int n=0;        //en esta variable almacenaremos la secuencia de tiempo en la que cambian los ledes
Serial puerto;   //declaramos una variable de la clase Serial

void setup() {
  puerto = new Serial(this, "COM3", 9600);  //configuramos el puerto de conexión.
}

void draw() {
  
  m=millis();
  n=(m % 4000);   //Vamos dividiendo el tiempo en fracciones de 1 segundo. Como son 4 segundos
                             // nos quedamos con el resto de dividir el tiempo por 4000 ms.
  if (n<1000) {
       puerto.write('a');       //Lanzamos una 'a' para apagar todos los Ledes
       } else if (n<2000) {
                   puerto.write('1');//Lanzamos una 1 para encender el Led amarillo
                   } else if (n<3000) {
                                puerto.write('2');//Lanzamos una 1 para encender el Led verde
                                }else if (n<4000) {
                                              puerto.write('2');//Lanzamos una 1 para encender el Led rojo
                                              }
}

No hay comentarios:

Publicar un comentario