Hola que tal, soy nuevo en esto del uso del ARDUINO por lo que actualmente ando en la fase de proyectos sencillos para comprender como trabaja. Por lo anterior, estoy tratando de hacer un proyecto el cual involucra un LED RGB y un push button.
El proyecto consiste básicamente que mientras el estado del pin 2 (donde esta conectado el push-button) este HIGH el programa apagara y encenderá de manera continua los pines 9, 10 y 11 el LED RGB de tal forma que haga un recorrido por los 7 colores: rojo, amarillo, verde, etc.; pero cuando el push-button sea pulsado (lo que pondrá el estado del pin2 en LOW) el ciclo de colores se detenga por completo y empezará DESDE EL INICIO.
Para realizar lo anterior me aconsejaron usar un INTERRUPCIÓN, sin embargo el problema que he experimentado es que cuando pulso el push-button para activar la INTERRUPCIÓN esta efectivamente se ejecuta pero solamente PAUSA la ejecución del programa ya que una vez que dejo de presionar el push-button el programa continua su flujo normal.
El codigo que estoy usando es este:
int rojo = 9, verde = 10, azul = 11;
int tiempo = 2000; //retraso de 2 segundos para visualizar cada color
int pushButton = 2;
void setup(){
pinMode(rojo, OUTPUT);
pinMode(verde, OUTPUT);
pinMode(azul, OUTPUT);
pinMode(pushButton, INPUT); //pin conectado al push-button
digitalWrite(pushButton, HIGH); //activa la resistencia interna pull-up
attachInterrupt(0, inter0, LOW); /interrupción cero monitorea el estado del pin2;
cuando cambie a LOW detendra el ciclo del LED/
}
void loop(){
while(digitalRead(pushButton) == HIGH){
digitalWrite(rojo, HIGH);
delay(tiempo);
digitalWrite(verde, HIGH);
delay(tiempo);
digitalWrite(rojo, LOW);
delay(tiempo);
digitalWrite(azul, HIGH);
delay(tiempo);
digitalWrite(verde, LOW);
delay(tiempo);
digitalWrite(rojo, HIGH);
delay(tiempo);
digitalWrite(verde, HIGH);
digitalWrite(azul, HIGH);
delay(tiempo*2); //se duplica el tiempo solo para resaltar el color blanco
digitalWrite(rojo, LOW);
digitalWrite(verde, LOW);
digitalWrite(azul, LOW);
delay(tiempo);
}
}
void inter0(){ //se ejecutará cuando el estado del pin2 cambie a LOW
digitalWrite(rojo, LOW);
digitalWrite(verde, LOW);
digitalWrite(azul, LOW);
}
Según yo con las instrucciones contenidas en inter0() es lo que necesito para comenzar el ciclo desde el color ROJO, pero tengo mis dudas.
Adjunto imagen del circuito empleado.