Taller de Arduino

  • Iniciador del tema Iniciador del tema jmcadsl
  • Fecha de inicio Fecha de inicio
Estado
Cerrado para nuevas respuestas.
Que leds rojos estas utilizando y cuantos para cuantos litros???? Se notan en la iluminación???
 
ya ya, no es serial, pero tiene al menos 4 lineas no?? y se configuraria igual que la de 2 lineas no??
hola lo unico que cambia es esta linea
lcd.begin(16, 2); cambias el dos que son las lineas por un 4 y el 16 por 20 columnas quedando asi
lcd.begin(20, 4);

y a la hora de escribir en el lcd

lcd.setCursor(0,0);
Serial.print ("linea 1 o cero");

lcd.setCursor(0,1);
Serial.print ("linea 2 o uno");

lcd.setCursor(0,2);
Serial.print ("linea 3 o dos");

lcd.setCursor(0,3);
Serial.print ("linea 4 o tres");

otra cosa un consejo cundo escribais el codigo rellenar toda la linea con espacios asi tapais todo lo que hay debajo y evitais cosas raras
ejemplo:
Serial.print (" linea 4 o tres ");
queda centrado y no aparece nada debajo y evitas un borrado de pantalla.
un saludo
 
hola lo unico que cambia es esta linea
lcd.begin(16, 2); cambias el dos que son las lineas por un 4 y el 16 por 20 columnas quedando asi
lcd.begin(20, 4);

y a la hora de escribir en el lcd

lcd.setCursor(0,0);
Serial.print ("linea 1 o cero");

lcd.setCursor(0,1);
Serial.print ("linea 2 o uno");

lcd.setCursor(0,2);
Serial.print ("linea 3 o dos");

lcd.setCursor(0,3);
Serial.print ("linea 4 o tres");

otra cosa un consejo cundo escribais el codigo rellenar toda la linea con espacios asi tapais todo lo que hay debajo y evitais cosas raras
ejemplo:
Serial.print (" linea 4 o tres ");
queda centrado y no aparece nada debajo y evitas un borrado de pantalla.
un saludo

Idea captada, mil gracias por tu aporte y ayuda!! ya os contare cuando me lleguen los materiales jejeje.
 
if (hour >= 10 && minute >=05)

Se encienden, entiendo que al poner == es para realizar la accion en esa hora justa y si se ha pasado no hace nada y al poner >= quere decir en esa hora o superior????

Tengo que cambiar los == por >= para que si se va la luz, al encender continue en la fase que corresponde?.

Saludos

Si lo pones así, en cada ciclo te va a entrar en todas las fases anteriores, generando un amanecer en cada vuelta.
mejor pon algo así:

if (hour >= 10 && minute >=05) && (hour <= 11 && minute <05)
if (hour >= 11 && minute >=05) && (hour <= 12 && minute <05)
if (hour >= 12 && minute >=05) && (hour <= 13 && minute <05)
if (hour >= 13 && minute >=05) && (hour <= 14 && minute <05)

así, aunque se vaya la luz y arranque en mitad del día debería funcionar
 
Me imagino que si no tiene un menú para cambiarla, si.

Yo no lo sé porque me falta el potenciometro para la pantalla así que no sé lo que dice ni el reloj ni la sonda de temperatura ^^U

A alguien le sobra uno? xDD
 
D4n1, tienes razon, cada ciclo empieza con el amanecer, pero no desde cero, desde la ultima fase que le toca por la hora, entonces entiendo que si pongo los horarios con el formato que dices eso no pasa, pero tengo que poner todas las horas del dia o solo en las que hago cambios de luz?

Karagos el menu lo dejo para despues, pero me gustaria conseguirlo, ahora con poner en funcionamiento esto ya tengo, que de programar ni idea y todo lo saco a golpe de intentos y ver que pasa.

Saludos
 
D4n1, tienes razon, cada ciclo empieza con el amanecer, pero no desde cero, desde la ultima fase que le toca por la hora, entonces entiendo que si pongo los horarios con el formato que dices eso no pasa, pero tengo que poner todas las horas del dia o solo en las que hago cambios de luz?

Saludos


Yo te lo he puesto por horas, por que es un ejemplo, no sé si lo cambias por horas o cada 5 minutos.
 
Esto ha de terminar con migo, casi a punto de hacer los cambios que me ha dicho D4n1, me ha dado por probar una cosa y por el momento funciona, ya no hace amaneceres en cada ciclo, lo que no se si está bien puesto o no, eso me lo tenéis que decir vosotros.
En el código de jmcadsl que es con el que estoy intentando hacer lo de las luces, me he dado cuenta que en su void luces tiene puesto en el primer “if” if (hour == 6 && minute > 50 && amanecer== 0), y luego dentro de la configuración, amanecer=1; y anochecer=0; pues me ha dado por poner en todos los “if” que aumentan la luz lo de amanecer==0 y luego en la configuración el resto.

Como seguro que me explico fatal, os pongo el código y si he puesto una burrada me lo decís

Este es el principal

Código:
/////////////////////////////////////////////////
//            MY CHARCA V 1.04
////////////////////////////////////////////////

/*Pines(I/O) 
 D0 - 
 D1 - 
 D2 - SONDA TEMPERATURA            
 D3 - LED BLANCO 1 PWM             
 D4 - RELE 1 LEDS BLANCOS          
 D5 - LED BLANCO 2 PWM             
 D6 - LED AZUL 1   PWM             
 D7 - RELE 2 LEDS ROJOS
 D8 - RELE 4 LEDS AZULES
 D9 - RELE 3 VENT LED 1 LED 2   
 D10 - LED ROJO    PWM
 D11 - LED AZUL 2  PWM
 D12 - lcontrolv                               
 D13 - RELE 3 VENT LED 1 LED 2
 A0 - BOTON 1 (MENU-INFO-MANTENIMIENTO)
 A1 - BOTON 2 (SELECCION)
 A2 - ALTAVOZ                      
 A3 - lcontrolr                             
 A4 - BUS I2C-SDA RELOJ            
 A5 - BUS I2C-SCL RELOJ           
 SPI - LCD
 SENSORES TEMPERATURA, LEDS (0,1) ACUARIO (2)
 
 
 MENUS BOTONES
 
 -PULSANDO 1 VEZ BOTON MENU (//info//lcd)
 -PULSANDO SIN SOLTAR BOTON MENU (PAUSA)
 -PULSANDO 1 VEZ BOTON SELECCION (MANTENIMIENTO --> BOMBA RETORNO+BOMBA MOVIMIENTO OFF)
 -PULSANDO SIN SOLTAR BOTON SELECCION (MENU RELES)
 -PULSANDO BOTON1 Y BOTON2 (AJUSTE FECHA Y HORA)
*/ 






#include <OneWire.h>              //temperatura
#include <DallasTemperature.h>    //temperatura
#include <Wire.h>  //I2C
#include <pitches.h>//Sonido









//Variables
#define ONE_WIRE_BUS 2//temperatura
OneWire oneWire(ONE_WIRE_BUS);//temperatura
DallasTemperature sensors(&oneWire);
#define DS1307_I2C_ADDRESS 0x68




//Pines (I/O)

int lblanco = 3;
int rele1 = 4;
int lblanco2 = 5;
int lazul = 6;
int rele2 = 7;
int rele4 = 8;
int rele3 = 9;
int lrojo = 10;
int lazul2 = 11;
int lcontrolv = 12;

int boton1 = 14; 
int boton2 = 15;
int altavoz = 16;
int lcontrolr = 17;


//Variables programa
int inicio = 0;//Pausa antes de iniciar
int error = 0; // Variable para errores
int vboton1;//Valor boton
int vboton2;//Valor boton2
int vventilador = 0;//Valor ventilador 1
int vventilador2 = 0;//Valor ventilador 2
int vhora = 0;//Valor Hora
int vminuto = 0;//Valor minuto
int programa = 0;//Numero programa 




// Convierte números normales decimales a BCD (binario decimal codificado)
byte decToBcd(byte val)//RELOJ
{
  return ( (val/10*16) + (val%10) );
}

// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val)//RELOJ
{
  return ( (val/16*10) + (val%16) );
}

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;//RELOJ

int amanecer = 0;
int anochecer = 0;



///SETUP////
void setup()
{
    
 //Control de pines I/O//
 
  pinMode(lcontrolv,OUTPUT);// LED CONTROL VERDE
  pinMode(lblanco,OUTPUT);// LED BLANCO PWM 
  pinMode (rele1, OUTPUT);// LED BLANCO ON/OFF
  pinMode (lblanco2,OUTPUT);// LED BLANCOS 2 PWM
  pinMode (lazul, OUTPUT);// LED AZUL PWM
  pinMode (rele2, OUTPUT);// LED ROJO ON/OFF
  pinMode (rele3, OUTPUT);// VENTILADOR FOCOS ON/OFF
  pinMode (rele4, OUTPUT);// LED AZUL ON/OFF
  pinMode (lrojo, OUTPUT);// LED ROJO PWM
  pinMode (lazul2, OUTPUT);// LED AZUL2 PWM
  pinMode (boton1, INPUT);
  pinMode (boton2, INPUT);
  pinMode (altavoz, OUTPUT);
  pinMode (lcontrolr, OUTPUT);// LED CONTROL ROJO
  
  //Otros //
  Wire.begin();//I2C
  Serial.begin(9600);//LCD
  sensors.begin();//Temperatura
}

 





void loop()                     // run over and over again
{
  
  ledvoff();
  delay(1500);
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // LEEMOS LA HORA
 ledvon();
  menu();//Menu config manual boton1 + boton2
  if (vminuto != minute)// ESTE BUCLE LO HACE SOLO 1 VEZ POR MINUTO
  {
    if (inicio == 0)//Para evitar que nada mas ecender el control pase por el bucle ya que da problemas de sondas lecturas raras
    {
    inicio = 1;
    vminuto=minute;
    
    
    sensors.getTempCByIndex(0);
    sensors.getTempCByIndex(1);
    sensors.getTempCByIndex(2);
    //lcd.init();
    //lcdini();
    Serial.print("Inicializando");
    Serial.print("Dispositivos");
    p();
    //lcdoff();
    }
    else
    {
    vminuto=minute;
    luces(); // FASES ILUMINACION  
    
    ctemp(); //Control de temperatura si agua >28º o luz >60ºERROR y apaga luces, VENTILADOR
    }
  }

  if (vhora !=hour)// ESTE BUCLE LO HACE SOLO 1 VEZ A LA HORA DE 8:00 A 23:00
   {
      vhora=hour;
      //infolcd(); //Informacion cada hora en pantalla lcd EN EL MINUTO 1
   }  
  errores();

 
}

// Establece la fecha y el tiempo del ds1307
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.send(0);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

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

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






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.send(0);
   Wire.send(decToBcd(second));    // 0 a bit 7 inicia el reloj
   Wire.send(decToBcd(minute));
   Wire.send(decToBcd(hour));      // Si usted quiere 12 hora am/pm usted tiene que poner el 
                                   //  bit 6 (tambien tiene que cambiar readDateDs1307)

    Wire.send(decToBcd(dayOfWeek));
   Wire.send(decToBcd(dayOfMonth));
   Wire.send(decToBcd(month));
   Wire.send(decToBcd(year));
   Wire.endTransmission();
   
}

// Sonido cuando hay una accion
void saccion()
{
  //if (hour >7 & hour <23)  
  //{
        for (long i = 0; i < 400 * 1000L; i += 714 * 2) {
        digitalWrite(altavoz, HIGH);
        delayMicroseconds(314);
        digitalWrite(altavoz, LOW);
        delayMicroseconds(314);
      }
    //}
}


   
void saccionx ()
{
  if (hour >7 & hour <23)  
  {
    for (int rep = 0; rep < 2 ; rep++) {
      for (long i = 0; i < 500 * 900L; i += 1615 * 2) {
        digitalWrite(altavoz, HIGH);
        delayMicroseconds(1615);
        digitalWrite(altavoz, LOW);
        delayMicroseconds(1615);
      }
      for (long i = 0; i < 400 * 1000L; i += 714 * 2) {
        digitalWrite(altavoz, HIGH);
        delayMicroseconds(914);
        digitalWrite(altavoz, LOW);
        delayMicroseconds(914);
      }
    }
  }

}






   
 // Sonido cuando hay un error
void xserror () 
{
  if (hour >7) 

  {
    for (int rep = 0; rep < 4 ; rep++) {
      for (long i = 0; i < 300 * 1000L; i += 1915 * 2) {
        digitalWrite(altavoz, HIGH);
        delayMicroseconds(1915);
        digitalWrite(altavoz, LOW);
        delayMicroseconds(1915);
      }
      for (long i = 0; i < 400 * 1000L; i += 1014 * 2) {
        digitalWrite(altavoz, HIGH);
        delayMicroseconds(1014);
        digitalWrite(altavoz, LOW);
        delayMicroseconds(1014);
      }
    }
  }

}

void serror()
{}

   
// Pausa 3 segundos
void p ()
{ 
  delay (3000);
}

// Led verde control on
void ledvon()
{
  digitalWrite(lcontrolv, HIGH);
}

// Led verde control off
void ledvoff()
{
  digitalWrite(lcontrolv, LOW);
}  

// Led rojo control on
void ledron()
{
  ledvoff();
  digitalWrite(lcontrolr, HIGH);
}

// Led rojo control off
void ledroff()
{
  digitalWrite(lcontrolr, LOW);
}
 
Última edición:
Este es mi void luces

Código:
//Control de iluminacion
void luces()
{
 
  if (error != 2)//por si el error de temp max esta activa y apaga las luces que no las encienda este menu

  {
  
   
    
    if (hour >= 0 && minute > 35 && hour <= 6 && minute > 40 )//DESDE LAS 00 A LAS 06:40 RELES APAGADOS
       
       ledvon();
    {
     digitalWrite(rele1,LOW);
     digitalWrite(rele2,LOW);
     digitalWrite(rele4,LOW);
     }
       ledvoff();
      
      
      
      
    if (hour >= 6 && minute > 45 && hour <= 23 && minute > 55)//ENCIENDO RELES DESDE LAS 06:45 HASTA LAS 23
       ledvon();
       
     {
       digitalWrite(rele1,HIGH);
       digitalWrite(rele2,HIGH);
       digitalWrite(rele4,HIGH);
  
     }
     
       ledvoff(); 
      
      
      

  //AMANECERES
    
   if (hour >= 6 && minute >= 50 && amanecer== 0)  
    { 
       ledvon();               
    for(int fadeValue = 0 ; fadeValue <= 5; fadeValue +=1) 
     {     
      analogWrite(lblanco, fadeValue);         
      analogWrite(lblanco2, fadeValue);    
      analogWrite(lrojo, fadeValue);
      analogWrite(lazul, fadeValue);   
      analogWrite(lazul2, fadeValue);  
      amanecer=1;
      anochecer=0;
      delay(180000);
     }
       ledvoff();
    } 
     
 // A las 9 empiezan a encenderse los led blancos y azules y rojos 20% 
     
     if (hour >= 9 && amanecer== 0)
     {
        
        ledvon();
     for(int fadeValue = 5 ; fadeValue <= 51; fadeValue +=1)
      {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       amanecer=1;
       anochecer=0;
       delay(1500);
      }
        ledvoff();
     }
     
  // A las 9:30 empieza  40%  
     
     if (hour >= 9 && minute >= 30 && amanecer== 0) 
      {
        
        ledvon();
     for(int fadeValue = 51 ; fadeValue <= 102; fadeValue +=1)
      {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       amanecer=1;
       anochecer=0;
       delay(1500);
      }
        ledvoff();
     }
     
 //A las 10 se encienden 60%   
    
   if (hour >= 10 && amanecer== 0)
    {
        
        ledvon();
     for(int fadeValue = 102 ; fadeValue <= 153; fadeValue +=1)
      {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       amanecer=1;
       anochecer=0;
       delay(1500);
      }
        ledvoff();
     }
  
 //A las 10:30 se encienden 80%

if (hour >= 10 && minute >= 30 && amanecer== 0)
    {
        
        ledvon();
     for(int fadeValue = 153 ; fadeValue <= 204; fadeValue +=1)
      {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       amanecer=1;
       anochecer=0;
       delay(1500);
      }
        ledvoff();
     }

 
//A las 11 se encienden 100%  
  
 if (hour >= 11 && amanecer== 0)
    {
        
        ledvon();
     for(int fadeValue = 204 ; fadeValue <= 255; fadeValue +=1)
      {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       amanecer=1;
       anochecer=0;
       delay(1500);
      }
        ledvoff();
     }
    
    
     
 //A las 21 se apagan 80%
  
  if (hour >= 21 && anochecer == 0)
     {
        
        ledvon();
    for(int fadeValue = 255 ; fadeValue >= 204; fadeValue -=1)
     {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       anochecer=1;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }
     
     //A las 21:30 se apagan 60%
  
  if (hour >= 21 && minute >= 30 && anochecer == 0)
     {
        
        ledvon();
    for(int fadeValue = 204 ; fadeValue >= 153; fadeValue -=1)
     {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       anochecer=1;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }
  
  
     //A las 22 se apagan 40%
  
   if (hour >= 22 && anochecer == 0)
     {
        
        ledvon();
    for(int fadeValue = 153 ; fadeValue >= 102; fadeValue -=1)
     {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       anochecer=1;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }
  
   //A las 22:30 se apagan 20%
  
  if (hour >= 22 && minute >= 30 && anochecer == 0)
     {
        
        ledvon();
    for(int fadeValue = 102 ; fadeValue >= 51; fadeValue -=1)
     {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       anochecer=1;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }
  
   //A las 23 se apagan 1%
  
  if (hour >= 23 && anochecer == 0)
     {
        
        ledvon();
    for(int fadeValue = 51 ; fadeValue >= 5; fadeValue -=1)
     {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       anochecer=1;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }
  
  
   //DE 23:00 A 12:30 LUZ DE LUNA
  
   if (hour >= 23 && minute >= 20 && anochecer == 0)
     {
        
        ledvon();
    for(int fadeValue = 5 ; fadeValue >= 0; fadeValue -=1)
     {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       anochecer=1;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }
     
   // A LAS 00:15 LUNA 5% 
   
 if (hour >= 0  && minute >= 15 && anochecer == 0)
     {
        
        ledvon();
    for(int fadeValue = 51 ; fadeValue >= 12; fadeValue -=1)
     {     
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       anochecer=1;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }      
     
  // A LAS 00:30 LUNA 0% 
 
  if (hour >= 0  && minute >= 30 && anochecer == 0)
     {
        
        ledvon();
    for(int fadeValue = 12 ; fadeValue >= 0; fadeValue -=1)
     {     
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       anochecer=1;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }   
     
     
     
      
  }
  
  }

jmerino la pantalla aun no la tengo funcionando, casi pero no, entre el serial de la pantalla que me está dando trabajo y el código este, que me está matando aun no la he terminado y para rematar karagos achuchando con el menú, pero si te puedo decirte que son led de 10w y 600lm tanto los rojos como los azules y los blancos son de 1000lm.
 
Última edición:
Pues esto no funciona, se engancha en el ultimo que ha leido y lo de D4n1 parece que tampoco, sigue haciendo anochecer cada vez que inicia el ciclo
 
jmcadsl ahora he puesto el código todo junto y cada minuto como pone en el void loop se realiza todo el proceso, amanece y anochece hasta donde le toca por la hora, al minuto siguiente repite y así todo el rato, podrías decirme que hago mal?

Saludos

Gracias


El archivo tiene la última configuración que he probado hoy
 

Archivos adjuntos

hola tranquilo con el menu era solo un comentario. jeje
d4n1: no es necesario potenciometro. prueva a ponerle una resistencias hasta que te guste y ya esta yo los tengo sin potenciomertro.
manolete.
no se mu bien por donde va la cosa. pero ....
si hace el amanecer y anochecer bien englobalo todo en un if para que no entre mas. no se si me he explicado
mas o menos
define una variable "echoamanecer=0" por ejemplo.
si echoamanecer=0 entra y haz el amanecer o anochecer.y una vez que termine echoamanecer =1
en caso contrario "else" solo deja las luces encendidas o apagadas.
y cuando sea la hora de amanecer o apagar vuelve a cambiar la variable a 0
int echoamanecer=0;
if (echoamanecer=0){
//condiciones para el efecto amanecer y anochecer
if (terminaamanecer o terminaanochecer){echoamanecer=1;}
}else if (echoamanecer=1){
//dejalo encendido o apagado
if (termina encendido o apagado){echoamanecer=0;}

}
espero haberme explicado bien.
otra cosa lo que jmcadsl hace con amanecer 0 o 1 es que si es 0 entra y para que no entre mas lo cambia a 1 "creo", esque yo para entender los codigos de otros compañeros soy muy torpe y no tengo tiempo tardo menos en escribirlo el mio.
 
anoche dandole vueltas a como hacer el efecto anochecer y amanecer..... escribi esto en mis proyectos de arduino..... solo es el boceto asi que no se si funcionara o no....hay que depurarlo
/*
para hacer el efecto amanecer hay que empezar con las azules y a mitad de las azules ir dando blancas
se podria añadir algo de rojo... para el atardecer
como
nuevo metodo al comprobar la hora cada minuto una vez que llegue la hora (minuto exacto)de encender las luces con una variable que empiece por cero,
sumandole cada minuto x hasta que llegue a 255(sin pasarse)
variable=0;
if es la hora de encender{
if (variable>=255){//no hace nada
}else{
//aqui incrementa
//analogwrite......
variable=variable+6;}
}else if (si es la hora de apagar){

if (variable=<0){

}else{
//aqui resta
//analogwrite......

variable=variable-6;
if (variable==0){//analogwrite......}
}

}
*/
 
Última edición:
Esto ha de terminar con migo, casi a punto de hacer los cambios que me ha dicho D4n1, me ha dado por probar una cosa y por el momento funciona, ya no hace amaneceres en cada ciclo, lo que no se si está bien puesto o no, eso me lo tenéis que decir vosotros.
En el código de jmcadsl que es con el que estoy intentando hacer lo de las luces, me he dado cuenta que en su void luces tiene puesto en el primer “if” if (hour == 6 && minute > 50 && amanecer== 0), y luego dentro de la configuración, amanecer=1; y anochecer=0; pues me ha dado por poner en todos los “if” que aumentan la luz lo de amanecer==0 y luego en la configuración el resto.

Como seguro que me explico fatal, os pongo el código y si he puesto una burrada me lo decís

Este es el principal

Ahora estoy liado en el curro (con otro código xP ) cuando pueda te lo miro.
 
Buenas manolete
Te lo he modificado, pruebalo a ver si sales del bache jejejeje.

Salu2.
 

Archivos adjuntos

Prueba esto:
Código:
//Control de iluminacion
void luces()
{
 
  if (error != 2)//por si el error de temp max esta activa y apaga las luces que no las encienda este menu

  {
  
   
    
    if (hour >= 0 && minute > 35 && hour <= 6 && minute > 40 )//DESDE LAS 00 A LAS 06:40 RELES APAGADOS
       
       ledvon();
    {
     digitalWrite(rele1,LOW);
     digitalWrite(rele2,LOW);
     digitalWrite(rele4,LOW);
     }
       ledvoff();
      
      
      
      
    if (hour >= 6 && minute > 45 && hour <= 23 && minute > 55)//ENCIENDO RELES DESDE LAS 06:45 HASTA LAS 23
       ledvon();
       
     {
       digitalWrite(rele1,HIGH);
       digitalWrite(rele2,HIGH);
       digitalWrite(rele4,HIGH);
  
     }
     
       ledvoff(); 
      
      
      

  //AMANECERES
    
   if (hour >= 6 && minute >= 50 && amanecer== 1)  
    { 
       ledvon();               
    for(int fadeValue = 0 ; fadeValue <= 5; fadeValue +=1) 
     {     
      analogWrite(lblanco, fadeValue);         
      analogWrite(lblanco2, fadeValue);    
      analogWrite(lrojo, fadeValue);
      analogWrite(lazul, fadeValue);   
      analogWrite(lazul2, fadeValue);  
      amanecer=2;
      anochecer=0;
      delay(180000);
     }
       ledvoff();
    } 
     
 // A las 9 empiezan a encenderse los led blancos y azules y rojos 20% 
     
     if (hour >= 9 && amanecer== 2)
     {
        
        ledvon();
     for(int fadeValue = 5 ; fadeValue <= 51; fadeValue +=1)
      {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       amanecer=3;
       anochecer=0;
       delay(1500);
      }
        ledvoff();
     }
     
  // A las 9:30 empieza  40%  
     
     if (hour >= 9 && minute >= 30 && amanecer== 3) 
      {
        
        ledvon();
     for(int fadeValue = 51 ; fadeValue <= 102; fadeValue +=1)
      {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       amanecer=4;
       anochecer=0;
       delay(1500);
      }
        ledvoff();
     }
     
 //A las 10 se encienden 60%   
    
   if (hour >= 10 && amanecer== 4)
    {
        
        ledvon();
     for(int fadeValue = 102 ; fadeValue <= 153; fadeValue +=1)
      {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       amanecer=5;
       anochecer=0;
       delay(1500);
      }
        ledvoff();
     }
  
 //A las 10:30 se encienden 80%

if (hour >= 10 && minute >= 30 && amanecer== 5)
    {
        
        ledvon();
     for(int fadeValue = 153 ; fadeValue <= 204; fadeValue +=1)
      {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       amanecer=6;
       anochecer=0;
       delay(1500);
      }
        ledvoff();
     }

 
//A las 11 se encienden 100%  
  
 if (hour >= 11 && amanecer== 6)
    {
        
        ledvon();
     for(int fadeValue = 204 ; fadeValue <= 255; fadeValue +=1)
      {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       amanecer=0;
       anochecer=1;
       delay(1500);
      }
        ledvoff();
     }
    
    
     
 //A las 21 se apagan 80%
  
  if (hour >= 21 && anochecer == 1)
     {
        
        ledvon();
    for(int fadeValue = 255 ; fadeValue >= 204; fadeValue -=1)
     {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       anochecer=2;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }
     
     //A las 21:30 se apagan 60%
  
  if (hour >= 21 && minute >= 30 && anochecer == 2)
     {
        
        ledvon();
    for(int fadeValue = 204 ; fadeValue >= 153; fadeValue -=1)
     {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       anochecer=3;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }
  
  
     //A las 22 se apagan 40%
  
   if (hour >= 22 && anochecer == 3)
     {
        
        ledvon();
    for(int fadeValue = 153 ; fadeValue >= 102; fadeValue -=1)
     {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       anochecer=4;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }
  
   //A las 22:30 se apagan 20%
  
  if (hour >= 22 && minute >= 30 && anochecer == 4)
     {
        
        ledvon();
    for(int fadeValue = 102 ; fadeValue >= 51; fadeValue -=1)
     {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       anochecer=5;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }
  
   //A las 23 se apagan 1%
  
  if (hour >= 23 && anochecer == 5)
     {
        
        ledvon();
    for(int fadeValue = 51 ; fadeValue >= 5; fadeValue -=1)
     {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       anochecer=6;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }
  
  
   //DE 23:00 A 12:30 LUZ DE LUNA
  
   if (hour >= 23 && minute >= 20 && anochecer == 6)
     {
        
        ledvon();
    for(int fadeValue = 5 ; fadeValue >= 0; fadeValue -=1)
     {     
       analogWrite(lblanco, fadeValue);         
       analogWrite(lblanco2, fadeValue);    
       analogWrite(lrojo, fadeValue);
       anochecer=7;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }
     
   // A LAS 00:15 LUNA 5% 
   
 if (hour >= 0  && minute >= 15 && anochecer == 7)
     {
        
        ledvon();
    for(int fadeValue = 51 ; fadeValue >= 12; fadeValue -=1)
     {     
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       anochecer=8;
       amanecer=0;
       delay(1500);
      }
        ledvoff();
     }      
     
  // A LAS 00:30 LUNA 0% 
 
  if (hour >= 0  && minute >= 30 && anochecer == 8)
     {
        
        ledvon();
    for(int fadeValue = 12 ; fadeValue >= 0; fadeValue -=1)
     {     
       analogWrite(lazul, fadeValue);   
       analogWrite(lazul2, fadeValue);
       anochecer=0;
       amanecer=1;
       delay(1500);
      }
        ledvoff();
     }   
     
     
     
      
  }
  
  }

Mira a ver si funciona como deberia y luego lo afinamos.

Lo que he hecho ha sido controlar que no entre en un if en el que ya ha entrado.
 
buenas a todos,aun no e empezado con mi marino y ya me esta picando el gusanillo de acerme una pantalla de led con su amanecer y anochecer lo que pasa q yo para esto soy negao,no tengo ni idea de programacion ni de electronica pero cuando termine mi ciclado,creo q me voy a poner manos a la obra.

Yo me conformo con que aga amanecer y anochecer y me de la medicion de temperatura y la de ph si es facil lo are si no a cmprarme un medidor de esos q ahy por ahy jejej un saludo

y felicidades por este pedazo de post y mil gracias
 
Estado
Cerrado para nuevas respuestas.
Atrás
Arriba