miércoles, 3 de febrero de 2010

Sensor de luz, botón y dos LEDs

El siguiente programa encenderá el LED1 o el LED2 dependiendo de lo que reciba el sensor de luz. Controlaremos analógicamente el brillo de los LEDs con un botón.

Implementaremos el sistema de la siguiente manera

+ Lado positivo sensor de luz a +5V
+ Lado positivo sensor de luz al pin 1 (analógico)
- Lado negativo sensor de luz a ground

+ Lado positivo LED1 y 2 a los pines 9 y 10 (digital)
- Lado negativo LED1 y 2 a ground

+ Lado positivo botón a +5V.
+ Lado positivo botón al pin 7 (digital)
- Lado negativo botón a ground







const int pinLed1=9;
const int pinLed2=10;

int boton=7;
int contadorBoton=0;
int lastState=0;
int state=0;

int sensorLuz=1;
int sensorValor=0;
int sensorMax=0;
int sensorMin=1023;

int ultimoTiempo=0;//Auxiliar para la comprobacion de tiempo
int tiempo=100;//Tiempo que hace cada comprobacion iterativamente

void setup()
{
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
pinMode(boton, INPUT);
pinMode(sensorLuz, INPUT);
digitalWrite(13, HIGH);//Durante los 5 primeros segundos encendemos el LED de la placa mientras hace operaciones
while(millis()<5000)//Da valores maximos y minimos a al sensor de luz
{
sensorValor=analogRead(sensorLuz);
if(sensorValor>sensorMax)
{
sensorMax=sensorValor;
}
if (sensorValor {
sensorMin=sensorValor;
}
}
digitalWrite(13, LOW);//Apagamos el LED de la placa
}

void loop ()
{
state=digitalRead(boton);
if(state!=lastState)
{
if(state==HIGH)
{
contadorBoton++;
}
lastState=state;
}
sensorValor=analogRead(sensorLuz);//Leemos la señal del sensor de LUZ
sensorValor=map(sensorValor, sensorMin, sensorMax, 0, 255);//Se mapea la señal del sensor de Luz, se le da los valores maximos y minimos y el rango
sensorValor=constrain(sensorValor, 0, 255);//Limitamos el valor al rango que queremos 0-255
if(millis()-ultimoTiempo>tiempo)//Cada 'tiempo' controlamos el valor del sensor
{
ultimoTiempo=millis();
if(sensorValor>100)
{
if(((25*contadorBoton)%256)<26)
{
digitalWrite(pinLed1,LOW);
}
else
{
analogWrite(pinLed1, ((25*contadorBoton)%256));
digitalWrite(pinLed2,LOW);
}
}
else
{
if(((25*contadorBoton)%256)<26)
{
digitalWrite(pinLed2,LOW);
}
else
{
analogWrite(pinLed2, ((25*contadorBoton)%256));
digitalWrite(pinLed1,LOW);
}
}
}
}

No hay comentarios:

Publicar un comentario