En un proyecto quiero enviar una serie de comandos al arduino a través del puerto serie para que ejecute una serie de acciones.
const int mydireccion = 101;
const int Buzzer = 8;
const int LEDR = 5;
const int LEDG = 6;
const int LEDB = 7;
int Tblue = 30; // tiempo que esta el LED Azul
int Tgreen = 500; // tiempo led verde
long Tred = 500; //Tiempo led rojo
unsigned long tiempoAnterior = 0;
void setup() {
Serial.begin(9600);
pinMode(Buzzer , OUTPUT);
pinMode(LEDR , OUTPUT);
pinMode(LEDG , OUTPUT);
pinMode(LEDB , OUTPUT);
digitalWrite(Buzzer , LOW);
digitalWrite(LEDR , LOW);
digitalWrite(LEDG , LOW);
digitalWrite(LEDB , LOW);
}
void(* resetFunc) (void) = 0; //declare reset function @ address 0
void loop() {
unsigned long tiempoActual = millis();
if(Serial.available()){
char valor = Serial.read();
switch (valor){
case 'R':
resetFunc();
break;
case 'I':
int direccion=Serial.parseInt(); //recibimos la direccion
if(direccion==mydireccion) //Si direccion es la nuestra
{
char comando=Serial.read();
switch (comando){
case 'P':
digitalWrite(LEDB , HIGH);
delay(1);
digitalWrite(LEDB , LOW);
break;
case 'V':
digitalWrite(LEDG , HIGH);
digitalWrite(Buzzer , HIGH);
delay(100);
digitalWrite(LEDG , LOW);
digitalWrite(Buzzer , LOW);
break;
case 'X':
digitalWrite(LEDR , HIGH);
digitalWrite(Buzzer , HIGH);
delay(500);
if(tiempoActual - tiempoAnterior >= Tred){
tiempoAnterior = tiempoActual;
digitalWrite(LEDR , LOW);
digitalWrite(Buzzer , LOW);
}
break;
}
}
break;
}
}
}
El problema es que estoy intentando sustituir los delays por millis pero no soy capaz.
Si introduzco el código I101V
se enciende el led y el buzzer durante el tiempo del delay.
Per si introduzco I101X
no hace nada, y no se si tengo bien metida la función de millis.
¿Alguna ayuda?