MaEVAReef - Controlador de acuario

Tema en 'Mi Controlador' iniciado por jmerino, 15 Jun 2011.

  1. Armandozzz

    Armandozzz

    Mensajes:
    66
    Registrado:
    19 Ago 2011
    Ubicación:
    castelldelfll
    jeje no pasa nada!
    de todas formas! buen trabajo!!!!
    :yb677[1]:
     
  2. CDistri

    CDistri

    Mensajes:
    173
    Registrado:
    4 Sep 2008
    Ubicación:
    España
    Hola

    Yo tanbien tego arduino funcionando en el acuario pero , alguien ha conseguido medir la conductividad salinidad con el arduino????

    A ver si alguien lo ha conseguido puede decirnos como

    Buenos trabajos

    Saludos
     
  3. jmerino

    jmerino

    Mensajes:
    445
    Registrado:
    12 Sep 2010
    Ubicación:
    España
    Aqui lo tienes CDistri, no lo he probado, pero siempre estoy tentado a pedirlo.
    http://atlas-scientific.com/
    Los Stamps funcionan por puerto serie, por lo que si tienes un UNO y la pantalla serie necesitaras el DEMUX, si tienes un MEGA sin problemas
     
  4. zifu01

    zifu01

    Mensajes:
    21
    Registrado:
    12 Dic 2009
    Ubicación:
    españa
    jmerino: una pregunta e pedido la lcd del enlaze que pusiste en ebay y ya la tengo aqui me trae 4 cables y tu por lo que pones usas solo uno que lo pones en tx que pones los dos cables de datos de la pantalla en la misma conexion? muchs gracias
     
  5. jmerino

    jmerino

    Mensajes:
    445
    Registrado:
    12 Sep 2010
    Ubicación:
    España
    Esa pantalla no es la que tengo yo. Yo tengo una serial y esa que puse es i2c.
    Es sencilla de conectar. Positivo, negativo, sda y scl. Tienes la librería en la misma pagina de eBay y como hacerla funcionar.
    Yo tengo una pedida de 2lineas pero igual. Si quieres cuando me llegue te digo a que pines la tienes que conectar.
     
  6. zifu01

    zifu01

    Mensajes:
    21
    Registrado:
    12 Dic 2009
    Ubicación:
    españa
    ok yo la e conseguido echar a funcionar con los ejemplos que trae la libreria pero claro al poner tu codigo en mi arduino al cojer la salida tx pues no aparece nada ya que la señal no la coje de los pines que normalmente la tengo coenctada que es analogico 4 y 5 que es donde tienes que conectarlo pa los ejemplos y hay en este caso esta el reloj.
     
  7. jmerino

    jmerino

    Mensajes:
    445
    Registrado:
    12 Sep 2010
    Ubicación:
    España
    En ese conector, si no me equivoco, puedes conectar mas de un dispositivo en serie con diferente dirección ambiento por lo que con unas pequeñas modificaciones del código deberías de poder hacerlo funcionar.
     
  8. djdevil666bcn

    djdevil666bcn

    Mensajes:
    299
    Registrado:
    29 Mar 2013
    Ubicación:
    Sant Andreu de la Barca
    ¿Que paso en abril del 2012?

    Habéis desaparecido o que?

    Bueno yo he decidido montar un arduino mega 2560 r3 para controlar 3 peristalticas, bombas circulacion, mi futura pantalla de leds y su refrigeración, apagado y encendido del skimmer, luz de luna y poco mas (de momento).

    Espero que esteis todos bien y que el hilo siga adelante.

    Soys unas maquinas. Gracias
     
  9. jmerino

    jmerino

    Mensajes:
    445
    Registrado:
    12 Sep 2010
    Ubicación:
    España
    Jajaja, esto quedo prácticamente parado porque cada uno va siempre a lo suyo.
    Todos queríamos algo diferente y mejor que el de al lado y finalmente cada uno hacia el suyo y ensañábamos nuestro código diciendo, el mío es el mejor.
    No supimos trabajar en equipo y eso ha hecho que cada unos tengamos nuestro propio proyecto.

    Por cierto. El mío sigue funcionando como el primer día. Jajaja ya me ha salido la vena de el mío es mejor.

    Suerte con el proyecto.

    Saludos a todos.
     
  10. Greenlord

    Greenlord

    Mensajes:
    397
    Registrado:
    5 Jul 2012
    Ubicación:
    Torrevieja
    Yo empiezo ahora con un mega también. Espero que no os importe ayudarme sobre todo con el código. Yo si prometo hacer un post con todo lo que haga jejeje. Gracias!

    Enviado desde mi GT-I9300 usando Tapatalk 2
     
  11. jmerino

    jmerino

    Mensajes:
    445
    Registrado:
    12 Sep 2010
    Ubicación:
    España
    Ya pedirás cuando necesites algo. A ver que tal va eso.
     
  12. Greenlord

    Greenlord

    Mensajes:
    397
    Registrado:
    5 Jul 2012
    Ubicación:
    Torrevieja
    Como he puesto en el post del sensor (lo he puesto por si le damos una solucion que sea más facil encontrarlo con el buscador) no encuentro librerías para el sensor de temperatura y humedad RHT02. Acabo de encontrar ahora que no es compatible con las librerías Dallas, o más concretamente ésto "(2) Communication and signal MaxDetect 1-wire bus is used for communication between MCU and RHT02.. ( MaxDetect 1-wire bus is
    specially designed by MaxDetect Technology Co., Ltd. , it's different from Maxim/Dallas 1-wire bus, so it's
    incompatible with Dallas 1-wire bus.)
    "

    Es un poco lio porque al parecer el sensor te suelta un chorro de 40 bits, de los que los 16 primeros son la humedad en binario, los 16 segundos la temperatura y el resto son bits de control, por lo que habrá que coger la salida y convertirla, no se bien como...
     
  13. Greenlord

    Greenlord

    Mensajes:
    397
    Registrado:
    5 Jul 2012
    Ubicación:
    Torrevieja
    Solucionado. He dejado la solución en el post correspondiente. :)

    Enviado desde mi GT-I9300 usando Tapatalk 2
     
  14. jmerino

    jmerino

    Mensajes:
    445
    Registrado:
    12 Sep 2010
    Ubicación:
    España
    Pues llego tarde jajaja
     
  15. Kaly

    Kaly

    Mensajes:
    6.434
    Registrado:
    6 Ago 2012
    Ubicación:
    Sevilla
    Buenas jmerino.

    Para mi controlador, he ido cogiendo programas de aqui y de alla, y he ido modificandolo a mi gusto. He utilizado parte del tuyo, pricipalmente para el menu, pero no me va bien.

    El problema que tengo es que cuando entra en el menu, pasadas unas desimas de segundo, entra directamente en la primera opcion (que en mi caso es el ajuste de la hora y el dia), sin dar la oportunidad de selencionar entre las diversas opciones dentro del menu.

    Te agradeceria que le echaras un vistazo ya que llevo un monton de horas intentado solucionarlo por mi mismo pero no soy capaz y estoy ya desesperado.

    Muchas gracias de antemano
     
  16. Kaly

    Kaly

    Mensajes:
    6.434
    Registrado:
    6 Ago 2012
    Ubicación:
    Sevilla
    PRINCIPAL.

    //
    //KALYRDUINO
    //
    ////////////////////////////////////////////////////////////////////////////////
    #include <avr/io.h>
    #include <avr/wdt.h>
    #include <stdlib.h>
    #include <LiquidCrystal.h> //pantalla
    LiquidCrystal lcd(26, 27, 45, 47, 49, 51); //Define los pines de la pantalla
    #include <EEPROM.h>


    #include <Ultrasonic.h> //Sensor Distancia
    Ultrasonic ultrasonic(31,33); //Pines Sensor


    #include <Wire.h> //reloj


    #include <OneWire.h>//temperatura
    #include <DallasTemperature.h>//temperatura
    #define ONE_WIRE_BUS 41//temperatura, pin de entrada
    OneWire oneWire(ONE_WIRE_BUS);//temperatura
    DallasTemperature sensors(&oneWire);


    #define DS1307_I2C_ADDRESS 0x68// reloj


    //Valores almacenados enla EEPROM


    int LuzSump_on = 1; //Hora a la que se enciende la luz del sump
    int LuzSump_off = 2;




    //valores leidos de los botones con el UNO


    int Menu = 1;
    int Down = 1;
    int Up = 1;


    //Variables programa


    float pantemp;
    float acuatemp;
    float Litros;


    // Convierte números normales decimales a BCD (binario decimal codificado)
    byte decToBcd(byte val){
    return ( (val/10*16) + (val%10) );
    }
    // Convierte BCD (binario decimal codificado) a números normales decimales
    byte bcdToDec(byte val){
    return ( (val/16*10) + (val%16) );
    }
    byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
    int alarma;



    // Pines de los relés
    int PinLuces = 30;
    int PinLuzSump = 34;
    int PinBombas = 38;
    int PinCalentador = 42;
    int PinVentilador = 46;


    // Pines de Estado
    int EstadoBombas=0;
    int EstadoCalent=0;
    int EstadoVentil=0;


    // Define entrada boton
    int PinMenu = 35;
    int PinUp = 37;
    int PinDown = 39;
    int Retraso=2000;




    /******************************************************************************\
    * |************************** SETUP *************************|
    \******************************************************************************/


    void setup() {
    byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
    Wire.begin();
    pinMode(12, OUTPUT);
    pinMode(11, OUTPUT);
    pinMode(10, OUTPUT);
    pinMode(PinLuces, OUTPUT); //Luces
    pinMode(PinLuzSump, OUTPUT); //Luz del Sump
    pinMode(PinBombas, OUTPUT); //Bombas
    pinMode(PinCalentador, OUTPUT); //Calentador
    pinMode(PinVentilador, OUTPUT); //Ventiladores
    pinMode(PinUp, INPUT); //Pin de botones
    pinMode(PinMenu, INPUT); //Pin de botones
    pinMode(PinDown, INPUT); //Pin de botones


    // set up the LCD's number of columns and rows:
    lcd.begin(20,4);
    // Print a message to the LCD.
    lcd.print(" Desingned by : ");
    lcd.print(" For used in : ");
    lcd.print(" KALY ");
    lcd.print(" KALYREEF ");
    sensors.begin();//Temperatura


    // si desea poner en hora, active esta parte y luego vuelva a quitarla

    second = 0;
    minute = 59;
    hour = 10;
    dayOfWeek = 5;
    dayOfMonth = 27;
    month = 9;
    year = 13;
    setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);



    wdt_enable(WDTO_8S); //Watchdog


    delay(2000);

    }




    /********************* # #### #### #### **************************\
    * |********************** # # # # # # # ***************************|
    * |********************** # # # # # #### ***************************|
    \********************* ### #### #### # **************************/
    void loop(){
    getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); //Obtenemos la hora


    lcd.clear();
    if (minute < 2) Retraso=1000;
    else if (hour < 5) Retraso=10000;
    else Retraso=4500;

    wdt_reset(); //Watchdog
    Bombas();
    Luces(minute, hour);
    Bombas();
    Temperatura(minute, hour);
    Bombas();
    Niveles(minute, hour);
    LuzSump();

    //Si se pulsa el boton Menu / Rojo accedemos al menu configuracion
    int Menu;
    Menu = digitalRead(PinMenu);

    //setCur(3,1); Serial.print(Pin Menu);

    if (Menu = digitalRead (PinMenu)){

    Menu_Ajuste();
    }
    }
    /******************************************************************************\
    * |************************** FUNCIONES PRINCIPALES *************************|
    \******************************************************************************/


    void Luces(int minutos, int horas) {
    int LucesAzules;
    int InicioAmanecerAzul=60*9;
    int FinAmanecerAzul=60*10;
    int InicioAnochecerAzul=60*22;
    int FinAnochecerAzul=60*23;
    int FinLuzLuna=60*2;
    int MaxAzul=220;
    int PorcentAzules;


    int LucesBlancas;
    int InicioAmanecerBlancas=60*9.5;
    int FinAmanecerBlancas=60*10.5;
    int InicioAnochecerBlancas=60*21.5;
    int FinAnochecerBlancas=60*22.5;
    int MaxBlancas=220;
    int PorcentBlancas;


    int LucesMixtas;
    int InicioAmanecerMixtas=60*13;
    int FinAmanecerMixtas=60*13*5;
    int InicioAnochecerMixtas=60*18;
    int FinAnochecerMixtas=60*18.5;
    int MaxMixtas=220;
    int PorcentMixtas;


    int LuzSump_on = 60*22;
    int LuzSump_off = 60*10;


    int Tiempo;
    Tiempo=horas*60+minutos;
    //Tiempo=Tiempo+60; //Horario de Verano

    wdt_reset(); //Watchdog


    //################################# AZULES ###################################
    //Luna
    if (Tiempo >= FinAnochecerAzul && Tiempo < FinLuzLuna) LucesAzules=30;
    //Noche
    if (Tiempo < InicioAmanecerAzul && Tiempo > FinLuzLuna) LucesAzules=0;
    //Amanecer
    if (Tiempo >= InicioAmanecerAzul && Tiempo <= FinAmanecerAzul) LucesAzules=map(Tiempo, InicioAmanecerAzul, FinAmanecerAzul, 0, MaxAzul);
    //Dia
    if ((Tiempo > FinAmanecerAzul) && (Tiempo < InicioAnochecerAzul)) LucesAzules=MaxAzul;
    //Anochecer
    if (Tiempo >= InicioAnochecerAzul && Tiempo <= FinAnochecerAzul) LucesAzules=map(Tiempo, InicioAnochecerAzul, FinAnochecerAzul, MaxAzul, 30 );


    //Control
    if( LucesAzules <0) LucesAzules=0;
    if( LucesAzules >MaxAzul) LucesAzules=MaxAzul;




    //################################# MIXTAS ###################################
    //Noche
    if (Tiempo < InicioAmanecerMixtas) LucesMixtas=0;
    //Amanecer
    if (Tiempo >= InicioAmanecerMixtas && Tiempo <= FinAmanecerMixtas) LucesMixtas=map(Tiempo, InicioAmanecerMixtas, FinAmanecerMixtas, 0, MaxMixtas);
    //Dia
    if (Tiempo > FinAmanecerMixtas && Tiempo < InicioAnochecerMixtas) LucesMixtas=MaxMixtas;
    //Anochecer
    if (Tiempo >= InicioAnochecerMixtas && Tiempo <= FinAnochecerMixtas) LucesMixtas=map(Tiempo, InicioAnochecerMixtas, FinAnochecerMixtas, MaxMixtas, 0 );
    //Control
    if( LucesMixtas <0) LucesMixtas=0;
    if( LucesMixtas >MaxMixtas) LucesMixtas=MaxMixtas;


    //################################# BLANCAS ###################################
    //Noche
    if (Tiempo < InicioAmanecerBlancas) LucesBlancas=0;
    //Amanecer
    if (Tiempo >= InicioAmanecerBlancas && Tiempo <= FinAmanecerBlancas) LucesBlancas=map(Tiempo, InicioAmanecerBlancas, FinAmanecerBlancas, 0, MaxBlancas);
    //Dia
    if (Tiempo > FinAmanecerBlancas && Tiempo < InicioAnochecerBlancas) LucesBlancas=MaxBlancas;
    //Anochecer
    if (Tiempo >= InicioAnochecerBlancas && Tiempo <= FinAnochecerBlancas) LucesBlancas=map(Tiempo, InicioAnochecerBlancas, FinAnochecerBlancas, MaxBlancas, 0 );
    //Control
    if( LucesBlancas <0) LucesBlancas=0;
    if( LucesBlancas >MaxBlancas) LucesBlancas=MaxBlancas;


    //################################# RELES ###################################
    // rele Sump

    if (Tiempo > LuzSump_on && Tiempo < LuzSump_off){

    digitalWrite(PinLuzSump, LOW);
    }
    else
    {
    digitalWrite(PinLuzSump, HIGH);

    delay(Retraso);

    }

    //Rele Luces
    if (LucesAzules+LucesMixtas+LucesBlancas >= 1)
    {
    digitalWrite(PinLuces, LOW);

    }
    else
    {
    digitalWrite(PinLuces, HIGH);

    }


    analogWrite(12, 255-LucesAzules );
    analogWrite(11, 255-LucesMixtas );
    analogWrite(10, 255-LucesBlancas);


    PorcentAzules =Porcent(LucesAzules ,255)*2;
    PorcentMixtas =Porcent(LucesMixtas ,255)*2;
    PorcentBlancas=Porcent(LucesBlancas,255)*2;


    // PorcentAzules =(LucesAzules/MaxAzul)*100 ;
    // PorcentMixtas =(LucesMixtas/MaxMixtas)*100 ;
    // PorcentBlancas=(LucesBlancas/MaxBlancas)*100;






    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(" ILUMINACION ");
    if (hour < 10) lcd.print("0");
    lcd.print(hour, DEC);
    lcd.print(":");
    if (minute < 10) lcd.print("0");
    lcd.print(minute, DEC);


    lcd.setCursor(0, 1);
    lcd.print(" Azules: ");
    if (PorcentAzules < 10) lcd.print(" ");
    lcd.print(PorcentAzules);
    lcd.print("% ");


    lcd.setCursor(0, 2);
    lcd.print(" Mixtas: ");
    if (PorcentMixtas < 10) lcd.print(" ");
    lcd.print(PorcentMixtas);
    lcd.print("% SUMP");


    lcd.setCursor(0, 3);
    lcd.print(" Blancas: ");
    if (PorcentBlancas < 10) lcd.print(" ");
    lcd.print(PorcentBlancas);
    lcd.print("% ");
    if (PinLuzSump = 0)
    lcd.print("ON");
    else
    lcd.print("OFF ");


    delay(Retraso);


    }
    //Control nivel del Sump


    void Niveles(int minutos, int horas)
    {
    lcd.clear();
    int CmAgua;
    float Litros;
    lcd.setCursor(0, 0);
    lcd.print(" NIVEL AGUA ");
    if (hour < 10) lcd.print("0");
    lcd.print(hour, DEC);
    lcd.print(":");
    if (minute < 10) lcd.print("0");
    lcd.print(minute, DEC);


    lcd.setCursor(0, 1);
    lcd.print(" Quedan: ");

    wdt_reset(); //Watchdog

    //Sump 440*336, 1,478L por cm
    CmAgua=63-ultrasonic.Ranging(CM);
    Litros=CmAgua*2;


    lcd.print(Litros);
    lcd.print("L ");




    lcd.setCursor(0, 2);
    lcd.print(" ");
    lcd.print((Litros/60)*100);
    lcd.print("% ");


    lcd.setCursor(0, 3);
    lcd.print("MIN ");
    if (Litros > 5) lcd.print((char)255);
    if (Litros > 10) lcd.print((char)255);
    if (Litros > 15) lcd.print((char)255);
    if (Litros > 20) lcd.print((char)255);
    if (Litros > 25) lcd.print((char)255);
    if (Litros > 30) lcd.print((char)255);
    if (Litros > 35) lcd.print((char)255);
    if (Litros > 40) lcd.print((char)255);
    if (Litros > 45) lcd.print((char)255);
    if (Litros > 50) lcd.print((char)255);
    if (Litros > 55) lcd.print((char)255);
    if (Litros > 60) lcd.print((char)255);




    lcd.setCursor(17, 3);
    lcd.print("MAX");


    delay(Retraso);
    }
    //Ajuste hora luz sump


    void LuzSump()
    {
    wdt_reset(); //Watchdog





    }


    //Control de temperatura

    void Temperatura(int minutos, int horas)
    {
    int valor = 0;
    int TempMax = 26;
    int TempMin = 25;
    float pantemp;
    float acuatemp;

    wdt_reset(); //Watchdog

    valor = digitalRead(PinCalentador);
    sensors.requestTemperatures();
    pantemp=sensors.getTempCByIndex(0)+1;
    acuatemp=sensors.getTempCByIndex(1)+1;


    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(" TEMPERATURA ");
    if (hour < 10) lcd.print("0");
    lcd.print(hour, DEC);
    lcd.print(":");
    if (minute < 10) lcd.print("0");
    lcd.print(minute, DEC);


    lcd.setCursor(0, 1);
    lcd.print(" Acuario: ");
    lcd.print(acuatemp);
    lcd.print((char)223);
    lcd.setCursor(0, 2);
    lcd.print(" Pantalla: ");
    lcd.print(pantemp);
    lcd.print((char)223);




    //Control del calentador
    lcd.setCursor(0, 3);

    wdt_reset(); //Watchdog

    if (acuatemp < TempMin){
    lcd.print(" HOT ON ");
    digitalWrite(PinCalentador, HIGH);
    }else{
    lcd.print(" HOT OFF");
    digitalWrite(PinCalentador, LOW);

    }


    //Control de los ventiladores

    wdt_reset(); //Watchdog

    if (acuatemp > TempMax){
    lcd.print (" COLD ON ");
    digitalWrite (PinVentilador, HIGH);
    }else{
    digitalWrite(PinVentilador, LOW);
    lcd.print(" COLD OFF");
    }


    delay(Retraso);

    }
    //Control de las bombas de movimiento


    void Bombas()
    {
    wdt_reset(); //Watchdog

    if (EstadoBombas == 0)
    {
    digitalWrite(PinBombas, HIGH);
    EstadoBombas =1;
    }
    else{
    EstadoBombas = 0;
    digitalWrite(PinBombas, LOW);
    }
    }




    /******************************************************************************\
    * |************************** FUNCIONES AUXILIARES *************************|
    \******************************************************************************/


    ////////////////////////////////////////////////// MODIFICA LA HORA /////////////////////////
    void setDateDs1307(byte second, // 0-59
    byte minute, // 0-59
    byte hour, // 1-23
    byte dayOfWeek, // 1-7
    byte dayOfMonth, // 1-28/29/30/31
    byte month, // 1-12
    byte year) // 0-99
    {

    Wire.beginTransmission(DS1307_I2C_ADDRESS);
    Wire.write(0);
    Wire.write(decToBcd(second)); // 0 a bit 7 inicia el reloj
    Wire.write(decToBcd(minute));
    Wire.write(decToBcd(hour));
    Wire.write(decToBcd(dayOfWeek));
    Wire.write(decToBcd(dayOfMonth));
    Wire.write(decToBcd(month));
    Wire.write(decToBcd(year));
    Wire.endTransmission();
    }


    ///////////////////////////////////////////// LEE LA HORA /////////////////////
    void getDateDs1307(byte *second,
    byte *minute,
    byte *hour,
    byte *dayOfWeek,
    byte *dayOfMonth,
    byte *month,
    byte *year)
    {
    // Resetea el registro puntero

    Wire.beginTransmission(DS1307_I2C_ADDRESS);
    Wire.write(0);
    Wire.endTransmission();


    Wire.requestFrom(DS1307_I2C_ADDRESS, 7);


    // Alguno de estos necesitan enmascarar porque ciertos bits son bits de control


    *second = bcdToDec(Wire.read() & 0x7f);
    *minute = bcdToDec(Wire.read());
    *hour = bcdToDec(Wire.read() & 0x3f); // Need to change this if 12 hour am/pm
    *dayOfWeek = bcdToDec(Wire.read());
    *dayOfMonth = bcdToDec(Wire.read());
    *month = bcdToDec(Wire.read());
    *year = bcdToDec(Wire.read());
    }


    ///////////////////////// PORCENTAJE ////////////////////////////////


    int Porcent(int Valor, int Maximo)
    {
    int result;
    result=Valor*50;
    result=result/Maximo;
    return result;
    }
     
  17. Kaly

    Kaly

    Mensajes:
    6.434
    Registrado:
    6 Ago 2012
    Ubicación:
    Sevilla
    MENU:


    // Menu Kalyreef


    void Menu_Ajuste(){


    int OPMENU = 1;
    int refrescarMENU = 1;
    int NOSALIR = 0;
    int Menu;
    int Up;
    int Down;


    //

    lcd.clear();
    lcd.setCursor(3,1);
    lcd.print("CONFIGURACION");
    delay(1000);

    NOSALIR == 0;
    OPMENU == 1;
    while (NOSALIR==0){
    wdt_reset(); //Watchdog

    Menu = digitalRead(PinMenu);
    Up = digitalRead (PinUp);
    Down = digitalRead (PinDown);


    if (Up == 1) {OPMENU--; delay(200); refrescarMENU=1; if (OPMENU==0) {OPMENU=8;}};
    if (Down == 1) {OPMENU++; delay(200); refrescarMENU=1; if (OPMENU==9) {OPMENU=1;}};;

    if ((OPMENU < 5)&&(refrescarMENU==1)){
    lcd.clear();
    lcd.setCursor(0,0); lcd.print("1.Ajust. Reloj "); if (OPMENU == 1) { lcd.print("<");};
    lcd.setCursor(0,1); lcd.print("2.Ajust. Temp "); if (OPMENU == 2) { lcd.print("<");};
    lcd.setCursor(0,2); lcd.print("3.Ajuste Luz SUMP "); if (OPMENU == 3) { lcd.print("<");};
    lcd.setCursor(0,3); lcd.print("4.Luz Acuario "); if (OPMENU == 4) { lcd.print("<");};
    refrescarMENU=0;
    delay(300);

    } else if ((OPMENU >= 5)&&(OPMENU <=8)&&(refrescarMENU==1)){
    lcd.clear();
    lcd.setCursor(0,0); lcd.print("5.Ajust. Amanecer "); if (OPMENU==5){ lcd.print("<");};
    lcd.setCursor(0,1); lcd.print("6.Ajuste Atardecer "); if (OPMENU==6){ lcd.print("<");};
    lcd.setCursor(0,2); lcd.print("7.Ajuste Luna "); if (OPMENU==7){ lcd.print("<");};
    lcd.setCursor(0,3); lcd.print("8.Salir "); if (OPMENU==8){ lcd.print("<");};
    refrescarMENU=0;

    delay(3000);
    }
    if (Menu = 1) NOSALIR=0;





    //Configurar Menu

    lcd.clear();
    delay(Retraso);

    switch (OPMENU){

    // Poner en Hora
    case 1:

    NOSALIR == 0;
    OPMENU == 1; while (NOSALIR==0){
    wdt_reset(); //Watchdog

    Menu = digitalRead(PinMenu);
    Up = digitalRead (PinUp);
    Down = digitalRead (PinDown);

    if (Menu == 1) {OPMENU++; delay(300); if (OPMENU==7) {NOSALIR=1;}};

    //Poner en fecha y hor;a
    int set_year = year;
    int set_month = month;
    int set_dayOfMonth = dayOfMonth;
    int set_hour = hour;
    int set_minute = minute;
    int set_second = 00;

    while (NOSALIR==0){
    wdt_reset(); //Watchdog
    Menu = digitalRead(PinMenu);
    Up = digitalRead (PinUp);
    Down = digitalRead (PinDown);

    if (Menu == 1) {OPMENU++; delay(300); if (OPMENU==7) {NOSALIR=1;}};

    lcd.setCursor(0,0); lcd.print("Poner Fecha y hora");
    //Fecha
    lcd.setCursor(0, 1); lcd.print("20"); if(set_year<10){lcd.print('0');};lcd.print(set_year);
    lcd.setCursor(4, 1); lcd.print('/');
    lcd.setCursor(5, 1); if(set_month<10){lcd.print('0');};lcd.print(set_month);
    lcd.setCursor(7, 1); lcd.print('/');
    lcd.setCursor(8, 1); if(set_dayOfMonth<10){lcd.print('0');};lcd.print(set_dayOfMonth);

    lcd.setCursor(11, 1); if(set_hour<10){lcd.print('0');};lcd.print(set_hour);
    lcd.setCursor(13, 1); lcd.print(':');
    lcd.setCursor(14, 1); if(set_minute<10){lcd.print('0');};lcd.print(set_minute);
    lcd.setCursor(16, 1); lcd.print(':');
    lcd.setCursor(17, 1); if(set_second<10){lcd.print('0');};lcd.print(set_second);

    lcd.setCursor(0, 3); lcd.print("Salir=0");
    lcd.setCursor(15,2);

    if (OPMENU == 1){
    lcd.setCursor(0, 2); lcd.print("^^^^");
    lcd.setCursor(2, 1);
    if (Up == 1){delay(300); set_year++;if(set_year<10){lcd.print('0');}; lcd.print(set_year);};
    if (Down == 1){delay(300); set_year--;if(set_year<10){lcd.print('0');}; lcd.print(set_year);};
    }
    if (OPMENU == 2){
    lcd.setCursor(0,2); lcd.print(" "); lcd.setCursor(5,2); lcd.print("^^");
    lcd.setCursor(5, 1);
    if (Up == 1){delay(300); set_month++;if(set_month<10){lcd.print('0');};lcd.print(set_month);};
    if (Down == 1){delay(300); set_month--;if(set_month<10){lcd.print('0');};lcd.print(set_month);};
    }
    if (OPMENU == 3){
    lcd.setCursor(5, 2); lcd.print(" "); lcd.setCursor(8, 2); lcd.print("^^");
    lcd.setCursor(8, 1);
    if (Up == 1){delay(300); set_dayOfMonth++;if(set_dayOfMonth<10){lcd.print('0');};lcd.print(set_dayOfMonth);};
    if (Down == 1){delay(300); set_dayOfMonth--;if(set_dayOfMonth<10){lcd.print('0');};lcd.print(set_dayOfMonth);};
    }
    if (OPMENU == 4){
    lcd.setCursor(8, 2); lcd.print(" "); lcd.setCursor(11, 2); lcd.print("^^");
    lcd.setCursor(11, 1);
    if (Up == 1){delay(300); set_hour++;if(set_hour<10){lcd.print('0');};lcd.print(set_hour);};
    if (Down == 1){delay(300); set_hour--;if(set_hour<10){lcd.print('0');};lcd.print(set_hour);};
    }
    if (OPMENU == 5){
    lcd.setCursor(11, 2); lcd.print(" "); lcd.setCursor(14, 2); lcd.print("^^");
    lcd.setCursor(14, 1);
    if (Up == 1){delay(300); set_minute++;if(set_minute<10){lcd.print('0');};lcd.print(set_minute);};
    if (Down == 1){delay(300); set_minute--;if(set_minute<10){lcd.print('0');};lcd.print(set_minute);};
    }
    if (OPMENU == 6){
    lcd.setCursor(14, 2); lcd.print(" "); lcd.setCursor(17, 2); lcd.print("^^");
    lcd.setCursor(17, 1);
    if (Up == 1){delay(300); set_second++;if(set_second<10){lcd.print('0');};lcd.print(set_second);};
    if (Down == 1){delay(300); set_second--;if(set_second<10){lcd.print('0');};lcd.print(set_second);};
    }
    setDateDs1307(set_second, set_minute, set_hour, dayOfWeek, set_dayOfMonth, set_month, set_year);

    }
    }
    break;

    //Ajuste temperatura
    case 2:

    NOSALIR = 0;
    OPMENU = 1;

    int TempMin;
    int TempMax;
    while (NOSALIR==0){
    wdt_reset(); //Watchdog

    Menu = digitalRead(PinMenu);
    Up = digitalRead (PinUp);
    Down = digitalRead (PinDown);


    if (Menu = 1) {OPMENU++; delay(300); if (OPMENU==2) {NOSALIR=1;}};

    delay(1000);
    lcd.setCursor(0, 1);
    lcd.print("Temp.Min.:");
    lcd.print(TempMin);
    lcd.setCursor(0, 2);
    lcd.print("Temp.Max.:");
    lcd.print(TempMax);


    if (OPMENU == 1){
    lcd.setCursor(11, 1);
    if (Up == 1){delay(300); TempMin++;lcd.print(TempMin); lcd.print(" ");};
    if (Down == 1){delay(300); TempMin--;lcd.print(TempMin); lcd.print(" ");};
    if (TempMin < 0){TempMin = 0;};
    if (TempMin > 99){TempMin = 99;};
    }



    if (OPMENU == 2 ){
    lcd.setCursor(11, 2);
    if (Up == 1){delay(300); TempMax++;lcd.print(TempMax); lcd.print(" ");};
    if (Down == 1){delay(300); TempMax--;lcd.print(TempMax); lcd.print(" ");};
    if (TempMax < 0){TempMax = 0;};
    }
    }
    break;

    case 3:
    // Luz Sump
    NOSALIR = 0;
    OPMENU = 1;
    while (NOSALIR==0){

    wdt_reset(); //Watchdog

    Menu = digitalRead(PinMenu);
    Up = digitalRead (PinUp);
    Down = digitalRead (PinDown);


    if (Menu == 1) {OPMENU++; delay(300); if (OPMENU==3) {NOSALIR=1;}};

    lcd.setCursor(0,0); lcd.print("Luz SUMP config.:");
    lcd.setCursor(0,2); lcd.print("1.Encendido: ");
    lcd.setCursor(15,2); lcd.print(LuzSump_on); lcd.print(" ");
    lcd.setCursor(0,3); lcd.print("2.Apagado: ");
    lcd.setCursor(15,3); lcd.print(LuzSump_off); lcd.print(" ");

    if (OPMENU == 1){
    lcd.setCursor(19,2); lcd.print("<");
    lcd.setCursor(15, 2);
    if (Up == 1){delay(300); LuzSump_on++;lcd.print(LuzSump_on);};
    if (Down == 1){delay(300); LuzSump_on--;lcd.print(LuzSump_on);};
    if (LuzSump_on < 0){LuzSump_on = 23;};
    if (LuzSump_on > 23){LuzSump_on = 0;};
    }
    else {
    lcd.setCursor(19,2); lcd.print(" ");
    lcd.setCursor(19,3); lcd.print("<");
    lcd.setCursor(15, 3);
    if (Up == 1){delay(300); LuzSump_off++;lcd.print(LuzSump_off);};
    if (Down == 1){delay(300); LuzSump_off--;lcd.print(LuzSump_off);};
    if (LuzSump_off < 0){LuzSump_off = 23;};
    if (LuzSump_off > 23){LuzSump_off = 0;};

    }

    }
    break;



    case 4:
    //Encender Acuario

    NOSALIR = 0;
    OPMENU = 1;

    int LucesAzules;
    int LucesBlancas;
    int LucesMixtas;
    int MaxAzules;
    int MaxBlancas;
    int MaxMixtas;



    while (NOSALIR==0){

    wdt_reset(); //Watchdog

    Menu = digitalRead(PinMenu);
    Up = digitalRead (PinUp);
    Down = digitalRead (PinDown);


    if (Menu == 1) {OPMENU++; delay(300); if (OPMENU==2) {NOSALIR=1;}};

    delay(1000);
    lcd.setCursor(0, 0);
    lcd.print(" Encender Acuario: ");
    lcd.setCursor(1, 0);
    lcd.print("Luz azul: ");
    lcd.setCursor(2, 0);
    lcd.print("Luz blanca: ");
    lcd.setCursor(3, 0);
    lcd.print("luz mixta: ");



    if (OPMENU == 1){
    lcd.setCursor(1, 0);
    if (Up == 1 ){delay(300); LucesAzules=MaxAzules;lcd.print(LucesAzules); lcd.print(" ");};
    if (Down == 1){delay(300); LucesAzules=0;lcd.print(LucesAzules); lcd.print(" ");};

    }



    if (OPMENU == 2 ){
    lcd.setCursor(2, 0);
    if (Up == 1 ){delay(300); LucesBlancas=MaxBlancas;lcd.print(LucesBlancas); lcd.print(" ");};
    if (Down == 1){delay(300); LucesBlancas=0;lcd.print(LucesBlancas); lcd.print(" ");};

    }
    if (OPMENU == 3 ){
    lcd.setCursor(3, 0);
    if (Up == 1){delay(300); LucesMixtas=MaxMixtas;lcd.print(LucesMixtas); lcd.print(" ");};
    if (Down == 1){delay(300); LucesMixtas=0;lcd.print(LucesMixtas); lcd.print(" ");};

    }
    break;
    }


    case 5:
    //Ajuste amanecer

    NOSALIR = 0;
    OPMENU = 1;

    int InicioAmanecerAzul;
    int FinAmanecerAzul;
    int InicioAmanecerBlancas;
    int FinAmanecerBlancas;
    int InicioAmanecerMixtas;
    int FinAmanecerMixtas;

    while (NOSALIR==0){

    wdt_reset(); //Watchdog

    Menu = digitalRead(PinMenu);
    Up = digitalRead (PinUp);
    Down = digitalRead (PinDown);


    if (Menu == 1) {OPMENU++; delay(300); if (OPMENU==4) {NOSALIR=1;}};

    delay(1000);
    lcd.setCursor(0, 0);
    lcd.print(" Ajuste Amanecer: ");
    lcd.setCursor(1, 0);
    lcd.print("Luz azul: ");
    lcd.setCursor(2, 0);
    lcd.print("Luz blanca: ");
    lcd.setCursor(3, 0);
    lcd.print("luz mixta: ");



    if (OPMENU == 1){
    lcd.setCursor(19,2); lcd.print("<");
    lcd.setCursor(15, 2);
    if (Up == 1){delay(300); InicioAmanecerAzul++;lcd.print(InicioAmanecerAzul);};
    if (Down == 1){delay(300); InicioAmanecerAzul--;lcd.print(InicioAmanecerAzul);};
    if (InicioAmanecerAzul < 0){InicioAmanecerAzul = 23;};
    if (InicioAmanecerAzul > 23){InicioAmanecerAzul = 0;};
    }
    else {
    lcd.setCursor(19,2); lcd.print(" ");
    lcd.setCursor(19,3); lcd.print("<");
    lcd.setCursor(15, 3);
    if (Up == 1 ){delay(300); FinAmanecerAzul++;lcd.print(FinAmanecerAzul);};
    if (Down == 1){delay(300); FinAmanecerAzul--;lcd.print(FinAmanecerAzul);};
    if (FinAmanecerAzul < 0){FinAmanecerAzul = 23;};
    if (FinAmanecerAzul > 23){ FinAmanecerAzul = 0;};


    }



    if (OPMENU == 2 ){
    lcd.setCursor(19,2); lcd.print("<");
    lcd.setCursor(15, 2);
    if (Up == 1){delay(300); InicioAmanecerBlancas++;lcd.print(InicioAmanecerBlancas);};
    if (Down == 1){delay(300); InicioAmanecerBlancas--;lcd.print(InicioAmanecerBlancas);};
    if (InicioAmanecerBlancas < 0){InicioAmanecerBlancas = 23;};
    if (InicioAmanecerBlancas > 23){InicioAmanecerBlancas = 0;};
    }
    else {
    lcd.setCursor(19,2); lcd.print(" ");
    lcd.setCursor(19,3); lcd.print("<");
    lcd.setCursor(15, 3);
    if (Up == 1){delay(300); FinAmanecerBlancas++;lcd.print(FinAmanecerBlancas);};
    if (Down == 1){delay(300); FinAmanecerBlancas--;lcd.print(FinAmanecerBlancas);};
    if (FinAmanecerBlancas < 0){FinAmanecerBlancas = 23;};
    if (FinAmanecerBlancas > 23){ FinAmanecerBlancas = 0;};

    }
    if (OPMENU == 3 ){
    lcd.setCursor(19,2); lcd.print("<");
    lcd.setCursor(15, 2);
    if (Up == 1){delay(300); InicioAmanecerMixtas++;lcd.print(InicioAmanecerMixtas);};
    if (Down == 1){delay(300); InicioAmanecerMixtas--;lcd.print(InicioAmanecerMixtas);};
    if (InicioAmanecerMixtas < 0){InicioAmanecerMixtas = 23;};
    if (InicioAmanecerMixtas > 23){InicioAmanecerMixtas = 0;};
    }
    else {
    lcd.setCursor(19,2); lcd.print(" ");
    lcd.setCursor(19,3); lcd.print("<");
    lcd.setCursor(15, 3);
    if (Up == 1){delay(300); FinAmanecerMixtas++;lcd.print(FinAmanecerMixtas);};
    if (Down == 1){delay(300); FinAmanecerMixtas--;lcd.print(FinAmanecerMixtas);};
    if (FinAmanecerMixtas < 0){FinAmanecerMixtas = 23;};
    if (FinAmanecerMixtas > 23){ FinAmanecerMixtas = 0;};
    }

    break;
    }

    case 6:
    //Ajuste anochecer

    NOSALIR = 0;
    OPMENU = 1;

    int InicioAnochecerAzul;
    int FinAnochecerAzul;
    int InicioAnochecerBlancas;
    int FinAnochecerBlancas;
    int InicioAnochecerMixtas;
    int FinAnochecerMixtas;

    while (NOSALIR==0){

    wdt_reset(); //Watchdog

    Menu = digitalRead(PinMenu);
    Up = digitalRead (PinUp);
    Down = digitalRead (PinDown);


    if (Menu == 1) {OPMENU++; delay(300); if (OPMENU==2) {NOSALIR=1;}};

    delay(1000);
    lcd.setCursor(0, 0);
    lcd.print(" Ajuste Amanecer: ");
    lcd.setCursor(1, 0);
    lcd.print("Luz azul: ");
    lcd.setCursor(2, 0);
    lcd.print("Luz blanca: ");
    lcd.setCursor(3, 0);
    lcd.print("luz mixta: ");


    if (OPMENU == 1){
    lcd.setCursor(19,2); lcd.print("<");
    lcd.setCursor(15, 2);
    if (Up == 1){delay(300); InicioAnochecerAzul++;lcd.print(InicioAnochecerAzul);};
    if (Down == 1){delay(300); InicioAnochecerAzul--;lcd.print(InicioAnochecerAzul);};
    if (InicioAnochecerAzul < 0){InicioAnochecerAzul = 23;};
    if (InicioAnochecerAzul > 23){InicioAnochecerAzul = 0;};
    }
    else {
    lcd.setCursor(19,2); lcd.print(" ");
    lcd.setCursor(19,3); lcd.print("<");
    lcd.setCursor(15, 3);
    if (Up == 1){delay(300); FinAnochecerAzul++;lcd.print(FinAnochecerAzul);};
    if (Down == 1){delay(300); FinAnochecerAzul--;lcd.print(FinAnochecerAzul);};
    if (FinAnochecerAzul < 0){FinAnochecerAzul = 23;};
    if (FinAnochecerAzul > 23){ FinAnochecerAzul = 0;};


    }



    if (OPMENU == 2 ){
    lcd.setCursor(19,2); lcd.print("<");
    lcd.setCursor(15, 2);
    if (Up == 1){delay(300); InicioAnochecerBlancas++;lcd.print(InicioAnochecerBlancas);};
    if (Down ==1){delay(300); InicioAnochecerBlancas--;lcd.print(InicioAnochecerBlancas);};
    if (InicioAnochecerBlancas < 0){InicioAnochecerBlancas = 23;};
    if (InicioAnochecerBlancas > 23){InicioAnochecerBlancas = 0;};
    }
    else {
    lcd.setCursor(19,2); lcd.print(" ");
    lcd.setCursor(19,3); lcd.print("<");
    lcd.setCursor(15, 3);
    if (Up == 1){delay(300); FinAnochecerBlancas++;lcd.print(FinAnochecerBlancas);};
    if (Down == 1){delay(300); FinAnochecerBlancas--;lcd.print(FinAnochecerBlancas);};
    if (FinAnochecerBlancas < 0){FinAnochecerBlancas = 23;};
    if (FinAnochecerBlancas > 23){ FinAnochecerBlancas = 0;};

    }
    if (OPMENU == 3 ){
    lcd.setCursor(19,2); lcd.print("<");
    lcd.setCursor(15, 2);
    if (Up == 1){delay(300); InicioAnochecerMixtas++;lcd.print(InicioAnochecerMixtas);};
    if (Down == 1){delay(300); InicioAnochecerMixtas--;lcd.print(InicioAnochecerMixtas);};
    if (InicioAnochecerMixtas < 0){InicioAnochecerMixtas = 23;};
    if (InicioAnochecerMixtas > 23){InicioAnochecerMixtas = 0;};
    }
    else {
    lcd.setCursor(19,2); lcd.print(" ");
    lcd.setCursor(19,3); lcd.print("<");
    lcd.setCursor(15, 3);
    if (Up == 1){delay(300); FinAnochecerMixtas++;lcd.print(FinAnochecerMixtas);};
    if (Down == 1){delay(300); FinAnochecerMixtas--;lcd.print(FinAnochecerMixtas);};
    if (FinAnochecerMixtas < 0){FinAnochecerMixtas = 23;};
    if (FinAnochecerMixtas > 23){ FinAnochecerMixtas = 0;};
    }

    break;
    }

    case 7:
    //Ajuste Luna

    NOSALIR = 0;
    OPMENU = 1;

    int FinLuzLuna;


    while (NOSALIR==0){

    wdt_reset(); //Watchdog

    Menu = digitalRead(PinMenu);
    Up = digitalRead (PinUp);
    Down = digitalRead (PinDown);


    if (Menu == 1) {OPMENU++; delay(300); if (OPMENU==2) {NOSALIR=1;}};

    delay(1000);
    lcd.setCursor(0, 0);
    lcd.print(" Ajuste Anochecer: ");
    lcd.setCursor(1, 0);
    lcd.print("Luz azul: ");
    lcd.setCursor(2, 0);
    lcd.print("Luz blanca: ");
    lcd.setCursor(3, 0);
    lcd.print("luz mixta: ");



    if (OPMENU == 1){
    lcd.setCursor(19,2); lcd.print("<");
    lcd.setCursor(15, 2);
    if (Up == 1){delay(300); FinLuzLuna++;lcd.print(FinLuzLuna);};
    if (Down == 1){delay(300); FinLuzLuna--;lcd.print(FinLuzLuna);};
    if (FinLuzLuna < 0){FinLuzLuna = 23;};
    if (FinLuzLuna > 23){FinLuzLuna = 0;};
    }
    else {
    lcd.setCursor(19,2); lcd.print(" ");
    lcd.setCursor(19,3); lcd.print("<");
    lcd.setCursor(15, 3);


    }
    break;
    }
    lcd.clear();
    delay(300);
    }
    }
    }
     
  18. jmerino

    jmerino

    Mensajes:
    445
    Registrado:
    12 Sep 2010
    Ubicación:
    España
    Solo lo he mirado muy por encima pero esta linea es la que hace lo que comentas casi seguro

    if (Menu = 1) NOSALIR=0;

    Tendrías que cambiarla por

    if (Menu == 1) NOSALIR=0;

    Pruebalo y me dices, revisa el codigo porque he visto que te ha pasado en mas de una ocasion lo que te comento.
     
    Última edición: 30 Sep 2013
  19. Kaly

    Kaly

    Mensajes:
    6.434
    Registrado:
    6 Ago 2012
    Ubicación:
    Sevilla
    Muchas gracias tio, estaba amargado.

    Al final a quedado asi para que funcione:

    if(Menu ==1) NOSALIR=1
    }

    Ademas de eso, tenia mal colocado el "}"

    Me acabas de salvar la vida.

    Ahora a continuar depurando errores, jjejeje
     
  20. jmerino

    jmerino

    Mensajes:
    445
    Registrado:
    12 Sep 2010
    Ubicación:
    España
    Me alegro que te haya servido de ayuda:yb61[1]: