Durante los primeros 5 segundos calibramos el sensor de luz.
El circuito lo implementaremos de la siguiente manera:
+ Lado positivo sensor de luz a +5V
+ Lado positivo sensor de luz al pin 0 (analógico)
- Lado negativo sensor de luz a ground
+ 1º pin LED al pin 11 (digital)
- 2º pin LED al pin a ground
+ 3º pin LED al pin 10 (digital)
+ 4º pin LED al pin 9 (digital)
+ Lado positivo altavoz al pin 5 (digital)
- Lado negativo altavoz a ground
+ Lado positivo botón a +5V.
+ Lado positivo botón al pin 3 (digital)
- Lado negativo botón a ground
int rojo=11;
int verde=10;
int azul=9;
int pulsador=3;
int contadorPulsador=0;
int last_timePulsador=0;
int estadoPulsador=0;
int altavoz=5;//Pin del altavoz
int length=15; //Numero de notas
char notes[]="abcffeabffccaba";//Notas
int beats[]= {1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1};//Duracion de cada nota
int intervalo=200;//Intervalo de duracion de cada nota (argumento de la duncion PlayNote
int sensorLuz=0;
int valorLuz=0;
int sensorMax=0;
int sensorMin=1000;
int i=0;
void playTone(int tone, int duration)
{
for (long i = 0; i
digitalWrite(altavoz, HIGH);
delayMicroseconds(tone);
digitalWrite(altavoz, LOW);
delayMicroseconds(tone);
}
}
void playNote(char note, int duration)
{
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
for (int i=0; i<8; i++)
{
if (names[i]==note)
{
playTone(tones[i], duration);//Toca la nota correspondiente a las notas introducidas en la declaracion del array notes[]
}
}
}
void setup()
{
pinMode(rojo, OUTPUT);
pinMode(verde, OUTPUT);
pinMode(azul, OUTPUT);
pinMode(sensorLuz, INPUT);
pinMode(pulsador, INPUT);
pinMode(altavoz, OUTPUT);
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
{
valorLuz=analogRead(sensorLuz);
if(valorLuz>sensorMax)
{
sensorMax=valorLuz;
}
if (valorLuz
sensorMin=valorLuz;
}
}
digitalWrite(13, LOW);//Apagamos el LED de la placa
}
void loop()
{
estadoPulsador=digitalRead(pulsador);
if(estadoPulsador!=last_timePulsador)
{
if(estadoPulsador==HIGH)
{
contadorPulsador++;
}
last_timePulsador=estadoPulsador;
}
if(contadorPulsador%4==1)
{
analogWrite(rojo, 25);
analogWrite(verde, 0);
analogWrite(azul, 0);
}
if(contadorPulsador%4==2)
{
analogWrite(rojo, 0);
analogWrite(verde, 25);
analogWrite(azul, 0);
}
if(contadorPulsador%4==3)
{
analogWrite(rojo, 0);
analogWrite(verde, 0);
analogWrite(azul, 25);
}
if(contadorPulsador%4==0)
{
analogWrite(rojo, 0);
analogWrite(verde, 0);
analogWrite(azul, 0);
}
valorLuz=analogRead(sensorLuz);
valorLuz=map(valorLuz, sensorMin, sensorMax, 0, 255);//Se mapea la señal del sensor de Luz, se le da los valores maximos y minimos y el rango
valorLuz=constrain(valorLuz, 0, 255);//Limitamos el valor al rango que queremos 0-255
if(valorLuz>123)
{
for(i=0; i
playNote(notes[i], intervalo);
}
}
}
No hay comentarios:
Publicar un comentario