Hola a todos.
Soy nuevo en Arduino y estoy dando mis primeros pasos, en mi época laboral trabajé con STEP7 de Siemens y estoy intentando trasladar mis pocos conocimientos de programación de PLC al entorno Arduino solo en plan didáctico.
Mi problema:
En STEP7 hay un tipo de temporización que se denomina "temporizador como impulso prolongado" , dicho temporizador arranca con una condición y dicha condición se tiene que mantener mientras transcurre el tiempo, si la condición cae el tiempo y lo que queramos activar también.
El código es este:
bool puls2=false;
bool puls3=false;
unsigned long tinicio;//Aqui se vuelca el valor de los millis
unsigned long tcorre;//Valor del tiempo desde tinicio
unsigned long tpulsado;
int valortiempo=5000;//Tiempo deseado
const int marcha=2;//Pulsador de marcha
const int paro=3;//Pulsador de paro o reset
const int lmarchatiempo=8;//led de tiempo corre
const int lfinaltiempo=9;//Led de tiempo finalizado
bool tactivo=false;//Temporizador en marcha
void setup() {
pinMode(marcha, INPUT) ;//Declaramos el pulsador marcha como entrada
pinMode(paro, INPUT) ;// Declaramos el pulsador paro como entrada
pinMode(lmarchatiempo,OUTPUT);//Led de marcha como salida
pinMode(lfinaltiempo,OUTPUT);//Led de final como salida
Serial.begin(9600);//Activamos la comunicacion Serie
bool tactivo=0;
//int pulsado=0;
unsigned long tinicio=0;
unsigned long tcorre=0;
unsigned long tpulsado=0;
}
void loop() {
if (digitalRead(marcha)==HIGH)
{
puls2=true;
tinicio=millis();
}
if (puls2==true)
{
tactivo=true;
// tcorre=millis()-tinicio;
puls2=false;
}
if (tactivo == true && puls2==false)
{
tcorre=millis()-tinicio;
}
if (digitalRead(paro)==HIGH || millis()-tinicio>=valortiempo)
{
puls2=false;
tcorre=0;
}
Serial.println(tcorre);
}
El caso es que si uso un pulsador el código funciona correctamente pero siempre al soltar el pulsador, si lo mantengo pulsado el tiempo no arranca hasta que no lo suelto.
He probado a poner condiciones que simulen soltar el pulsador pero no funciona, siempre arranca el tiempo al soltar físicamente el pulsador por lo que si en vez de un pulsador conectara un interruptor el tiempo no corre.
No sé si hay alguna solución a esto.
Muchas gracias de antemano.