Alarma de frigorifico puerta abierta - Sonido a los 5 min.

dsf70spain:
4.- Alguien me puede ayudar a por que me da error?

lo dice claramente el compilador...

sketch_aug11a:38: error: expected unqualified-id before '{' token

o al menos, bastante claro jeje

el loop principal lo cierras aquí

}
//HASTA AQUI TODO BIEN//

pero luego abres otros dos corchetes y ejecutas codigo fuera de la funcion void loop, o de cualquier otra función.
solución usando un par de funciones, así puedes controlar mejor el codigo

// SENSOR PUERTAS NEVERA 11/08/2013

int AlarmaDelay = 600000;//Sonara la alarma a los 10 minutos  
int NeveraR = 12;// Nevera Rojo - puerta abierta - Nevera Pares
int CongeladorR = 11;// Congelador Rojo - puerta abierta - Congelador Impares
int NeveraV = 10;// Nevera Verde - puerta cerrada
int CongeladorV = 9;// Congelador Verde - puerta cerrada
int Alarma = 8;
int SensorNevera = 6; // Sensor Magnetico NO
int SensorCongelador = 5; // Sensor Magnetico NO

void setup() {
pinMode(NeveraR, OUTPUT);
pinMode(CongeladorR, OUTPUT);
pinMode(NeveraV, OUTPUT);
pinMode(CongeladorV, OUTPUT);
pinMode(Alarma, OUTPUT);
pinMode(SensorNevera, INPUT);
pinMode(SensorCongelador, INPUT);
digitalWrite(NeveraV, HIGH);
digitalWrite(CongeladorV, HIGH);
}
// Alarma de la nevera //
void loop() 
{
  AlarmaNevera();
  AlarmaCongelador();
}

void AlarmaNevera()
{
int state = digitalRead(SensorNevera);
if (state == HIGH);
digitalWrite(NeveraR, HIGH);
digitalWrite(NeveraV, LOW); 
delay(AlarmaDelay);  //Pasado 10 minutos suena la alarma, debe chequear sensor por si se ha cerrado puerta 
digitalRead(SensorNevera);
if (state == HIGH);
digitalWrite(Alarma, HIGH);//AlarmaNerera();
}
//HASTA AQUI TODO BIEN//

//Alarma de congelador //
void AlarmaCongelador()
{
int state = digitalRead(SensorCongelador);
if (state == HIGH);
digitalWrite(CongeladorR, HIGH);
digitalWrite(CongeladorV, LOW); 
delay(AlarmaDelay);  //Pasado 10 minutos suena la alarma, debe chequear sensor por si se ha cerrado puerta 
digitalRead(SensorNevera);
if (state == HIGH);
digitalWrite(Alarma, HIGH);//AlarmaNerera();
}

Me parece complicado (y con peligro de frustrarte) empezar un proyecto como este sin ninguna base de estudio y experimentación sencilla.
No he leído el código que propones porque ya en la primera linea cometes un error por no leerse la teoría

int AlarmaDelay = 600000;

Las variables int tiene un valor máximo entre 37767 y -37768

Teclea en Google -- arduino "manual de programacion" --

y tendrás un libro para empezar, léelo completo y practicando sobre la marcha. Es la única forma de aprender de una forma minimamente reglada y razonable.

Aprenderás en 10 días lo que de otro modo te costará un año.

Jopapa
www.jopapa.me

Hola,

MUCHAS GRACIAS A TODOS!!!!! Os respondo Sergegsx y Jopapa.

Cosas para Sergegsx:

sketch_aug11a:38: error: expected unqualified-id before '{' token

Me suena a chino, pero me pondre a estudiarlo.

Lo del "Void Loop" en un libro en ingles no lo pillo, ahora si, es una funcion, la funcion principal.

Y luego tu has hecho varias funciones, OK, que son los "void AlarmaNevera()"

Te iba a preguntar como metes un codigo, pero bueno buscando en las funciones lo he visto. #.

Muchas muchas gracias.

Para Jopapa:

Gracias por tus comentarios y tu tiempo.

int AlarmaDelay = 600000;

"Las variables int tiene un valor máximo entre 37767 y -37768" Como podria hacer el tiempo? tendria que añadir un reloj?

Es cierto la teoria va muy mal, libros tengo todos los que quieras:

Arduino starter kit manual-2010kaiser
Beginning Arduino Programming
Getting Started With Arduino 2ndEd
Arduino and Kinect Projects 2012 RETAiL eBOOk-rebOOk
Arduino A Quick Start Guide
Arduino Bots and Gadgets
Arduino Cookbook (este tiene muy buena pinta, y es muy intenso 700 paginas)
Arduino Internals
Arduino projects to save the world
Arduino Robotics (espero llegar algun dia dominarlo)
arduino_notebook_v1-1
Beginning Android ADK with Arduino (pufff debe ser increible con el movil)
Environmental Monitoring with Arduino
Practical Arduino Cool Projects for Open Source Hardware
Programming Home with Arduino and Android

Creo que son 14, todos en INGLES, he vivido en inglaterra, USA, pero mi ingles no es de matematicas o informatica.

"Me parece complicado (y con peligro de frustrarte) empezar un proyecto como este sin ninguna base de estudio y experimentación sencilla."

Lo de frustrante, pues lo seria si no tendria vuestra ayuda. Yo antes me metia mucho en dos foros: fotos y camaleones, gracias a ello me ayudaron en muchas cosas y gracias a mis conocimientos pude ayudar a mucha gente. Sin no exisitiese este foro, no me habria metido en esto.

Hago esto para entreterne. Todo esto se hace mecanicamente: un sensor magnetico que tenga posicion NC/NO lo venden en ebay por 4€, son los que usaria en este proyecto, un transformador de 12v, 4 leds y 4 resistencias. Lo unico que no se puede hacer y que es mas de electronica es el delay del timbre.

Frustrante es estar en paro, y no tener ni un chavo, y esto de arduino, es lo mas BBB para estar encerrado todo el dia en mi casa. Tenia muchas cosas ya en casa, y me he gastado 10€ de la placa china leonardo, 3€ de la sobre placa de expansionpara no dañar la principal en ebay y ahora el libro. Asi y tambien un timbre por 1,50€. Tengo leds, resistencias, claves, breadboar, y algo mas.

Gracias por lo del libro: " arduino "manual de programacion" --

Gracias gracias gracias.

Buenas noticias PARA TODOS en especial para mi:

He conseguido el "Manual de Programación Arduino Traducido y adaptado: José Manuel Ruiz Gutiérrez" 70 paginas. en pdf el que me indica Jopapa.

He comprado el libro que se me comento "ARDUINO. Curso práctico de formación ARDUINO. Curso práctico de formación" de Torrente Artero, Óscar. 564 paginas. en papel, el problema cuando ya que practicar un sketch hay que copiarlo a mano. Lo bueno hay cosas que se ven o entienden mejor en papel.

Os dejo ya y me pongo a leer, primero el corto en pdf.

Un saludo, David.

Hola.
Jopapa se refiere al tipo de variable que has dado a tiempo. Añade este enlace a tu lista de libros:
http://arduino.cc/es/Reference/HomePage
Si miras donde pone "Tipos de datos" verás que según lo que quieras guardar en la variable podrás declararla de maneras distintas.
Int, como te dijo, "solo" permite valores entre 37767 y -37768.
unsigned long, sin embargo: "haciendo que su rango sea de 0 a 4,294,967,295 "
http://arduino.cc/es/Reference/UnsignedLong
Que me corrijan si no, pero deberías usar esa para almacenar tiempos.

Y el otro consejo es que lleves cuidado con lo de los corchetes y los puntos y comas, que es una tontería que te fastidia todo el código. Mira bien dónde cierras y dónde abres, y lee los errores que te pone abajo, casi siempre son por eso.

Al menos me pasa a mí mucho, que vengo de python :slight_smile:

Muchas gracias por tu ayuda UndercoverNerd.

El campo "delay" lo he usado por lo que he visto hasta ahora. ¿Que he visto hasta ahora? pues lo maximo un semaforo con pulsador para peatones y me ha costado y me cuesta mucho las variables. Antes, pues lo del led y el delay deparpadeo, el S.O.S.

Sobre "unsigned long" lo he mirado, he puesto el skecth de ejemplo y he pulsado el monitor serial, ok y he visto como funciona, y mira por donde tambien he visto por primera vez la comunicacion de la leonardo con el ordenador, TX, TODO GRACIAS A TI. pero no lo pillo.

Pillo lo del Serial.print(palabra: "); el delay. Pero no pillo la aplicacion practica.

Contras (por no decir otra cosa), nueva informacion en el semaforo sale el termino "unsigned long" y explica:

unsigned long changeTime;

Here we have a new data type for a variable.Previously we have created integer data types, which can store a number between -32,768 and 32,767. This time we have created a data type of long, which can store a number from -2,147,483,648 to 2,147,483,647.

Osea pones esto al principio, debajo de los valores de los pines (perdonar mi paletismo tecnico y porfavor corregirme), y ya empieza a contar, pero como dirias que sonase la alarma a los 10min, o 5 min. Con el delay pones el valor, y punto, pero no puede ser mayor de 32,767.

int Alarma = 600000;//Sonara la alarma a los 10 minutos
unsigned long AlarmaTime;

Y luego debo poner una variable algo como esto:

void AlarmaCongelador()
{
int state = digitalRead(SensorCongeladorPin);
if (state == HIGH);
digitalWrite(CongeladorRojoPin, HIGH);
digitalWrite(CongeladorVerdePin, LOW);
delay(AlarmaTime); //Pasado 10 minutos suena la alarma, debe chequear sensor por si se ha cerrado puerta
digitalRead(SensorNeveraPin);
if (state == HIGH);
digitalWrite(AlarmaPin, HIGH);//AlarmaNerera();
}

Si si soy un impaciente, pero para que os hais una idea hice una foto de mi primera placa con el led parpadeando y fue el segundo programa que he hecho en mi vida, el primero fue un circulo en una pantaya de tv con un zx spectrum 48k, os haceis una idea de mi edad, de hecho la leonardo tiene la 2/3 de memoria, 32k, no? que fuerte.....

Bueno os dejo que estoy cansado.

Gracias por la ayuda y por las correcciones.

Saludos, David.

:wink:

A ver... creo que tienes un poco mezclados los conceptos, que es algo importante porque lo entenderás mejor:

Osea pones esto al principio, debajo de los valores de los pines

Eso se llama declarar una variable. Una variable es un trocito de memoria que el programa reserva para guardar datos, por tanto le tienes que decir qué datos vas a guardar ahí.
Si quieres guardar un entero, como has hecho para decirle los números de los pines, le dices que sea int. Si quieres que sea booleano, es decir, símplemente que guarde valores de 0 ó 1 (verdadero o falso) de dices boolean, si es un texto, string, etc etc. Aquí están todos los que podrás usar, del enlace que te puse:

Tipos de Datos:
boolean (booleano)
char (carácter)
byte
int (entero)
unsigned int (entero sin signo)
long (entero 32b)
unsigned long (entero 32b sin signo)
float (en coma flotante)
double (en coma flotante de 32b)
string (cadena de caracteres)
array (cadena)
void (vacío)

Con el delay pones el valor, y punto, pero no puede ser mayor de 32,767.

int Alarma = 600000;//Sonara la alarma a los 10 minutos
unsigned long AlarmaTime;

En tu código estás declarando otra variable debajo de Alarma, pero no le dices nada (al menos ahí) sin embargo Alarma sigue siendo entero. tan solo cambia el tipo de Alarma, de entero a unsigned long. Entonces almacenará datos de 0 a 4,294,967,295.

Pillo lo del Serial.print(palabra: "); el delay. Pero no pillo la aplicacion practica.

Esto aquí no tiene mucha utilidad, pero imagina que quieres ponerle una pantalla a tu alarma de nevera que se conecta por Serial a arduino.
Podrías decirle: Serial.print("puerta abierta") para ver si te la has dejado abierta.
O también imprimir una variable (que es la gracia de eso, no sólo imprimir palabras)
Serial.print(tiempoapertura) Suponiendo que esa variable almacenara el contador de tiempo que llevara abierta la puerta, verías por la pantalla cuánto lleva abierta.

De todos modos, yo (y todo el mundo) el Serial.print lo uso sobre todo para depurar el código y ver cuál es estado de las variables en todo momento, así sabes qué están marcando los sensores y si va funcionando todo bien.

Bueno, eso, ánimo.
Mi consejo es que te centres en algo, porque creo que te estás saturando viendo cosas y cosas y cosas y al final te vas a agobiar.
Céntrate con lo de la nevera que ya lo tienes casi y pregunta dudas concretas.

Bueno, es lo que yo haría.

Un saludo.

UndercoverNerd, gracias por todo.

Y en especial por esto "Céntrate con lo de la nevera que ya lo tienes casi".

Ya me he imprimido el manual de programacion, es un libro fundamental para tener impreso para consultar dudas y apuntar soluciones y explicaciones.

Ciertas cosas en papel y otras en digital.

:wink:

Por cierto este proyecto es una tonteria, pero mi idea es ir jugando con el para aprender a usar otras funciones com las que has citado, que me avise al movil, que si me avise por mail, etc etc.

Gracias.

Tanto sistema de monitorización en la nevera... Ya nos dirás qué guardas! :stuck_out_tongue:

"Tanto sistema de monitorización en la nevera... Ya nos dirás qué guardas! smiley-razz"

Gracias por tu interes.

Modifico y borro gran parte de este mensaje pues me perdia contando mi vida.

Mi padre es mayor y se deja la puerta del congelador abierto, luego aparte esto se puede adaptar a muchas cosas, puertas de tienda: si te han avisado una vez y estas atendiendo a un cliente, no hace falta que te avise hasta 2 minutos despues. puertas de personal de hoteles, restaurantes que te avise que se la han dejado abierta, pero que no suene hasta pasado un tiempo pues sale la gente a fumar, etc, pero que sepas que esta avierta.

Un saludo David.

Hola, estudiando los libros me he dado cuenta, estoy cometiendo muchos errores.

MIS ERRORES.

Como me habeis comentado voy en 5ª cuando deberia ir en 1ª marcha.

Me estoy metiendo con la tonteria del "delay" y el "float" en muchas variables y muchos problemas.

La idea la tengo con lo cual no voy a complicar mas.

Pasos que voy ha hacer. Hasta que no consiga que funcione no ire al siguiente paso.

1º hacer que funcione un led con lo de puerta abierta y puerta cerrada, meto dos outputs y un input.
2º meter otro output (sera la alarma)
3º conseguir el puñetero retardo.
4º cuando consiga esto metere el otro area, que sera duplicar todo.

Un saludo, David.