Hola a todos, este es mi primer post en la comunidad y quería ver si me podíais ayudar, en un principio es sencillo lo que quiero realizar, os comento:
Con un piezo eléctrico o zumbador estoy intentando reproducir la canción de los simpson, y además estoy utilizando un sensor ldr a modo de interruptor por decirlo de alguna manera, el tema es el siguiente, cuando le da luz al LDR no debe sonar nada y cuando lo tape debe sonar la cancion, y mi problema es que cuando le da la luz el zumbador emite un pitido, cuando tapo el sensor funciona correctamente, pero eso al darle luz en vez de estar insonoro da pitidos, ¿es que simplemente al tenerlo conectado ya suena siempre el zumbador?, os adjunto el código ya que el esquema es bastante sencillo:
#include "pitches.h"
int sensorValue2=0;
int num2=0;
int counter=0;
int num=0;
int den=0;
float media=0.0;
float media2=0.0;
int zumbador = 8;
int melody[] = {
NOTE_C4, NOTE_FS4,NOTE_G4, NOTE_C5, NOTE_E5,NOTE_FS5, NOTE_A5, NOTE_G5, NOTE_E5, NOTE_C5, NOTE_A4, NOTE_FS4, NOTE_FS4, NOTE_FS4, NOTE_G4,0,NOTE_FS4, NOTE_FS4, NOTE_FS4,NOTE_G4,NOTE_AS4,NOTE_B4,0,NOTE_C5,NOTE_E5,NOTE_FS5,NOTE_A5, NOTE_G5, NOTE_E5, NOTE_C5, NOTE_A4,0,NOTE_FS5,NOTE_FS5,NOTE_FS5,NOTE_G5,0,NOTE_FS4, NOTE_FS4,NOTE_FS4,NOTE_G4,NOTE_AS4,NOTE_C5,NOTE_C5,NOTE_C5,NOTE_C5};
float noteDurations[] = {
2, 2, 1,2.666,4,4,8,2.6666,4,4,8,8,8,8,2,4,8,8,8,8,2.666,2,2,2.666,4,4,8,2.666,4,4,8,2,8,8,8,8,8,8,8,8,8,2.666,8,8,8,2.666 };
void setup() {
Serial.begin(9600);
pinMode(zumbador, OUTPUT);
}
float calculaMedia(){
counter=0;
media=0;
num=0;
while (counter < 100) {
int sensorValue = analogRead(A0);
num = num + sensorValue;
counter++;
}
media=num/100;
return media;
}
void tocarNota(int indice, float duracion){
tone(zumbador, melody[indice], duracion);
}
void loop() {
noTone(zumbador);
//Serial.print(media, DEC);
if (calculaMedia() < 300) {
for (int thisNote = 0; thisNote < 46; thisNote++) {
media2=0;
sensorValue2=0;
num2=0;
float noteDuration = 1000/noteDurations[thisNote];
tocarNota(thisNote, noteDuration);
//tone(zumbador, melody[thisNote],noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(zumbador);
for (int counter2=0; counter2<25; counter2++) {
sensorValue2 = analogRead(A0);
num2 = num2 + sensorValue2;
}
media2=num2/25;
if (media2>300) {
num2=0;
sensorValue2=0;
media2=0;
goto final;
}
}
}
else {
digitalWrite(zumbador,LOW);
delay(10);
//noTone(zumbador);
}
final:;
delay(10);
// Serial.println(sensorValue, DEC);
}
Se que no esta muy depurado XD gracias de antemano por la ayuda.