ayudar a un novato en apuros para arrancar

12 Sep 2011
355
badalona
Provincia
barcelona
hola comapñeros tengo un pequeño problemilla soy muy , muy novato me gustaria que me ayudarais a arrancar esto por mis pececitos y mi mujer que esta isterica de ver todos los cables por medio jaajajjaja
me esplico compre a un compañero el arduino mega 2560 con s placa de 8 reles sus bollas de llenado su reloj y su botonera pero estava montada en una caja de plastico y yo todo chulo lo desmonte para montarlo en mi caja de mando que tengo en mi acuario pues bien quiero reprogramarlo otra vez pero no tengo narices cargo las librerias le doy a verificar y compilar y me dice muy educadamente en ingles


sketch_jun15a.cpp:8:21: error: OneWire.h: No such file or directory
sketch_jun15a.cpp:9:31: error: DallasTemperature.h: No such file or directory
salva_reef:91: error: 'OneWire' does not name a type
salva_reef:92: error: 'DallasTemperature' does not name a type
salva_reef:93: error: 'DeviceAddress' does not name a type
sketch_jun15a.cpp: In function 'void IniciarTemperaturas()':
salva_reef:334: error: 'sensors' was not declared in this scope
salva_reef:339: error: 'TempMarino' was not declared in this scope
salva_reef:340: error: 'TempPantallaLeds' was not declared in this scope
sketch_jun15a.cpp: In function 'void MirarTemperaturas()':
salva_reef:358: error: 'sensors' was not declared in this scope
salva_reef:362: error: 'TempMarino' was not declared in this scope
salva_reef:363: error: 'TempPantallaLeds' was not declared in this scope
que leches tengo que hacer para que en ingles tambien me diga que ok
jajjajajajaja
 

jmcadsl

Miembro Honorífico
17 Ene 2010
1.023
España
Provincia
Madrid
Buenas isoriano....
Vamos a ver, creo que tienes un GRAN problema jejeje, y por ello necesitas de una GRAN solución.....leer muuuucho.

Hacer funcionar un controlador de acuario usando un Arduino no es una cosa que se haga en "un ratito", hay que saber que se esta haciendo y muy importante conocer como funcionan los distintos componentes y porqué.

Te aconsejo que le dediques un RATO a leerte el post principal del subforo de Arduino, se que son muuchas páginas, pero así te harás a la idea de que a TODOS nos ha costado mucho trabajo conocer nuestros controladores y que cada uno es un mundo.

Personalmente el segundo paso que daría sería ir conectado componentes uno a uno e ir verificando que funcionan correctamente e irlos programando a tu gusto.

Por ejemplo la pantalla LCD primero y te haces un programita que muestra el nombre de tu acuario por ejemplo.
Cuando tengas esto pues conectas el reloj (si lo tienes) y lo pones en hora y lo muestras en el LCD y así poco a poco entendiendo el porque de las cosas.

Aunque parezca un tostón, esto es así no hay otra forma porque sino cualquier día quieres modificar algo o algo falla y no vas a saber por donde cogerlo.

Ánimo y aquí estamos para ayudarte, pero el primer paso debes darlo tú.

Salu2
 
12 Sep 2011
355
badalona
Provincia
barcelona
muchas gracias por esa respuesta tan sincera por eso tengo 2 arduinos jajjaa el problema es que desmonte todo el sistema de mi acuario para llegar y acoplar este y el segundo arduino para poder jugar con el y aprender poco a poco ya que soy una persona que no paro
pero me preocupa mas mi acuario y me gustaria con ayuda de los compañeros ponerlo en marcha lo antes posible jajajaja
a lo mejor pensareis que chico tan espavilado que se lo demos todo hecho pero la verdad que no es asi
saludos y espero que entre todos me saqueis de este apurillo
 

jmcadsl

Miembro Honorífico
17 Ene 2010
1.023
España
Provincia
Madrid
No quieras empezar la casa por el tejado....

A ver....
sketch_jun15a.cpp:8:21: error: OneWire.h: No such file or directory
sketch_jun15a.cpp:9:31: error: DallasTemperature.h: No such file or directory
salva_reef:91: error: 'OneWire' does not name a type
salva_reef:92: error: 'DallasTemperature' does not name a type

Todo esto te lo dice porque no has copiado las librerías que estas utilizando en el programa a la carpeta de librerías del IDE de Arduino.

Y el resto:
salva_reef:334: error: 'sensors' was not declared in this scope
salva_reef:339: error: 'TempMarino' was not declared in this scope
salva_reef:340: error: 'TempPantallaLeds' was not declared in this scope
sketch_jun15a.cpp: In function 'void MirarTemperaturas()':
salva_reef:358: error: 'sensors' was not declared in this scope
salva_reef:362: error: 'TempMarino' was not declared in this scope
salva_reef:363: error: 'TempPantallaLeds' was not declared in this scope

Es porque estas utilizando en el programa variables que no has declarado al principio del programa.

¿De dónde has sacado el código? Sigo pensando que va a ser tarea imposible si no te pones "las pilas" y lees...

Salu2
 
12 Sep 2011
355
badalona
Provincia
barcelona
hpim1412.jpg
hola eso me los paso el que me vendio el primer arduino lo unico que me gustaria pues empezar por algo sencillo
temperatura
y puesta en marcha de las luces lo demas pues es como dices leer y probar y mucho preguntar en el foro
los materiales
arduino mega2560 rev 3
placa de reles 8 en total
y 2 sensores
la pantalla la que has visto en la foto
pantalla paralelo jajjaa ya lo se que no sera tarea facil pero sunpongo que podre conseguir algun codigo que pueda cargar y solo variar las horas y poner las patillas de mi pantalla
no se quein me matara antes si mi mujer o vosotros jajaja
y perdona por las molestias que te estoy ocasionando
 
12 Sep 2011
355
badalona
Provincia
barcelona
mira este es el codigo original que me dio el compañero que me vendio el arduino
//sensores de temperatura
#include <Wire.h> // Esta es la libreria de comunicacion I2C
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h> // Librería para poder escribir en la eprom del arduino
#include "RelojDS1307.h" // Libreria del Reloj
#include <LCD12864R.h>

//pantalla
#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] ) //tamaño de texto a enviar a pantalla

#define PIN_P_TEMPER 45 //PIN 45 sensor de temperatura
#define PIN_D_RELE_CALENTADOR 22
#define PIN_D_RELE_LUCES 24
#define PIN_D_RELE_OSMOSIS 26
#define PIN_D_RELE_LLENADO 28
#define PIN_D_KEY_MENU 30
#define PIN_D_KEY_OK 32
#define PIN_D_KEY_ARRIBA 34
#define PIN_D_KEY_ABAJO 36

#define MARGEN_TEMPERATURA 0.3

#define temp_inf_agua 25
#define temp_sup_agua 26
#define temp_sup_pantalla 80

///////////////
//ILUMINACION POR OSCAR 1.0//
///////////////
byte ledblanco = 9;//luz blanca
byte ledazul=10; // luz azul
byte backlight = 8;//pin de la retroiluminación

//////////////
//Potencias
//////////////
/*
///por OSCAR, krop en wwww.todomarino.com/////
He pensado que haya una hora de mediodia, y una amplitud en horas
de manera que, por ejemplo si son 6 horas la amplitud y las 17 horas
el medio dia entonces empieze a amanecer desde las 11 (17-6), poco a poco
hasta el maximo de luz. He creado otra contante que se puede cambiar
hsubida (horas de subida), que son las horas que le tiene que costar
alcanzar el maximo de luz. En la funcion hace calculos para saber
que porcentaje de tiempo de subida y bajada ha transcurrido, por eso
todos los valores son float.
En cada interaccion calcula un pwmteorico, pwm que deberia ser, que pasado
el tiempo de subida es mayor que pwmmax, contante que ponemos como
maximo valor de pwm, en este caso pwm es simplemente pwmmax, o sea,
si calcula pwmteorico de 400, lo deja en pwmmax como mucho 255
Pasado el medio dia a pwmteorico le sumo pwmluna, que sera lo que
definamos somo pwm para luz de luna. Despues, en tiempo luna pwm es
ese valor.
Ademas con esta funcion si la luna empeiza antes de las 00 horas
y termina despues no hay ningun problema. ya que todos los calculos
los hago pasando las horas establecidadas a minutos.

Yo tengo todo en un solo canal por eso no diferencio entre canal
azul y blanco, dentro de poco los separare

Por otra parte si reiniciamos el arduino siempre pondra la luz que
corresponda al minuto concreto del dia en que estamos.
*/

float mmediodia; //calcula el minuto del medio dia ejemplo 17*60
float mluna; //minutos que dura la fase de luna
float mamplitud; //minutos que duara "amplitud"
float msubida; //minutos que cuesta pasar de pwm=0 hasta pwm=pwmmax
float mfin; //minuto a partir del cual solo queda luz luna
float minicio; //minuto del dia en el que amanece
float pwmteorico = 0; //pwm teorico que calcula en cada minuto, puede ser mayor que 255
float pwm=0; //variable que en la que guardara pwm en cada minuto
float mactual=0; //variable en la que guardara en minuto actual del dia


typedef struct Configuracio_struct
{
float TermoAcuario; //Temperatura Acuario
boolean Rellenador; //Valor de trabajo de rellenador 0 -> no rellena 1-> rellena (por defecto)
boolean Luces; //Valor de trabajo de las luces 0 -> manual con los valores que le damos 1->automático control arduino (por defecto)
int blancos; //valor de luz blanca en caso de luz manual 0-255
int azules; //valor de luz azul en caso de luz manual 0-255
float hmediodia; // hora que establecemos como medio dia
float hluna; // numero de horas de luna
float hamplitud; //horas de amplitud del dia, hmediodia-hamplitud es el momento de amanecer
float pwmmax; //pwm maximo para los canales de luz
float pwmluna; //pwm que establezcamos para periodo luna
float corrector_rampa;
} Stru_Configuracion;

OneWire oneWire( PIN_P_TEMPER );
DallasTemperature sensors(oneWire);
DeviceAddress TempMarino,TempPantallaLeds; // Direcciones de los sensores de temperatura
RelojDS1307Class Reloj; //Declaración de la variable del Rejoj
Stru_Configuracion CFG; //Variable de la configuración
long Old_Millis = 0;
long Inactividad = 20000; //Tiempo que estamos sin tocar la botonera

/*
static const int D0 = 23;
static const int D1 = 25;
static const int D2 = 27; PINES DIGITALES ASIGNADOS A LCD
static const int D3 = 29;
static const int D4 = 31;
static const int D5 = 33;
static const int D6 = 35;
static const int D7 = 37;
static const int RS = 39;
static const int RW = 41;
static const int EN = 43; */

int ledcontrol = 13; // Led control y avisos
int Srelleno = 7; // PIN de entrada de control de boya de nivel agua para relleno ENTRADA ANALOGICA (boya acuario)
int linea_up=0; //variación de texto en línea 1

void setup()
{
pinMode(PIN_P_TEMPER, INPUT );
pinMode( PIN_D_KEY_MENU, INPUT );
pinMode( PIN_D_KEY_OK, INPUT );
pinMode( PIN_D_KEY_ARRIBA, INPUT );
pinMode( PIN_D_KEY_ABAJO, INPUT );
pinMode( PIN_D_RELE_CALENTADOR, OUTPUT );
pinMode( PIN_D_RELE_LUCES, OUTPUT );
pinMode( PIN_D_RELE_LLENADO, OUTPUT );

byte n;
for(n=22; n < 29; n = n + 2)
{
digitalWrite( n, HIGH); //LOGICA NEGATIVA DE PLACA DE RELES HIGH= desconectados
}

Lcdini();
Brillo_pantalla (25);
PrintPantMain();
Wire.begin();
Serial.begin(9600);

CFG.TermoAcuario = 25.5;
CFG.Rellenador =1;
CFG.Luces=1;
CFG.blancos=0;
CFG.azules=25;
CFG.hmediodia= 17; // hora que establecemos como medio dia
CFG.hluna=2; // numero de horas de luna
CFG.hamplitud= 5; //horas de amplitud del dia, hmediodia-hamplitud es el momento de amanecer
CFG.pwmmax = 255; //pwm maximo para los canales de luz
CFG.pwmluna=25; //pwm que establezcamos para periodo luna
CFG.corrector_rampa=0.75;
//inicializamos luces apagándolas
analogWrite(ledblanco,0);
analogWrite(ledazul,0);
carga_luz();

//SalvarConfig();
LeerConfig();
//Reloj.SetDateTime( 1, 4, 12, 9, 23, 0 ); // Configuramos horario ***OJO, SÓLO LA PRIMERA VEZ SINO CADA REINICIO LO VUELVE A PONER
IniciarTemperaturas(); //Iniciamos los sensores de temperatura.

}

void loop()
{
if ( (millis() - Old_Millis) > 7000) // 7 segundos
{
Old_Millis = millis();

// LLamamos a función para mostrar fecha y hora y alternativament nombre del proyecto
switch (linea_up)
{
case 0:
LCDA.DisplayString(0,0, Reloj.DateTime() , 16);
linea_up=1;
break;

case 1:
LCDA.DisplayString(0,0, " Salva REEF ", 16);
linea_up=0;
break;
}
MirarTemperaturas(); //Miramos la temperaturas
if (CFG.Rellenador==1)
{
Niveles();
}
if (CFG.Luces==1)
{
luz();
}
else
{
analogWrite(ledazul,CFG.azules);
analogWrite(ledblanco,CFG.blancos);
}
}
Teclado();

}


/////////////////////////
//FUNCIONES SECUNDARIAS//
/////////////////////////
void Brillo_pantalla (int brillo) //le pasamos el porcentaje de brillo de la pantalla
{
brillo= map(brillo,0,100,0,255); //ajustamos los valores de brillo 0-100 % en los valores pwm 0-255
Serial.println (brillo);
analogWrite(8,brillo );
}

// Pausa 3 segundos
void p ()
{
delay (3000);
}
// Led control on
void ledon()
{
digitalWrite(ledcontrol, HIGH);
}

// Led control off
void ledoff()
{
digitalWrite(ledcontrol, LOW);
}
//Iniciar LCD
void Lcdini ()
{
LCDA.Initialise(); //Iniciamos la pantalla
LCDA.CLEAR();//Limpiamos la pantalla
}
///////////////////////////////////////////////////////////////
//
// IMPRIMIR LINEA 2 PANTALLA ->POTENCIAS LED
//
///////////////////////////////////////////////////////////////
void imprimir_potencia_led()
{
float pmax;
char data[4]=" "; // variable para convertir float a char
char texto[17]=" "; // array donde concatenamos para imprimir TA:25.0 TP:28.8

strcpy(texto,"Pm:");
pmax= map(CFG.pwmmax,0,255,0,100);
dtostrf(pmax, 3, 0, data ); //Convertimos el valor de la temperatura a texto (sin decimales)
strcat(texto,data);
strcat (texto,"% ");
strcat (texto, " Pa:"); //iniciamos array
pwm= map(pwm,0,255,0,100);
dtostrf( pwm, 3, 0, data ); //Convertimos el valor de la temperatura a texto (sin decimales)

strcat (texto, data); //concatenamos
strcat (texto,"%");
// Serial.println(AR_SIZE(texto));
LCDA.DisplayString(2,0, texto, 16); //imprimimos en pantalla...
}
///////////////////////////////////////////////////////////////
//
// GRAVA LA CONFIGURACION EN LA EPROM
//
///////////////////////////////////////////////////////////////
void SalvarConfig()
{
uint8_t Valor[sizeof(CFG)];

memcpy( &Valor, &CFG, sizeof(CFG));

for (int i = 0; i <= sizeof(Valor); i++)
EEPROM.write(i, Valor);
}

///////////////////////////////////////////////////////////////
//
// LEE LA CONFIGURACION DE LA EPROM
//
///////////////////////////////////////////////////////////////
void LeerConfig()
{
uint8_t Valor[sizeof(CFG)];

for (int i = 0; i <= sizeof(CFG); i++)
Valor = EEPROM.read(i);

memcpy( &CFG, &Valor, sizeof(CFG));
}

///////////////////////////////////////////////////////////////
//
// PINTA UN MENSAJE EN EL PIE DE LA PANTALLA
//
///////////////////////////////////////////////////////////////
void MsgPie( char * msg, int longitud)
{
LCDA.DisplayString(3,0, msg, longitud); // //imprimimos pie de pantalla...
}

///////////////////////////////////////////////////////////////
//
// ACTIVA O DESACTIVA UN RELE (logica negativa del relé)
///////////////////////////////////////////////////////////////
void SetRele( int Pin, boolean Estado ) //queremos ponerlo en high
{
digitalWrite( Pin, !Estado ); //realmente enviamos un low
}

///////////////////////////////////////////////////////////////
//
// CARGA PARÁMETROS DE LUZ A PARTIR DE VALORES PREDETERMINADOS
///////////////////////////////////////////////////////////////
void carga_luz() //queremos ponerlo en high
{
mmediodia = CFG.hmediodia*60; //calcula el minuto del medio dia ejemplo 17*60
mluna = CFG.hluna * 60; //minutos que dura la fase de luna
mamplitud = CFG.hamplitud*60; //minutos que duara "amplitud"
msubida = mamplitud * CFG.corrector_rampa; //minutos que cuesta pasar de pwm=0 hasta pwm=pwmmax
mfin = mmediodia + mamplitud; //minuto a partir del cual solo queda luz luna
minicio = mmediodia - mamplitud; //minuto del dia en el que amanece
}


//////////////////////////
// FUNCIONES PRINCIPALES//
//////////////////////////

///////////////////////////////////////////////////////////////
//
// INICIAR LOS SENSORES DE TEMPERATURA Y ALARMAS
//
///////////////////////////////////////////////////////////////
void IniciarTemperaturas()
{
//Iniciamos el controlador del controlador/s DS18B20
sensors.begin();
//Compruebo que estén todos los sensores.
//Cuidado, ya que al llamar a “sensors.getAddress()â€, lo que hacemos es definir que
//variable es cada sensor, por ejemplo definimos que el sensor Nº0 es DepoTermo.
if (sensors.getDeviceCount() < 2) Serial.println( "Faltan sensores de temperatura");
if (!sensors.getAddress(TempMarino, 0)) Serial.println("Falta el sensores de temperatura del agua Marino");
if (!sensors.getAddress(TempPantallaLeds, 1)) Serial.println("Falta el sensores de temperatura pantalla leds");
}


///////////////////////////////////////////////////////////////
//
// MIRAR LAS TEMPERATURA Y PINTARLAS EN LA PANTALLA
//
///////////////////////////////////////////////////////////////
void MirarTemperaturas()
{
float TemperaturaAcuario, TemperaturaPantalla;
char data[5]=""; // variable para convertir float a char
char texto[17]=""; // array donde concatenamos para imprimir TA:25.0 TP:28.8


//Llamamos a la función requestTemperatures() de nuestro controlador de sensores
//para que se prepare a nuestra llamada de lectura.
sensors.requestTemperatures();

//llamamos a getTempC() pasándole la variable del sensor que queremos leer
// y esta función nos devolverá la temperatura de el sensor llamado.
TemperaturaAcuario = sensors.getTempC( TempMarino ); // ACUARIO
TemperaturaPantalla = sensors.getTempC( TempPantallaLeds ); // ACUARIO

strcpy (texto, "Ta:"); //iniciamos array
dtostrf( TemperaturaAcuario, 3, 1, data ); //Convertimos el valor de la temperatura a texto con dos decimales.
strcat (texto, data); //concatenamos
strcat (texto, " Tp:"); //concatenamos
dtostrf( TemperaturaPantalla, 3, 1, data ); //Convertimos el valor de la temperatura a texto con dos decimales.
strcat (texto, data); //concatenamos

LCDA.DisplayString(1,0, texto, 16); //imprimimos en pantalla...

//A continuación comprobaremos si se a activado alguna alarma de temperatura en nuestros sensores
if (sensors.getTempC( TempMarino ) < (CFG.TermoAcuario-MARGEN_TEMPERATURA)) //&& digitalRead(PIN_D_RELE_CALENTADOR))
SetRele(PIN_D_RELE_CALENTADOR, HIGH );
if (sensors.getTempC( TempMarino ) > (CFG.TermoAcuario+MARGEN_TEMPERATURA)) //&& (!digitalRead(PIN_D_RELE_CALENTADOR)))
SetRele(PIN_D_RELE_CALENTADOR, LOW );

}

///////////////////////////////////////////////////////////////
//
// Control BOYA de nivel de agua
///////////////////////////////////////////////////////////////
void Niveles()
{

int Vsrelleno = 0;//Valor sensor relleno


Vsrelleno = analogRead (Srelleno);//Si nivel de acuario es bajo activa bomba relleno
if (Vsrelleno >1000)
{
p(); //PAUSA 3 SEG
Vsrelleno = analogRead (Srelleno);
if (Vsrelleno>1000)//COMPROBAMOS 2 VECES QUE REALMENTE ESTE LA BOYA ACTIVA
{
ledon();
Brillo_pantalla (80);
MsgPie("Rellenando agua ",16);
SetRele (PIN_D_RELE_LLENADO, HIGH);
p(); // Rellenando durente 3 segundos
SetRele (PIN_D_RELE_LLENADO, LOW);// APAGAMOS BOMBA RELLENO
Vsrelleno = 0;
ledoff();
MsgPie( " Sistema OK ", 16 );
Brillo_pantalla (25);
}
}
else
{
SetRele (PIN_D_RELE_LLENADO, LOW);// APAGAMOS BOMBA RELLENO
}
}

void luz ()
{
int second, minute, hour, dayOfWeek, dayOfMonth, month, year;

Reloj.GetDateTime(dayOfMonth,month, year, hour, minute,second); //Miramos la hora

pwmteorico=0; //establece pwmteorico a 0
mactual = hour *60 + minute; //calcula el minuto actual

//si es despues de amanecer y antes de medio dia
if (mactual > minicio && mactual <= mmediodia)
{ //calcula la proporcion de minutos subbida consumida
pwmteorico=(mactual-minicio)/msubida*CFG.pwmmax; //y lo multiplica por pwmmax para calcula pwmteorico que puede ser mayor de 255
//si en algun momento hemos dejado pwmteorico por encima de pwmmax deja pwm con el la constante que hemos dejado como pwmmax y si no con el que ha calculado
if(pwmteorico>=CFG.pwmmax)
{
pwm = CFG.pwmmax;
}
else
{
pwm=pwmteorico;
}
analogWrite(ledblanco,pwm);
analogWrite(ledazul,pwm);
}
//si es despues de medio dia y antes de anochecer
if (mactual>mmediodia && mactual <= mfin)
{ //calcula la proporcion de minutos ha bajado hasta anochcer consumida
// original pwmteorico=((mfin-mactual)/msubida*pwmmax)+pwmluna; //y lo multiplica por pwmmax para calcula pwmteorico que puede ser mayor de 255
pwmteorico=(((mfin-mactual)/msubida)*CFG.pwmmax); //y lo multiplica por pwmmax para calcula pwmteorico que puede ser mayor de 255
//si en algun momento hemos dejado pwmteorico por encima de pwmmax deja pwm con el la constante que hemos dejado como pwmmax y si no con el que ha calculado
if(pwmteorico>=CFG.pwmmax)
{
pwm = CFG.pwmmax;
}
else
{
pwm=pwmteorico;
}
analogWrite(ledblanco,pwm);
analogWrite(ledazul,pwm);

}
// si estamos en los minutos de luz de luna deja pwm con el valor que hemos establecido para pwmluna
if(mactual > mfin && mactual <= (mfin + mluna) )
{
analogWrite(ledblanco,0);
analogWrite(ledazul,CFG.pwmluna);
pwm=CFG.pwmluna;
}
/*if (mactual>(mfin+mluna))
{
analogWrite(ledblanco,0);
analogWrite(ledazul,0);
pwm=0;
} */
if (mactual+1440 <= (mfin+mluna))
{
analogWrite(ledblanco,0);
analogWrite(ledazul,CFG.pwmluna);
pwm=CFG.pwmluna;
}
/* if (mactual+1440 > (mfin+mluna))
{
analogWrite(ledblanco,0);
analogWrite(ledazul,0);
pwm=0;
}*/

imprimir_potencia_led();

}

///////////////////////////////////////////////////////////////
//
// TECLADO PRINCIPAL Y DE CONFIGURACION
//
///////////////////////////////////////////////////////////////
void Teclado()
{
int Index;
boolean Salir = false;
if (digitalRead(PIN_D_KEY_MENU)) //Si hemos pulsado el botón OK entramos.
{
PrintPantConfig(); // Pintamos la pantalla del menú
Index = 0;
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
delay(1000);
Inactividad = millis();
//A continuación nos quedamos a la espera de que pulsemos algun boton.
while((!digitalRead(PIN_D_KEY_MENU)) && (!Salir))
{
if (digitalRead(PIN_D_KEY_ABAJO)) // Nos movemos para abajo
{
Inactividad = millis();
LCDA.DisplayString(Index,0," ",1); // Borra marca de en que posición del menú estamos
if (Index == 3) Index = 0; else ++Index;
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
delay(500);
}
if (digitalRead(PIN_D_KEY_ARRIBA)) //Nos movemos para arriba.
{
Inactividad = millis();
LCDA.DisplayString(Index,0," ",1); // Borra marca de en que posición del menú estamos
if (Index == 0) Index = 3; else --Index;
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
delay(500);
}
if (digitalRead(PIN_D_KEY_OK)) //Ejecutamos la opción del menu seleccionada.
{
Inactividad = millis();
switch (Index)
{
case 0:
PrintPantRellenador();
PrintPantConfig(); // Pintamos la pantalla del menú
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
break;

case 1:
//PrintConfReloj(); //Función para configurar el reloj
PrintPantConfig();
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
break;
case 2:
PrintPantLuces_auto(); //Función para configurar las luces manual o automático
PrintPantConfig();
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
break;
case 3:
PrintPantLuces(); //Función para configurar el horario de las luces
PrintPantConfig();
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
break;
}
}
if ( EnInactividad() )
{
Salir = true;
}
}
PrintPantMain();
}
}

///////////////////////////////////////////////////////////////
//
// PARA SABER SI NOS OLVIDAMOS SALIR DE UN MENU
//
///////////////////////////////////////////////////////////////
boolean EnInactividad()
{
if ( (millis() - Inactividad) > 30000) // 30 segundos
return true;
else
return false;
}

///////////////////////////////////////////////////////////////
//
// PINTA PANTALLA DE CONFIGURACION
//
///////////////////////////////////////////////////////////////
void PrintPantConfig()
{
Lcdini();

LCDA.DisplayString(0,0, " RELLENADOR ", 16);
LCDA.DisplayString(1,0, " FECHA Y HORA ", 16);
LCDA.DisplayString(2,0, "LUZ AUTOM/MANUAL", 16);
LCDA.DisplayString(3,0, " LUCES ", 16);
}

///////////////////////////////////////////////////////////////
//
// PINTA PANTALLA DE RELLENADOR
//
///////////////////////////////////////////////////////////////
void PrintPantRellenador()
{
int Index;
boolean Salir = false;
Lcdini();

LCDA.DisplayString(0,0, "CONF. RELLENADOR", 16);
LCDA.DisplayString(1,0, " ON ", 16);
LCDA.DisplayString(2,0, " OFF ", 16);
if (CFG.Rellenador == 0)
{
Index=2;

}
else
{
Index=1;
}
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
Inactividad = millis();
while((!digitalRead(PIN_D_KEY_MENU)) && (!Salir))
{
if (digitalRead(PIN_D_KEY_ABAJO)) // Nos movemos para abajo
{
Inactividad = millis();
LCDA.DisplayString(Index,0," ",1); // Borra marca de en que posición del menú estamos
if (Index == 2) Index = 1; else ++Index;
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
delay(500);
}
if (digitalRead(PIN_D_KEY_ARRIBA)) //Nos movemos para arriba.
{
Inactividad = millis();
LCDA.DisplayString(Index,0," ",1); // Borra marca de en que posición del menú estamos
if (Index == 1) Index = 2; else --Index;
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
delay(500);
}
if (digitalRead(PIN_D_KEY_OK)) //Ejecutamos la opción del menu seleccionada.
{
Inactividad = millis();
switch (Index)
{
case 1:
CFG.Rellenador=1;
break;

case 2:
CFG.Rellenador=0;
break;
}
LCDA.DisplayString(3,0, "GRABANDO CONFIG.", 16);
p();
SalvarConfig();
Salir=true;
}
if ( EnInactividad() )
{
Salir = true;
}
}
}

///////////////////////////////////////////////////////////////
//
// PINTA PANTALLA DE LUCES
//
///////////////////////////////////////////////////////////////
void PrintPantLuces_auto()
{
int Index;
boolean Salir = false;
Lcdini();

LCDA.DisplayString(0,0, " CONF. LUCES ", 16);
LCDA.DisplayString(1,0, " MANUAL ", 16);
LCDA.DisplayString(2,0, " CONTROL ARDUINO", 16);
if (CFG.Luces==0)
{
Index=1;
}
else
{
Index=2;
}
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
Inactividad = millis();
while((!digitalRead(PIN_D_KEY_MENU)) && (!Salir))
{
if (digitalRead(PIN_D_KEY_ABAJO)) // Nos movemos para abajo
{
Inactividad = millis();
LCDA.DisplayString(Index,0," ",1); // Borra marca de en que posición del menú estamos
if (Index == 2) Index = 1; else ++Index;
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
delay(500);
}
if (digitalRead(PIN_D_KEY_ARRIBA)) //Nos movemos para arriba.
{
Inactividad = millis();
LCDA.DisplayString(Index,0," ",1); // Borra marca de en que posición del menú estamos
if (Index == 1) Index = 2; else --Index;
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
delay(500);
}
if (digitalRead(PIN_D_KEY_OK)) //Ejecutamos la opción del menu seleccionada.
{
Inactividad = millis();
switch (Index)
{
case 1:
CFG.Luces=0;
break;

case 2:
CFG.Luces=1;
break;
}
LCDA.DisplayString(3,0, "GRABANDO CONFIG.", 16);
p();
SalvarConfig();
Salir=true;
}
if ( EnInactividad() )
{
Salir = true;
}
}
}

///////////////////////////////////////////////////////////////
//
// PINTA PANTALLA DE LUCES
//
///////////////////////////////////////////////////////////////
void PrintPantLuces()
{
int Index;
boolean Salir = false;
Lcdini();

LCDA.DisplayString(0,0, " CONF. LUCES ", 16);
LCDA.DisplayString(1,0, " PARAM. MANUAL ", 16);
LCDA.DisplayString(2,0, " PARAM. DIMMEO ", 16);
Index=1;
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
Inactividad = millis();
while((!digitalRead(PIN_D_KEY_MENU)) && (!Salir))
{
if (digitalRead(PIN_D_KEY_ABAJO)) // Nos movemos para abajo
{
Inactividad = millis();
LCDA.DisplayString(Index,0," ",1); // Borra marca de en que posición del menú estamos
if (Index == 2) Index = 1; else ++Index;
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
delay(500);
}
if (digitalRead(PIN_D_KEY_ARRIBA)) //Nos movemos para arriba.
{
Inactividad = millis();
LCDA.DisplayString(Index,0," ",1); // Borra marca de en que posición del menú estamos
if (Index == 1) Index = 2; else --Index;
LCDA.DisplayString(Index,0,">",1); // Marca de en que posición del menú estamos
delay(500);
}
if (digitalRead(PIN_D_KEY_OK)) //Ejecutamos la opción del menu seleccionada.
{
Inactividad = millis();
switch (Index)
{
case 1:

break;

case 2:

break;
}
/*LCDA.DisplayString(3,0, "GRABANDO CONFIG.", 16);
p();
SalvarConfig();*/
Salir=true;
}
if ( EnInactividad() )
{
Salir = true;
}
}
}

///////////////////////////////////////////////////////////////
//
// PINTA LA PANTALLA PRINCIPAL
//
///////////////////////////////////////////////////////////////
void PrintPantMain()
{
Lcdini();
LCDA.DisplayString(0,0, " Salva REEF ", 16);
LCDA.DisplayString(1,0, "Ta: Tp: ", 16);
LCDA.DisplayString(2,0, "Pm: Pa: ", 16);
LCDA.DisplayString(3,0, " Sistema OK ", 16);

}
y estos son los errores que me da en algunos habla de lo que me has comentado de declarado como hago lo declarar

sketch_jun16a.cpp:4:21: error: OneWire.h: No such file or directory
sketch_jun16a.cpp:5:31: error: DallasTemperature.h: No such file or directory
salva_reef:91: error: 'OneWire' does not name a type
salva_reef:92: error: 'DallasTemperature' does not name a type
salva_reef:93: error: 'DeviceAddress' does not name a type
sketch_jun16a.cpp: In function 'void IniciarTemperaturas()':
salva_reef:334: error: 'sensors' was not declared in this scope
salva_reef:339: error: 'TempMarino' was not declared in this scope
salva_reef:340: error: 'TempPantallaLeds' was not declared in this scope
sketch_jun16a.cpp: In function 'void MirarTemperaturas()':
salva_reef:358: error: 'sensors' was not declared in this scope
salva_reef:362: error: 'TempMarino' was not declared in this scope
salva_reef:363: error: 'TempPantallaLeds' was not declared in this scope
joder en que follo me e metido esto es cuando tenia 22 añitos y me dio a aprender a programar en e mi ordenador xpentrun jajaaja
y como sinpre me gusto la robotica en cuanto consiga sulocionar el problema me pongo a ello pero ayudarme a hacer que funcione
porfa
 
Arriba