Buenas!!! ahora que mi pequeña me ha dejado un rato, me he puesto a probar el código que me ha pasado @surbyte y veo que me sigue pasando lo mismo... el altavoz suena 3 o 4 segundos y luego se detiene hasta que algo vuelve a pasar por delante del PIR, en vez de sonar un minuto que es lo que necesito, el foco se enciende pero no se termina de apagar... también debería de durar lo mismo que el altavoz "un minuto" pero no se apaga....A parte de eso que sigo sin solucionar observo, mejor dicho, escucho que el altavoz tiene un ruido que algo se acopla antes de empezar a sonar... y el bluetooth funciona un rato y luego dejad de funcionar.... cada vez tengo más problemas, así que he decidido hacer un vídeo para que podáis verlo, poner el código completo y el esquema de montaje, a ver si así consigo solucionarlo con vuestra inestimable ayuda!
vídeo de youtube para que se vean todos los problemas
código usado:
#define INTERVALO 6*1000 // 60 segundos x 1000 milisegundos
int c[5] = {131, 262, 523, 1046, 2093}; // frecuencias 4 octavas de Do
int cs[5] = {139, 277, 554, 1108, 2217}; // Do#
int d[5] = {147, 294, 587, 1175, 2349}; // Re
int ds[5] = {156, 311, 622, 1244, 2489}; // Re#
int e[5] = {165, 330, 659, 1319, 2637}; // Mi
int f[5] = {175, 349, 698, 1397, 2794}; // Fa
int fs[5] = {185, 370, 740, 1480, 2960}; // Fa#
int g[5] = {196, 392, 784, 1568, 3136}; // Sol
int gs[5] = {208, 415, 831, 1661, 3322}; // Sol#
int a[5] = {220, 440, 880, 1760, 3520}; // La
int as[5] = {233, 466, 932, 1866, 3729}; // La#
int b[5] = {247, 494, 988, 1976, 3951}; // Si
void nota(int a, int b); // declaración de la función auxiliar. Recibe dos números enteros.
int pirPin = 12; //PIR sensor
int altavoz = 2; //Altavoz pin
int ledPinrojo = 11; //pin led rojo
int ledPinverde = 10; //pin led verde
int cmd; // declaración de variable INT llamada Data que recibe del bluetooth
bool flag = false; // boolean
int SSR = 9; // Pin al que está conectado el relé SSR para encender la luz
unsigned long start = 0;
void setup()
{
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(altavoz, OUTPUT);
pinMode(ledPinrojo, OUTPUT);
pinMode(ledPinverde, OUTPUT);
pinMode(SSR, OUTPUT);
digitalWrite(ledPinrojo , LOW);
digitalWrite(ledPinverde , HIGH);
Serial.println("Encendiendo alarma");
}
void loop()
{
if (Serial.available() > 0) {//Envía datos sólo cuando se recibe un dato
cmd = Serial.read(); //Lee el dato llegado por serial.
Serial.print("CMD: ");
Serial.print(cmd); //Imprime el valor llegado al puerto serie
Serial.print("\n"); //Nueva línea
}
switch (cmd) {
case 1: Serial.println("pulsando 1");
flag = true;
Serial.println("Dentro del flag en true");
digitalWrite(ledPinrojo , HIGH); //Enciende el led rojo
digitalWrite(ledPinverde , LOW); //Apaga el led verde
start = millis();
break;
case 2: Serial.println("pulsando 2");
flag = false;
digitalWrite(ledPinrojo , LOW);
digitalWrite(ledPinverde , HIGH);
digitalWrite(SSR , LOW);
Serial.println("Sin movimiento");
break;
default: cmd = 4;
break;
}
if (flag) {
if (digitalRead(pirPin) == HIGH) { //Si el pin del PIR se pone en HIGH hace lo siguiente
Serial.println("Dentro de que ha detectado movimiento");
if (millis() - start < INTERVALO){
Serial.println("Dentro del INTERVALO millis()");
nota(as[1], 100); noTone(altavoz); delay(0); // Suena un pitido
digitalWrite(SSR , HIGH); //Enciende el foco
// Serial.println("Detectado movimiento");
} else {
digitalWrite(SSR , LOW); //Apagar el foco
Serial.println("Fuera del INTERVALO millis()");
}
}
}
}
void nota(int frec, int t){
tone(altavoz,frec); // suena la nota frec recibida
delay(t); // para despues de un tiempo t
}
Esquema de fritzing del montaje:
Alguna idea de los problemas surgidos??????
Muchas gracias!
