lunes, 22 de febrero de 2010

Combinaciones con botones

En este ejemplo tenemos 3 botones, y cada uno activa o desactiva una combinación de LEDs. Existen 3 combinaciones distintas, las cuales se pueden mezclar si pulsamos mas de un botón de los 3. Si tenemos activados dos botones, las combinaciones relacionadas con esos botones se activarán, primero una y luego otra.

El circuito lo montaremos de la siguiente manera:
LEDs conectados a los pines (digitales) 3, 5, 6, 9, 10 y 11
Botones conectados a los pines (digitales) 2, 8 y 12





//Pulsando los tres botones los LED se encenderán formando combinaciones diferentes

const int vectorLED[]={3,5,6,9,10,11};
const int boton1=2;
const int boton2=8;
const int boton3=12;

int contadorA=0;
int contadorB=0;
int contadorC=0;

int state1=0;
int state2=0;
int state3=0;
int lastState1=0;
int lastState2=0;
int lastState3=0;

int i=0;
int j=0;
int k=0;
int ultimoTiempo=0;
int tiempo=100;

void setup()
{
pinMode(boton1, INPUT);
pinMode(boton2, INPUT);
pinMode(boton3, INPUT);
for(i=0; i<6; i++)
{
pinMode(vectorLED[i], OUTPUT);
}
Serial.begin(9600);
}

void loop()
{
state3=digitalRead(boton3);
if(state3!=lastState3)
{
if(state3==HIGH)
{
contadorC++;
}
lastState3=state3;
}
state1=digitalRead(boton1);
if(state1!=lastState1)
{
if(state1==HIGH)
{
contadorA++;
}
lastState1=state1;
}
state2=digitalRead(boton2);
if(state2!=lastState2)
{
if(state2==HIGH)
{
contadorB++;
}
lastState2=state2;
}
if((contadorC%2)==0)
{
for(i=0; i<6; i++)
{
state3=digitalRead(boton3);
if(state3!=lastState3)
{
if(state3==HIGH)
{
contadorC++;
}
lastState3=state3;
}
if(millis()-ultimoTiempo>tiempo)
{
ultimoTiempo=millis();
analogWrite(vectorLED[i], 20);
delay(100);
}
}
for(i=0; i<6; i++)
{
state3=digitalRead(boton3);
if(state3!=lastState3)
{
if(state3==HIGH)
{
contadorC++;
}
lastState3=state3;
}
if(millis()-ultimoTiempo>tiempo)
{
ultimoTiempo=millis();
digitalWrite(vectorLED[i], LOW);;
delay(100);
}
}
}
else
{
for(i=0; i<6; i++)
{
digitalWrite(vectorLED[i], LOW);
}
}
if((contadorB%2)==0)
{
j=5;
for(i=0; i<3; i++)
{
state2=digitalRead(boton2);
if(state2!=lastState2)
{
if(state2==HIGH)
{
contadorB++;
}
lastState2=state2;
}
if(millis()-ultimoTiempo>tiempo)
{
ultimoTiempo=millis();
analogWrite(vectorLED[i], 20);
analogWrite(vectorLED[j], 20);
j--;
delay(100);
}
}
j=3;
for(i=2; i>=0; i--)
{
state2=digitalRead(boton2);
if(state2!=lastState2)
{
if(state2==HIGH)
{
contadorB++;
}
lastState2=state2;
}
if(millis()-ultimoTiempo>tiempo)
{
ultimoTiempo=millis();
digitalWrite(vectorLED[i], LOW);
digitalWrite(vectorLED[j], LOW);
j++;
delay(100);
}
}
}
else
{
for(i=0; i<6; i++)
{
digitalWrite(vectorLED[i], LOW);
}
}
if((contadorA%2)==0)
{
for(i=0; i<6; i++)
{
state1=digitalRead(boton1);
if(state1!=lastState1)
{
if(state1==HIGH)
{
contadorA++;
}
lastState1=state1;
}
if(millis()-ultimoTiempo>tiempo)
{
ultimoTiempo=millis();
analogWrite(vectorLED[i], 20);
if(i==2)
{
delay(500);
}
}
}
for(i=0; i<6; i++)
{
state1=digitalRead(boton1);
if(state1!=lastState1)
{
if(state1==HIGH)
{
contadorA++;
}
lastState1=state1;
}
if(millis()-ultimoTiempo>tiempo)
{
ultimoTiempo=millis();
analogWrite(vectorLED[i], 0);
if(i==2)
{
delay(500);
}
}
}
}
else
{
for(i=0; i<6; i++)
{
digitalWrite(vectorLED[i], LOW);
}
}
}

No hay comentarios:

Publicar un comentario