Problemas con codigo

buenas noches,

tengo un detalle con codigo, me piden realizar una simulacion de 2 semaforos de 2 colores (rojo y verde), pero uno es semi automatico,el semaforo 1 es controlado por sensores que determinan un parpadeo de la luz roja y su encendido total, pero el otro semaforo 2 es controlado de manera manual, pero cunado el semaforo 2 se cambia a rojo de manera manual tiene que hacer que cambie a verde el semaforo 1, aun que esten activados el sensor 1 y sensor 2, y cuando se desactiven los sensores tiene que seguir encendido el color verde en el semaforo 1, practicamente tiene que regresar al inicio del bucle o las condiciones iniciales, alguien me podria apoyar por favor, dejo el codigo que realice, el que dice selec es el seleccionador del semaforo 2, para determinar el color que debe de encender del semaforo 2, de antemano les agradezco.

// C++ code
//
int sen1 = 0;

int sen2 = 0;

int selec = 0;

int selint = 0;

int sen2ant = 0;

void setup()
{
  pinMode(8, INPUT);
  pinMode(9, INPUT);
  pinMode(10, INPUT);
  pinMode(7, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop()
{
  // Leer sensores
  sen2 = digitalRead(9);
  sen1 = digitalRead(10);
  selec = digitalRead(8);
  if (sen1 == LOW && sen2 ==LOW && selec == LOW) {
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
  } else {
    if (sen1 == HIGH && sen2 == LOW && selec == LOW) {
      digitalWrite(13, LOW);
      digitalWrite(12, HIGH);
      delay(500); // Wait for 500 millisecond(s)
      digitalWrite(12, LOW);
      delay(500); // Wait for 500 millisecond(s)
    } else {
      if (sen1 == HIGH && sen2 != sen2ant && selec == LOW) {
        digitalWrite(13, LOW);
        digitalWrite(12, HIGH);
        digitalWrite(11, HIGH);
        delay(1500); // Wait for 1500 millisecond(s)
        digitalWrite(11, LOW);
      } else {
        if( selec != selint && sen1 == HIGH && sen2 != sen2ant){
          digitalWrite(13, LOW);
          digitalWrite(12, HIGH);
          digitalWrite(11, LOW);
          digitalWrite(7, HIGH);
          } else {
            if (selec == LOW && sen1 == HIGH && sen2 != sen2ant){
              digitalWrite(13, HIGH);
              digitalWrite(12, LOW);
              digitalWrite(11, LOW);
              digitalWrite(7, LOW);
            }
         }
      }selint = selec;
    }
    sen2ant = sen2;
  }
 
}

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @ferdpl1988.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

El problema de tu código son los delay().
Cuando el código se encuentra con un delay() el microcontrolador no responde a nada y ahi pierdes las posibilidad dq reaccione a un pulsador.
Para evitar esto debes usar millis().
Mira los tutoriales que estan en Documentación (Sección) y si no lo comprendes nos dices y te guiaremos.

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