Go Down

Topic: tengo un problema con las interrupciones (Read 216 times) previous topic - next topic

007rommc

Jul 13, 2019, 08:52 pm Last Edit: Jul 15, 2019, 12:46 am by surbyte Reason: Agregado de etiquetas de codigo
hola soy nuevo en la comunidad, tengo un problema con las interrupciones.

lo que quiero que haga mi programa es lo siguiente:
presionar botón y cuando lo suelte que tenga un delay de 5 y si lo vuelvo a presionar que se reinicie el delay, siempre que lo precione se debe de reiniciar y si pasan mas de los 5 segundos sin presionar que se apague el led.

ayuda por favor  :'(  :'(

Code: [Select]
]nt Btn0 = 2;
int pinLed = 13;
boolean estado =0;

void setup() {
 pinMode(Btn0, INPUT_PULLUP);
 pinMode(pinLed, OUTPUT);
 attachInterrupt(digitalPinToInterrupt(Btn0),cambioEstado, FALLING);
 Serial.begin(9600);
}

void loop() {
 cambioEstado();
 delay(5000);
 digitalWrite(pinLed,LOW);
}

/* La funcion de interrupcion cambia el estado actual del led */
void cambioEstado() {
 estado=true;
 digitalWrite(pinLed,estado);

}[/code

Sereno

Hola, tienes de momento dos problemas.
El primero es que no te has leído las normas, sobre todo en la parte donde te explica como poner el código.
Revisa las normas y luego pasamos al segundo problema.

PeterKantTropus

Tu problema es la función delay(), practicamente no sirve para nada, podrías hacerlo funcionar con una interrupción a tu programa, pero seria una victoria pirrica, no podrías avanzar hacia programas mas completos. Empieza con el ejemplo del IDE blink sin delay.
Saludos
"Si no entra como tornillo, entra como clavo"

007rommc

La respuesta de mi pregunta es la siguiente:.
 :)

   
Code: [Select]
 
    const int buttonPin = 2;
    const int ledPin =  13;
    int buttonState = LOW; 
    int ledState = LOW;

    void setup(){
        pinMode(ledPin, OUTPUT);
        pinMode(buttonPin, INPUT);
    }

    void loop() {
        buttonState = digitalRead(buttonPin);
        ledState = digitalRead(ledPin);

        if(buttonState == HIGH && ledState == LOW){
            digitalWrite(ledPin, HIGH);
        } else {
            if(ledState == HIGH && buttonState == LOW){
                delay(5000);
                digitalWrite(ledPin, LOW);
            }
        }

    }

PeterKantTropus

Perfecto, pero no tomes a mal mi consejo, intenta modificarlo para que funcione sin delays(), te puedo asegurar que sera tiempo bien invertido.
Saludos
"Si no entra como tornillo, entra como clavo"

Go Up