Resultado al que debemos llegar:
Materiales necesarios:
- Tarjeta Arduino Mega 2560
- 17 resistencias de 1/4 watt de 220 ohmnios
- 1 resistencia de 1/4 watt de 10 K. omnhios
- 1 pulsador Normalmente Abierto
- Múltiples cables de conexión
El programa iniciará encendiendo los leds de uno en uno por cada uno de los dos grupos de 8 leds y al llegar al final se devolverá realizando el efecto de auto fantástico. Si se presiona el pulsador la velocidad del efecto se reducirá y asi sucesivamente hasta volver al estado original, para lograr esto habrá que oprimir el pulsador unas 20 veces aproximadamente.
Conexión de la tarjeta Arduino:
- 8 leds rojos conectados a los pines 5, 6, 7,8,9,10,11,12
- 8 leds verdes conectados a los pines 22,23,24,25,26,27,28,29
- 1 pulsador conectado al pin 2
/* El auto fantástico*/
int BotonIncremento=2; //botón de incremento
int timeAntirebote=20; //un valor entre 10 y 15 nos da una lectura correcta del estado del botón.
int EstadoBotonIncremento;
int EstadoBotonAnteriorIncremento;
int pinArray1[] = {5, 6, 7,8,9,10,11,12}; //primer grupo de pines
int pinArray2[] = {22,23,24,25,26,27,28,29}; //segundo grupo de pines
int count = 0;
int count2 = 0;
int timer = 5; //timer marca como queremos que vaya de rápido la ráfaga de encendido-apagado de los LEDS
int estado = 0;
//Función Antirebote
boolean antirebote(int pin){ //esta función nos va a devolver un valor booleano.
int contador=0;
boolean estado; //guarda el estado del botón
boolean estadoAnterior;//guarda el último estado del botón
do {
estado=digitalRead(pin);
if (estado != estadoAnterior){
contador=0;
estadoAnterior = estado;
}
else{
contador = contador + 1;
}
delay(1);
}
while(contador < timeAntirebote);
return estado;
}
void setup(){
pinMode(BotonIncremento,INPUT); //los pines los declaramos como entradas
Serial.begin(9600);
attachInterrupt( 0, ServicioBoton, RISING); //declaramos interrupción de paso bajo a paso alto
for (count=0;count<8;count++) {
pinMode(pinArray1[count], OUTPUT);
}
for (count=0;count<8;count++) {
pinMode(pinArray2[count], OUTPUT);
}
}
void loop() {
for (count=0;count<7;count++) {
digitalWrite(pinArray1[count], HIGH);
digitalWrite(pinArray2[count], HIGH);
delay(timer);
digitalWrite(pinArray1[count + 1], HIGH);
digitalWrite(pinArray2[count + 1], HIGH);
delay(timer);
digitalWrite(pinArray1[count], LOW);
digitalWrite(pinArray2[count], LOW);
delay(timer*2);}
for (count=7;count>0;count--) {
digitalWrite(pinArray1[count], HIGH);
digitalWrite(pinArray2[count], HIGH);
delay(timer);
digitalWrite(pinArray1[count - 1], HIGH);
digitalWrite(pinArray2[count - 1], HIGH);
delay(timer);
digitalWrite(pinArray1[count], LOW);
digitalWrite(pinArray2[count], LOW);
delay(timer*2);}
}
void ServicioBoton() {
EstadoBotonIncremento=digitalRead(BotonIncremento);//leemos el botón
if((EstadoBotonIncremento !=EstadoBotonAnteriorIncremento) &&(antirebote(BotonIncremento))){ //preguntamos si hay cambio respecto al estado anterior y vemos si esta presionado
timer=timer + 5; //aumentamos la cuenta
}
EstadoBotonAnteriorIncremento = EstadoBotonIncremento;//guardamos el estado del botón
if (timer >= 200) {
timer=5;
}
}
No hay comentarios:
Publicar un comentario