Sunteți pe pagina 1din 10

/*

Secuencias de Luces
A continuacin se presenta un programa que rota su secuencia al presionar el
pulsador
*/

//Declaramos cada led y les indicamos qu eposicin van a tener en el circuito


arduino//

int led1 = 3;
int led2 = 4;
int led3 = 5;
int led4 = 6;
int led5 = 7;
int led6 = 8;
int led7 = 9;
int led8 = 10;
int pulsador = A0; //Ubicacin del pulsador en la placa Aruduino

// Declaramos las variables


int estpulsador = 0; // Almacena el valor del potenciometro
int secuencias = 5; // Cantidad de secuencias programadas
int esperapulsador = 100; // Tiempo en milisegundos que se espera antes
// de hacer una nueva lectura al pulsador
int conteopulsador = 0; // Contador que se compara con espera pusador
int intensidad = 0; // Intensidad de iluminacion
boolean habilitar_pulsador = false; // Indica si el pulsador se debe leer

boolean aumentando_intensidad = true; // Indica si la intensidad esta


aumentando
int tiempo = 300; // Tiempo base en milisegundos para cada iteracion
int secuencia = 1; // Secuencia actual en la que nos encontramos
int estado_secuencia = 1; // Estado de la secuencia actual en el que nos
encontramos
int estados = 1; // Estados por secuencia

void setup() {
// Inicializamos los pines de los leds como salidas
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
// Asignamos los valores iniciales a los leds (apagados)
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);

digitalWrite(led8, LOW);
}

void loop() {
// Leemos el estado del pulsador y lo alamacenamos
estpulsador = digitalRead(pulsador);
// Si el pulsador esta habilitado y lo presionamos, cambiamos de secuencia
if (habilitar_pulsador && estpulsador == LOW) {
// Rotamos la secuencia.
if (secuencia == secuencias) {
secuencia = 1;
} else {
secuencia = secuencia + 1;
}
estado_secuencia = 1;
habilitar_pulsador = false;
}
// Si el pulsador esta deshabilitado, evaluaremos el conteo de espera antes de
volver
// a habilitarlo.

if (habilitar_pulsador == false) {
// Si el conteo llega a esperapulsador o se deja de presionar el pulsador, lo
habilitamos
if (conteopulsador >= esperapulsador || estpulsador == LOW) {
habilitar_pulsador = true;
conteopulsador = 0;

} else {
conteopulsador = conteopulsador + tiempo;
}

}
// Evaluamos la secuencia actual
switch(secuencia) {
case 1:
// Secuencia 1: alterna encendido de LEDs
tiempo = 300;
estados = 4;
switch(estado_secuencia) {
case 1:
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
digitalWrite(led5, LOW);
digitalWrite(led6, HIGH);
digitalWrite(led7, LOW);
digitalWrite(led8, HIGH);
break;
case 3:
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);

digitalWrite(led4, LOW);
digitalWrite(led5, HIGH);
digitalWrite(led6, LOW);
digitalWrite(led7, HIGH);
digitalWrite(led8, LOW);
break;
}
break;
case 2:
// Secuencia 2: mantiene todos los LEDs encendidos
tiempo = 300;
estados = 1;
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
break;
case 3:
// Secuencia 3: enciende y apaga todos los LEDs
tiempo = 300;
estados = 2;
switch(estado_secuencia) {

case 1:
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
break;
case 9:
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
break;
}
estados = 17;
break;
case 4:
// Secuencia 4: enciende y apaga todos los LEDs con atenuacion
estados = 15;

switch (estado_secuencia) {
case 1:
// Bajamos el tiempo a 5ms porque la atenuacion requiere
// que se incremente la intensidad de a pocos.
tiempo = 5;
if (aumentando_intensidad) {
intensidad = intensidad + 1;
if (intensidad >= 255) {
intensidad = 255;
aumentando_intensidad = false;
} else {
estado_secuencia = 0; // Para quedarnos en el estado 1
}
} else {
intensidad = intensidad - 1;
if (intensidad <= 0) {
intensidad = 0;
aumentando_intensidad = true;
} else {
estado_secuencia = 0; // Para quedarnos en el estado 1
}
}
analogWrite(led1, intensidad);
analogWrite(led2, intensidad);
analogWrite(led3, intensidad);
analogWrite(led4, intensidad);

analogWrite(led5, intensidad);
analogWrite(led6, intensidad);
analogWrite(led7, intensidad);
analogWrite(led8, intensidad);
break;
case 2:
// Regresamos el tiempo a 300ms porque ya no necesitamos
//
tiempo = 300;
break;
}
break;
case 5:
// Secuencia 5: alterna encendido de LEDs con atenuacion
estados = 15;
switch (estado_secuencia) {
case 1:
// Bajamos el tiempo a 5ms porque la atenuacion requiere
// que se incremente la intensidad de a pocos
tiempo = 5;
if (aumentando_intensidad) {
intensidad = intensidad + 1;
if (intensidad >= 255) {
intensidad = 255;
aumentando_intensidad = false;
} else {

estado_secuencia = 0; // Para quedarnos en el estado 1


}
} else {
intensidad = intensidad - 1;
if (intensidad <= 0) {
intensidad = 0;
aumentando_intensidad = true;
} else {
estado_secuencia = 0; // Para quedarnos en el estado 1
}
}
analogWrite(led1, intensidad);
analogWrite(led2, 255-intensidad);
analogWrite(led3, intensidad);
analogWrite(led4, 255-intensidad);
analogWrite(led5, intensidad);
analogWrite(led6, intensidad);
analogWrite(led7, intensidad);
analogWrite(led8, intensidad);
break;
case 2:
tiempo = 300;
break;
}
break;
}

// Evaluamos si llegamos al estado final


if ( estado_secuencia == estados ) {
estado_secuencia = 1;
} else {
estado_secuencia = estado_secuencia + 1;
}
// Esperamos "tiempo" milisegundos
delay(tiempo);
}

S-ar putea să vă placă și