Alguién me puede ayudar con este programa para Arduino UNO? Antes que nada aclaro que recién comienzo mis primeros pasos con Arduino (Soy técnico en electrónica). Necesitaría que al detectar presionado un pulsador por 10 seg. ó más, ejecute el un programa programa. Agradecería ejemplos con pulsador conectado a "buttonPin = 11" y como ejemplo encender led "Pin 13" (Incorporado en la placa). Me olvidaba, cuando termine de ejecutarse el programa, que vuelva a leer si el botón está presionado ó no.
Saludos
Hay varias forma de hacer lo que pides.
En este sketch ejecuta el codigo y si sigue presionado lo vuelve ejecutar. Hay comentado una linea que te permite esperar nuevamente el tiempo, aun cuando el boton no ha sido liberado.
unsigned long tiempo; //Variable para el control
unsigned long tiempo_max= 10000; //Variable para el control
int ledpin= 13;
int buttonPin = 11;
boolean estado= false;
void setup(){
pinMode(ledpin, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin,HIGH); //Activa PullUp resistor
digitalWrite(ledpin,LOW);
}
void loop(){
while(digitalRead(buttonPin)==LOW){
if(millis()-tiempo >= tiempo_max){
ejecuta();
//tiempo= millis(); //Decomentar si quiere que se repita la accion cada diez segundos
}
}
digitalWrite(buttonPin,HIGH); //Activa PullUp resistor
digitalWrite(ledpin,LOW);
tiempo= millis();
}
void ejecuta(){
digitalWrite(ledpin,HIGH);
delay(1000);
digitalWrite(ledpin,LOW);
}
Tambien esta la forma que luego de transcurrido el tiempo y liberado el boton, ejecute. Esto se hace para ejecutar luego de liberado el boton.
unsigned long tiempo; //Variable para el control
unsigned long tiempo_max= 10000; //Variable para el control
int ledpin= 13;
int buttonPin = 11;
boolean estado= false;
void setup(){
pinMode(ledpin, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin,HIGH); //Activa PullUp resistor
digitalWrite(ledpin,LOW);
}
void loop(){
while(digitalRead(buttonPin)==LOW){
if(millis()-tiempo >= tiempo_max){
estado = true;
}
}
if (estado == true){ejecuta();}
digitalWrite(buttonPin,HIGH); //Activa PullUp resistor
digitalWrite(ledpin,LOW);
tiempo= millis();
}
void ejecuta(){
digitalWrite(ledpin,HIGH);
delay(1000);
digitalWrite(ledpin,LOW);
delay(1000);
estado= false; // aqui se puede colocar la condicion para dejar de ejecutar el codigo
}
max_saeta Mil gracias por tu ayuda!!! Funciona como yo quería!!! Saludos desde Argentina.
Saludos.
Coloca [SOLUCIONADO] al titulo del post