Problema con pulsadores

Tengo un problema con este programa, que pulso un pulsador para activar un led y una alarma, pero cuando termina de ejecutarse el código de el pulsado del pulsador de activar, me ejecuta el código del pulsado de desactivar, sin haberlo pulsado, y luego vuelve a ejecutar el código del activador, y así. No sé porqué sin pulsar el pulsador se ejecuta ese código. ¿Es problema del programa o puede que estén fallando los pulsadores? He probado a invertirlos y tampoco lo consigo.

#include <ABLocks_TimerFreeTone.h>

boolean b_LED_VERDE;
boolean b_ALARMA_ACTIVADA;
unsigned long task_time_ms=0;

void setup()
{
  	pinMode(12, OUTPUT);
	pinMode(13, OUTPUT);
	pinMode(5, OUTPUT);
	pinMode(25, INPUT);
	pinMode(26, INPUT);
	pinMode(14, INPUT);

	Serial.begin(115200);
	Serial.flush();
	while(Serial.available()>0)Serial.read();

	digitalWrite(12, LOW);
	digitalWrite(13, LOW);
	b_LED_VERDE = false;
	b_ALARMA_ACTIVADA = false;
	digitalWrite(5, LOW);
	delay(1000);

}


void loop()
{
	yield();

  	delay(1000);
  	if (digitalRead(25)) {
  		b_LED_VERDE = true;
  		b_ALARMA_ACTIVADA = true;
  		Serial.println(String("PULSADOR ON"));
  		for (int count = 0; count < 10; count++) {
  			TimerFreeTone(5,1000,500);
  			delay(1000);
  		}
  	}

  	if (digitalRead(26)) {
  		b_LED_VERDE = false;
  		b_ALARMA_ACTIVADA = false;
  		Serial.println(String("PULSADOR OFF"));
  	}

  	if ((b_LED_VERDE == true)) {
  		digitalWrite(12, HIGH);
  	}
  	else {
  		digitalWrite(12, LOW);
  	}

  	if (b_ALARMA_ACTIVADA) {
  		if((millis()-task_time_ms)>=5000){
  			task_time_ms=millis();
  			if (digitalRead(14)) {
  				digitalWrite(13, HIGH);
  				Serial.println(String("DETECTADO MOVIMIENTO"));
  			}

  		}
  	}

}

¿Se ejecuta esta instrucción sin oprimir el pulsador 26?

1 Like

¿Le has puesto resistencias a masa (GND) a los pulsadores?
Si no las has puesto, las entradas detectan ruido cuando los pulsadores no están pulsados y por lo que parece que estuviesen en HIGH.
Por eso tu código interpreta que están siempre pulsados.

Lo mejor sería que adjuntes un esquema con las conexiones (puedes hacerlo a mano y subir una foto).

1 Like

Creo que este va a ser el problema. Puse resistencias de 10k entre los 5V y el pulsador. ¿Según lo que me dices debería ponerlas entre el pulsador y el GND? Gracias

Una pregunta ??

Al "if digitalRead (25)" no se le asigna ninguna condición ????

Un saludo !!!

Es suficiente para el condicional? SI es VERDADERO o sea si digitalRead(25) == HIGH hace lo que sigue.
Esta forma de programar es muy personal, solo le sirve a quien la hizo, pero vuelve 1 mes despues y no sabe que tenia conectado al pin 25 ni por qué lo hizo de este modo.
El tiempo le enseñará a trabajar de otra forma o mirar como programan otros y hacerlo de forma mas clara para si mismo.
Repito, no esta mal, solo que si no tienes buena memoria, con los dias tendras dudas de lo que hiciste.

1 Like

Gracias @Surbyte

Tienes razón, es preferible clarificar los condicionales.

Un saludo !!!!... :cocktail:... :cocktail:

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