Go Down

Topic: Mantener leds encendidos sin usar delay (Read 192 times) previous topic - next topic

DavidMFC2103

Bueno estoy haciendo un semaforo que cuando pulse un boton el tiempo de paso de peatones cambie y se encienda otro led que significa que esta activado este paso.

El problema es que con delay no me lee el pulsador mientras mantiene los leds encendidos del semaforo
como podria solucionarlo, pongo el codigo que tengo.
Code: [Select]

const int semcarred = 52; //Puerto led semaforo carro rojo
const int semcaryell = 50; //Puerto led semaforo carro amarillo
const int semcargre = 48; //Puerto led semaforo carro verde
const int semperred = 46; //Puerto led semaforo personas rojo
const int sempergre = 44; //Puerto led semaforo personas verde
const int ledpuls = 42;  //Led activar paso discapacitados
int val = 0;             //Valor digital pulsador
int A = 0;               //
const int puls = 24;     //puerto pulsador


void setup()
{
  Serial.begin(9600);
  // Declarando salida digital de los leds
  pinMode(semcarred, OUTPUT);
  pinMode(semcaryell, OUTPUT);
  pinMode(semcargre, OUTPUT);
  pinMode(semperred, OUTPUT);
  pinMode(sempergre, OUTPUT);
  pinMode(ledpuls, OUTPUT);
  //Declarando entrada digital pulsador
  pinMode(puls, INPUT);

}

void loop()
{
  digitalWrite(ledpuls, LOW);    //Led para solicitar paso con mas tiempo APAGADO
  //Lectura valor pulsador
  val =  digitalRead(puls);
  if (val = 1)
  {
    A = 1;
    digitalWrite(ledpuls, HIGH);  //Enciende led cuando solicita paso con mas tiempo
  }

  //Semaforo
  Serial.println(A) ;
  if (A = 0)
  {
    //Lectura valor pulsador
    val =  digitalRead(puls);
    if (val = 1 )                 //asignar valor bandera
    {
      A = 1;
      digitalWrite(ledpuls, HIGH);  //Enciende led cuando solicita paso con mas tiempo
    }
    digitalWrite(semcarred, HIGH);  //Semaforo carros rojo encendido
    digitalWrite(semcaryell, LOW);  //Semaforo carros amarillo apagado
    digitalWrite(semcargre, LOW);   //Semaforo carros verde apagado
    digitalWrite(semperred, LOW);   //Semaforo personas rojo apagado
    digitalWrite(sempergre, HIGH);  //Semaforo personas verde encendido
    delay(4000);                    //Tiempo de espera del semaforo

    //Lectura valor pulsador
    val =  digitalRead(puls);
    if (val = 1)                   //asignar valor bandera
    {
      A = 1;
      digitalWrite(ledpuls, HIGH);  //Enciende led cuando solicita paso con mas tiempo
    }
    digitalWrite(semcarred, HIGH);   //Semaforo carros rojo encendido
    digitalWrite(semcaryell, HIGH);  //Semaforo carros amarillo encendido
    digitalWrite(semcargre, LOW);    //Semaforo carros verde apagado
    digitalWrite(semperred, HIGH);   //Semaforo personas rojo encendido
    digitalWrite(sempergre, LOW);    //Semaforo personas verde apagado
    delay(2000);                     //Tiempo de espera del semaforo

    //Lectura valor pulsador
    val =  digitalRead(puls);
    if (val = 1)                    //asignar valor bandera
    {
      A = 1;
      digitalWrite(ledpuls, HIGH);  //Enciende led cuando solicita paso con mas tiempo
    }
    digitalWrite(semcarred, LOW);    //Semaforo carros rojo apagado
    digitalWrite(semcaryell, LOW);   //Semaforo carros amarillo apagado
    digitalWrite(semcargre, HIGH);   //Semaforo carros verde encendido
    digitalWrite(semperred, HIGH);   //Semaforo personas rojo encendido
    digitalWrite(sempergre, LOW);    //Semaforo personas verde apagado
    delay(8000);                     //Tiempo de espera del semaforo

    //Lectura valor pulsador
    val =  digitalRead(puls);
    if (val = 1)                  //asignar valor bandera
    {
      A = 1;
      digitalWrite(ledpuls, HIGH);   //Enciende led cuando solicita paso con mas tiempo
    }
    digitalWrite(semcarred, LOW);    //Semaforo carros rojo apagado
    digitalWrite(semcaryell, HIGH);  //Semaforo carros amarillo encendido
    digitalWrite(semcargre, LOW);    //Semaforo carros verde apagado
    digitalWrite(semperred, HIGH);   //Semaforo personas rojo encendido
    digitalWrite(sempergre, LOW);    //Semaforo personas verde apagado
    delay(2000);                     //Tiempo de espera del semaforo
  }
  else if (A = 1)
  {
    digitalWrite(semcarred, HIGH);  //Semaforo carros rojo encendido
    digitalWrite(semcaryell, LOW);  //Semaforo carros amarillo apagado
    digitalWrite(semcargre, LOW);   //Semaforo carros verde apagado
    digitalWrite(semperred, LOW);   //Semaforo personas rojo apagado
    digitalWrite(sempergre, HIGH);  //Semaforo personas verde encendido
    delay(8000);                    //Tiempo de espera del semaforo

    digitalWrite(semcarred, HIGH);   //Semaforo carros rojo encendido
    digitalWrite(semcaryell, HIGH);  //Semaforo carros amarillo encendido
    digitalWrite(semcargre, LOW);    //Semaforo carros verde apagado
    digitalWrite(semperred, HIGH);   //Semaforo personas rojo encendido
    digitalWrite(sempergre, LOW);    //Semaforo personas verde apagado
    delay(2000);                     //Tiempo de espera del semaforo

    digitalWrite(semcarred, LOW);    //Semaforo carros rojo apagado
    digitalWrite(semcaryell, LOW);   //Semaforo carros amarillo apagado
    digitalWrite(semcargre, HIGH);   //Semaforo carros verde encendido
    digitalWrite(semperred, HIGH);   //Semaforo personas rojo encendido
    digitalWrite(sempergre, LOW);    //Semaforo personas verde apagado
    delay(8000);                     //Tiempo de espera del semaforo

    digitalWrite(semcarred, LOW);    //Semaforo carros rojo apagado
    digitalWrite(semcaryell, HIGH);  //Semaforo carros amarillo encendido
    digitalWrite(semcargre, LOW);    //Semaforo carros verde apagado
    digitalWrite(semperred, HIGH);   //Semaforo personas rojo encendido
    digitalWrite(sempergre, LOW);    //Semaforo personas verde apagado
    delay(2000);                     //Tiempo de espera del semaforo
    A = 0;
  }
}


Les agradeceria si me pueden ayudar!!

max_saeta

Saludos
La solucion es que veas el ejemplo del IDE blinkwithout delay asi podras resolver tu problema

Go Up