Pages: [1]   Go Down
Author Topic: problemillas con piezo electrico  (Read 1360 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-lol gracias de antemano por la ayuda.
Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bienvenido a la comunidad.
Como sabes los tonos que hay que usar en la cancion?.

Salu2
Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Activando noTone no se quitan los pitidos?,

Saku2
Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No, he probado con noTone, con tone y frecuencia 0 y con digitalWrite y valor LOW pero en cuanto enchufo la placa empieza a pitar, la canción suena bien pero luego no se queda en silencio, segun creo al tener la funcion tone dentro del if no debería sonar nada hasta que no cumpla la condición pero no se porque no funciona así, gracias por la respuesta un saludo.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola foreros, gracias por las respuestas, contestando a la pregunta de los tonos de la canción me los ha pasado un amigo, que no se de donde los ha sacado. Miraré lo del ruido a ver, aunque no lo tengo conectado a la red eléctrica, alimento la placa a través del usb del ordenador, he probado también en poner un tone con frecuencia 0 al inicio de la función loop(), para intentar tener el zumbador "ocupado" por decirlo de alguna forma en todo momento, no se, mirare lo del ruido que suena lógico, gracias.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola a todos gracias por las propuestas, ya he solucionado el problema, al calcular la media con los valores detectados por el LDR para mandar los tonos o no hacerlo, me estaba dando el problema ya que el pitido que me sonaba es que se quedaba atascado en la primera nota, al monitorear los valores del LDR he podido solucionar el problema cambiando los valores de comparacion de los condicionaes if, gracias por las ayudas.
Logged

Pages: [1]   Go Up
Jump to: