Error con digitalread

Hola, que tal.
Tengo un problema estoy haciendo algo muy sencillo, cuando mantengo pulsado un pulsador, tiene que prender una led verde, y cuando lo suelto, apagar la led verde, y prender una led roja.

Cuestión que esto es muy sencillo, aquí mi código:

int pinSENSOR = 5;
int pinALARMA = 7;
int botonEST = 0;
int pinVERDE = 2;
int pinROJO = 13;
int pinBTN = 4;
void setup() {
  Serial.begin(9600);
  pinMode(pinVERDE, OUTPUT);
  pinMode(pinROJO, OUTPUT);
  pinMode(pinALARMA, OUTPUT);
  pinMode(pinBTN, INPUT);
  pinMode(pinSENSOR, INPUT);
}

void loop() {
  botonEST = digitalRead(pinBTN);
if(botonEST == 0){
  botonEST = 0;
  digitalWrite(pinROJO, LOW);
  digitalWrite(pinVERDE, HIGH);
  Serial.println("- Alarma: Desactivada.");
}else{
  botonEST = 1;
  digitalWrite(pinROJO, HIGH);
  digitalWrite(pinVERDE, LOW);
  Serial.println("- Alarma: Activada.");
}
}

Mi problema es que cuando no estoy pulsando el pulsador, la led verde esta encendida y la roja también, y cuando presiono se apaga la verde, y la roja cobra mas intensidad, pero cuando suelto se vuelve a apagar la led verde, pero la roja sigue encendida. (No hay ningún problema en el conexionado).

Realice una prueba a mi arduino, haciendo que me imprima el valor con digitalRead() de una entreda. Y lo curioso es que cuando mantengo presionado el pulsador me muestra:

1
1
1
1
1

y cuando lo suelto empieza a mostrarme

0
0 
1
0
1
1

como si estuviera presionando el pulsador debes en cuando. cabe destacar que mi arduino es chino. Con respecto a esto, es algo que yo estoy haciendo mal, o simplemente esta funcionando mal mi arduino?

Muchas gracias.

Que es esto?

Serial.prconst byteln("- Alarma: Desactivada.");

jamás lo había leído
la forma habitual de impresion es

Serial.println("- Alarma: Desactivada.");

Ahora mi código, con algunos leves cambios como por ejemplo, cuando defines un pin no hace falta malgastar 2 bytes usando un entero. Basta con un byte y ya que no cambiará uso const para decir que es constante

const byte botonEST 	= 0;
const byte pinVERDE 	= 2;
const byte pinROJO 		= 13;
const byte pinBTN 		= 4;
const byte pinSENSOR 	= 5;
const byte pinALARMA 	= 7;

void setup() {
  Serial.begin(9600);
  pinMode(pinVERDE,  OUTPUT);
  pinMode(pinROJO, 	 OUTPUT);
  pinMode(pinALARMA, OUTPUT);
  pinMode(pinBTN, 	 INPUT);
  pinMode(pinSENSOR, INPUT);
}

void loop() {

	botonEST = digitalRead(pinBTN);
	if (botonEST == 0){
		digitalWrite(pinROJO, LOW);
		digitalWrite(pinVERDE, HIGH);
		Serial.println("- Alarma: Desactivada.");
	} else {
		digitalWrite(pinROJO, HIGH);
		digitalWrite(pinVERDE, LOW);
		Serial.println("- Alarma: Activada.");
	}
}

Hola surbyte,

No escribí esto en mi codigo:

Serial.prconst byteln("- Alarma: Desactivada.");

creo que se te puso sin querer, cuando pegaste el programa.

Mira ahora que probé el programa con tus modificaciones, las dos luces parpadean a las vez antes se mantenían fijas (por el const byte). Y cuando presiono el pulsador, se queda prendida la roja como quería lograr con mi código. Sin dudas es un error de código el cual desconozco.

Lo que quiero es leer una entrada de un pulsador, si el pulsador esta en HIGH, presionado apague la LED VERDE y encienda la LED ROJA, y si lo suelto que encienda la LED VERDE y apague la LED ROJA.

Saludos. Gracias por tu ayuda.

Tienes razón, no se de donde apareció.. olvida el comentario.

Prueba asi

	botonEST = digitalRead(pinBTN);
	if (botonEST == HIGH){
		digitalWrite(pinROJO, LOW);
		digitalWrite(pinVERDE, HIGH);
		Serial.println("- Alarma: Desactivada.");
	} else {
		digitalWrite(pinROJO, HIGH);
		digitalWrite(pinVERDE, LOW);
		Serial.println("- Alarma: Activada.");
	}

no hay mucho para probar.. sigue analizando pero el programa al estar presionado y si tienes bien armada la entrada del pulsador con un boton pull-down entonces funcionara. Si tienes el pulsador vaya a saber como, entonces hara cualqueir cosa
Busca arduino pull-down y verifica

surbyte:
Tienes razón, no se de donde apareció.. olvida el comentario.

Prueba asi

	botonEST = digitalRead(pinBTN);
if (botonEST == HIGH){
	digitalWrite(pinROJO, LOW);
	digitalWrite(pinVERDE, HIGH);
	Serial.println("- Alarma: Desactivada.");
} else {
	digitalWrite(pinROJO, HIGH);
	digitalWrite(pinVERDE, LOW);
	Serial.println("- Alarma: Activada.");
}



no hay mucho para probar.. sigue analizando pero el programa al estar presionado y si tienes bien armada la entrada del pulsador con un boton pull-down entonces funcionara. Si tienes el pulsador vaya a saber como, entonces hara cualqueir cosa
Busca arduino pull-down y verifica

Bueno el problema esta por ahí, estoy contenido directamente le pulsador a la entrada desde GND. Muchas gracias voy a intentar por esa parte.

Acabo de leer que muchos arduinos tienen la funcion pinMode(pin, INPUT_PULLUP);, voy a leer mas sobre esa opcion. Curiosamente hoy me preguntaba por que mi arduino tiene un pin que se llama "RES"

Gracias por tu ayuda.

Esto es pull-down
pullDownResistor.jpg