Cómo interrumpir el arduino y reiniciarlo?

Tengo un proyecto que consiste en contar el # de clicks que se pueden hacer en 10seg.
Ya tengo la mayor parte del código pero no sé como hacer que el botón pare de recibir los clicks al haber transcurrido los 10seg.

//PROYECT

int boton=6;
#include  <LiquidCrystal.h>;
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
void setup()
{
  
  pinMode(6, INPUT);
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);

} 

void loop()
{
 if(digitalRead(6)==1)
 {
   while(digitalRead(6)==1)  
   {
    delayMicroseconds(0.000000001);
   }
     boton++;
     Serial.println(boton-6);
     lcd.print(String(boton-6));
  }
  lcd.setCursor(0, 0);

}

Vamos por partes...

No entiendo muy bien que es lo que quisiste poner aquí

delayMicroseconds(0.000000001);

¿Un delay de 1 femtosegundo?

delayMicroseconds() solo acepta un parámetro entero que indica la cantidad de microsegundos que dura el delay (revisa la Referencia de Arduino), por lo tanto lo que has escrito es lo mismo que

delayMicroseconds(0);

lo cual no tiene sentido.

Por otro lado, si usas millis() para controlar el tiempo, tranquilamente puedes detener el conteo a los 10 segundos (y si lo deseas podrías reiniciarlo con una nueva pulsación).

Si necesitas más precisión podrías usar la interrupción de un timer e incluso contar las pulsaciones por medio de una interrupción hardware.

Por lo pronto, corrige el error que te indiqué y te sugiero leas el tutorial sobre el uso de millis que encuentras en la sección Documentación.

Saludos

Yo investigue hace tiempo y por software la única manera que encontré es programar el watchdog y con un delay mayor al tiempo de watchdog

Por que no reseteas las variables cada 10 segundos con millis?

Porque no lo sabe, por eso viene al foro a preguntar.
Ve a Documentación y lee sobre millis().
https://forum.arduino.cc/t/entender-millis-y-no-morir-en-el-intento/626976/30

Solo no arruines nunca una máquina de estados usando delay

También se puede generando un salto a la dirección del vector de reset del micro, hace ya un tiempo fue tratado ese tema y en lo personal no lo aconsejo, un programa bien ideado y desarrollado no debería jamás necesitar ser "reseteado" y menos como parte de un funcionamiento "normal".
Supongamos que no fuese posible hacer un reset por soft, no me imagino diciéndole a un usuario "El código funciona perfecto pero acuérdate de resetearlo cada X segundos para que haga su trabajo".

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.