Use un interruptor para anular el programa Arduino

0

Estoy construyendo un sistema donde estoy controlando 2 tiras de LED usando un Arduino Uno, chip de tiempo y relé. Me las arreglé para encender y apagar las luces en 2 días diferentes a diferentes horas. Ahora quiero agregar un interruptor para anular el programa, encender las luces, cuando no estén programadas. También me gustaría agregar un LED para mostrar cuando el interruptor está activo.

Aquí está mi código.

#include <DS3231.h>

int Relay = 4;
String today ;                           

DS3231  rtc(SDA, SCL);
Time t;

void setup() {
  Serial.begin(9600);
  rtc.begin();
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay, LOW);
  delay (2000);
}

void loop() {

  today = rtc.getDOWStr();

  if (today == "Thursday") {

    if ( 15 > t.hour && t.hour < 22) {
      digitalWrite (Relay, HIGH);
    }

    else{                 
      digitalWrite (Relay, LOW);
    }
  }

  if (today == "Friday") {        

    if ( 16 > t.hour && t.hour < 23) {

      digitalWrite (Relay, HIGH);
    }
     else{

      digitalWrite (Relay, LOW);
    }
}

}

¿Cuál es la mejor manera de proceder?

    
pregunta Ephraim Cohen

1 respuesta

0

Agregue un valor booleano que indique si los leds están encendidos debido a la hora. Reemplace digitalWrite con la configuración de ese valor booleano.

Luego agrega un if:

bool switchOn = digitalRead(switch) == HIGH; //when using pulldown configuration
bool timedOn =false;

if (today == "Thursday") {
    if ( 15 > t.hour && t.hour < 22) {
      timedOn = true;
    } else {
      timedOn = false;
    }
} else if (today == "Friday") {        
    if ( 16 > t.hour && t.hour < 23) {
      timedOn = true;
    } else {
      timedOn = false;
    }
} else {
    timedOn = false;
}

if(switchOn || timedOn){
    digitalWrite (Relay, HIGH);
} else {
    digitalWrite (Relay, LOW);
}

if(switchOn){
    digitalWrite (indicator, HIGH);
} else {
    digitalWrite (indicator, LOW);
}
    
respondido por el ratchet freak

Lea otras preguntas en las etiquetas