/*
*/
hw_timer_t *timer = NULL;
volatile uint8_t ledstat = 0; // Declaramos nuestra variable como variable volatil es decir puede cambiar de manera inesperada
String data[2]; //matiz de datos para entrar valores separados por .
String message, valor;
void IRAM_ATTR onTimer() //Creamos una función llamada "onTimer" que marque el inicio del temporizador
{
ledstat = 1-ledstat; //Hacemos el cambio entre 0 y 1 de acuerdo a los valores proporcionados en por lo demás procesos
digitalWrite(5,ledstat); //Nuestra rutina asigna el estado de nuestro pin de acuerdo a la temporización
}
void ordenes()
{
// Lee mensaje recibidos
if (Serial.available()){ //f.14,6,24,15,30
String value = Serial.readStringUntil('\n');
for (int i = 0; i < 2 ; i++) {
int index = value.indexOf(".");
data[i] = value.substring(0, index);//.toInt();
value = value.substring(index + 1);
}
Serial.println(value); // Presenta valor.
message =data[0]; //obtiene mensaje separando orden y valor
if(data[0]==data[1]) {data[1]="1";}//para evitar error al no meter 2 parametros
valor=data[1];
Serial.println( String("message: ") + message );
Serial.println( String("valor: ") + valor );
if (message =="on"){ // activa bomba
//Métodos necesarios para la ESP32
timerAlarm(timer, 1000000, false,0); // Interrupt every 1 second
}
//...................................................
else if (message =="off"){ // deactiva bomba
//timerAlarmDissable();
}
//...................................................
}
}
void setup()
{
Serial.begin(115200);
pinMode(5,OUTPUT); //Asignamos nuestro pin D5 como pin de salida
digitalWrite(5,LOW); //Asignamos el estado inicial de nuestro pin como Bajo (Apagado)
timer = timer = timerBegin(1000000); //timerBegin(0, 80, true); // Timer 0, clock divider 80
timerAttachInterrupt(timer, &onTimer); // Attach the interrupt handling function
//timer = timerBegin(0,80,true); //Hacemos la inicialización de nuestro temporizador con un valor inicial de 0, usando una preescala de 80 llevando a un periodo de 1 segundo y marcado como verdadero para que se active en modo ascendente
//timerAttachInterrupt(timer,&onTimer,true); //Asignamos nuestra rutina que creamos en nuestro punto anterior, adjuntamos nuestro método onTimer y ponemos True para que se active
//timerAlarmWrite(timer,1000000*valor.toInt(),true); //Configuramos nuestra alarma en un un segundo para que con nuestra rutina
// timerAlarmEnable(timer); //finalmente activamos nuestra alarma
}
void loop()
{
ordenes();
delay(2000);
}