Taller de Arduino

  • Iniciador del tema Iniciador del tema jmcadsl
  • Fecha de inicio Fecha de inicio
Estado
Cerrado para nuevas respuestas.
Por si os interesa también.... he estado hablando con el chinito cudeiro.... y me ha dicho esto....

""If you need the pump and motor only, for purchase 3 pumps, I could offer each cost at USD 19.99. Shipping cost USD 5.00.""
 
Creo que al final, despues de darle tantas vueltas, me voy a decantar por esta , a ver que opinais?:no_tires_
 
Pues no es serial, pero como he dicho antes he cogido el Arduino Mega 1280, tengo salidas de sobra, por cierto he recibido ya el modulo del reloj, el rtc relay shield, a ver si miro luego para ver como se conecta.
 
jmcadsl, estoy intentando adaptar tu codigo pero tengo un problema, cuando lo cargo, la parte de temperaturas parece que funciona, pero la parte de luces no, lo he mirado mil veces, he cambiado mil cosas y no doy con el problema, no se encienden los relles de las luces.

Pongo lo que tengo hecho de codigo, haber si me podeis decir que hago mal.

Saludos
 

Archivos adjuntos

jmcadsl, estoy intentando adaptar tu codigo pero tengo un problema, cuando lo cargo, la parte de temperaturas parece que funciona, pero la parte de luces no, lo he mirado mil veces, he cambiado mil cosas y no doy con el problema, no se encienden los relles de las luces.

Pongo lo que tengo hecho de codigo, haber si me podeis decir que hago mal.

Saludos

Pero sabes en que parte del codigo se te queda? , lo mejor para ver que es lo que falla es que pongas dentro de cada IF un indicador Serial.print (dentro del If tal...) y una pausa , asi podrás ver donde entra o no entra el programa. Si ves que entra en un IF , pero luego no te funciona el rele entonces ya es algo de la parte de la activación del rele...no se si me explico...
 
No se en que parte se queda, ya que no se como mirarlo, pero si cargas en el ordenador el fichero que he puesto veras varias pestañas, la idea es separalo para que sea mas facil.

En la pestaña de luces, borro todo y pngo lo siguiente
Código:
//Control de iluminacion
void luces()
{
   {
  digitalWrite(rele1,HIGH);
  digitalWrite(rele2,HIGH);
  digitalWrite(rele4,HIGH);
   }
}

Con esto solo si se encienden los reles

Si pongo

//Control de iluminacion
void luces()
{
  
   if (hour >= 0 && hour < 6)
   
  digitalWrite(rele1,HIGH);
  digitalWrite(rele2,HIGH);
  digitalWrite(rele4,HIGH);
   
}

Tambien se encienden, menos el primero, aun cambiando el orden, el que este primero no se enciende

Si pongo esto

//Control de iluminacion
void luces()
{
  
   if (hour >= 0 && hour < 6)
   {
  digitalWrite(rele1,HIGH);
  digitalWrite(rele2,HIGH);
  digitalWrite(rele4,HIGH);
   
}

no se enciende, ya que la hora de la condicion asi lo indica

pero si pongo esto

//Control de iluminacion
void luces()
{
  int i;
  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 && hour < 6)
   
    {
     digitalWrite(rele1,LOW);
     digitalWrite(rele2,LOW);
     digitalWrite(rele4,LOW);
      }

  //AMANECERES LOLE
     if (hour == 6 && minute > 50 && amanecer== 0)
    
     {
       //lcdini();
       //i=random(0,6);
       //Serial.print(amaneceres[i]);
       analogWrite(lrojo, 254);
       analogWrite(lazul, 254);
       analogWrite(lazul2, 254);
       analogWrite(lblanco, 255);
       analogWrite(lblanco2, 255);
       digitalWrite(rele1,HIGH);
       digitalWrite(rele2,HIGH);
       digitalWrite(rele4,HIGH);
       amanecer=1;
       anochecer=0;
       delay(180000);
      digitalWrite(rele1,LOW);
     digitalWrite(rele2,LOW);
     digitalWrite(rele4,LOW);
       //lcdoff();
     
     }

// A las 10:05 empiezan a encenderse los led blancos y azules y rojos 20%
    if (hour == 10 && minute ==5)
    {
      ledvon();
      ////lcdini();
      //spi_trans("Comienza a salir",0,0);
      //spi_trans("el Solete ",1,1);
      
      for(int fadeValue = 255 ; fadeValue >= 200; fadeValue -=1)
      { 
        analogWrite(lrojo, fadeValue);
        analogWrite(lazul, fadeValue);
        analogWrite(lazul2, fadeValue);  
        analogWrite(lblanco, fadeValue);
        analogWrite(lblanco2, fadeValue);     
        delay(1500);  
  //Doy alimentacion a fuente leds por si acaso no estuviera encendida antes
       digitalWrite(rele1,HIGH);
      digitalWrite(rele2,HIGH);
      digitalWrite(rele4,HIGH);
      }
      //lcdoff();
      ledvoff();
    }
  }  
}

Tampoco se enciende nada, aunque ponga todo el programa de luz ya no se encienden los reles
 
Última edición:
//Control de iluminacion
void luces()
{

if (hour >= 0 && hour < 6)

digitalWrite(rele1,HIGH);
digitalWrite(rele2,HIGH);
digitalWrite(rele4,HIGH);

}

Tambien se encienden, menos el primero, aun cambiando el orden, el que este primero no se enciende


Creo que es porque despues del if, no has puesto las llaves, por lo que solo ejecuta la condicion sobre siguiente linea.

Supongo que estas fuera de las horas y por eso no se enciende. A las dos siguientes el if no le afecta.

prueba esto:

//Control de iluminacion
void luces()
{

if (hour >= 0 && hour < 6)
{
digitalWrite(rele1,HIGH);
digitalWrite(rele2,HIGH);
digitalWrite(rele4,HIGH);
}
}
 
probado y no se enciende, cuando lo pongo como toca, con las llaves deja de funcionar

Saludos
 
si pongo esto si se encienden

//Control de iluminacion
void luces()
{

if (hour > 0)
{

digitalWrite(rele1,HIGH);
digitalWrite(rele2,HIGH);
digitalWrite(rele4,HIGH);


}
}
 
Supongo que tienes el reloj en hora.................

Vamos a ver.....si pones un condicional para que se enciendan dependiendo de la hora y le dices que solo se encienda entre las 00:00 y las 06:00 solo se va a encender de madrugada, prueba esto....

void luces()
{

if (hour >= 10 && hour <=21) // Debe encenderse desde las 10 de la mañana hasta las 9 de la noche
{

digitalWrite(rele1,HIGH);
digitalWrite(rele2,HIGH);
digitalWrite(rele4,HIGH);


}
}
 
Vale, con eso si se encienden, ahora, cuando lo añado al codigo es cuando ya no funciona.
Código:
//Control de iluminacion
void luces()
{
  int i;
  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 && hour < 6)
    {
     digitalWrite(rele1,LOW);
     digitalWrite(rele2,LOW);
     digitalWrite(rele4,LOW);
   
      }

  //AMANECERES LOLE
     if (hour == 6 && minute > 50 && amanecer== 0)
    
     {
       //lcdini();
       //i=random(0,6);
       //Serial.print(amaneceres[i]);
       analogWrite(lrojo, 254);
       analogWrite(lazul, 254);
       analogWrite(lazul2, 254);
       analogWrite(lblanco, 255);
       analogWrite(lblanco2, 255);
       digitalWrite(rele1,HIGH);
       digitalWrite(rele2,HIGH);
       digitalWrite(rele4,HIGH);
       amanecer=1;
       anochecer=0;
       delay(180000);
      digitalWrite(rele1,LOW);
      digitalWrite(rele2,LOW);
      digitalWrite(rele4,LOW);
       //lcdoff();
     
     }

// A las 10:05 empiezan a encenderse los led blancos y azules y rojos 20%
    if (hour == 10 && minute ==5)
    {
      ledvon();
      ////lcdini();
      //spi_trans("Comienza a salir",0,0);
      //spi_trans("el Solete ",1,1);
      
      for(int fadeValue = 255 ; fadeValue >= 200; fadeValue -=1)
      { 
        analogWrite(lrojo, fadeValue);
        analogWrite(lazul, fadeValue);
        analogWrite(lazul2, fadeValue);  
        analogWrite(lblanco, fadeValue);
        analogWrite(lblanco2, fadeValue);     
        delay(1500);  
  //Doy alimentacion a fuente leds por si acaso no estuviera encendida antes
       digitalWrite(rele1,HIGH);
       digitalWrite(rele2,HIGH);
       digitalWrite(rele4,HIGH);
      }
      //lcdoff();
      ledvoff();
    }
    
     // A las 10:30 empieza 40% led 

    if (hour == 10 && minute ==30)
    {
      
      for(int fadeValue = 200 ; fadeValue >= 150; fadeValue -=1)
      { 
        analogWrite(lrojo, fadeValue);
        analogWrite(lazul, fadeValue);
        analogWrite(lazul2, fadeValue);  
        analogWrite(lblanco, fadeValue);
        analogWrite(lblanco2, fadeValue);   
        delay(1500);  
      }
    }
    
    //A las 10.58 se encienden 60% leds PWM
    if (hour == 10 && minute ==58)
    {
       
      for(int fadeValue = 150 ; fadeValue >= 100; fadeValue -=1)
      { 
        analogWrite(lrojo, fadeValue);
        analogWrite(lazul, fadeValue);
        analogWrite(lazul2, fadeValue);  
        analogWrite(lblanco, fadeValue);
        analogWrite(lblanco2, fadeValue);    
        delay(1500);  
      }
    }
    
    
     // A 11:20 90% luces PWM
    if (hour == 11 && minute==20 )
    {
      
      for(int fadeValue = 100 ; fadeValue >= 50; fadeValue -=1)
      { 
        analogWrite(lrojo, fadeValue);
        analogWrite(lazul, fadeValue);
        analogWrite(lazul2, fadeValue);  
        analogWrite(lblanco, fadeValue);
        analogWrite(lblanco2, fadeValue);   
        delay(1500);  
      }
    }
    
 // A 12:05 100% luces PWM
 
    if (hour == 12 && minute ==6)
   {
      
      for(int fadeValue = 50 ; fadeValue >= 0; fadeValue -=1)
      { 
        analogWrite(lrojo, fadeValue);
        analogWrite(lazul, fadeValue);
        analogWrite(lazul2, fadeValue);  
        analogWrite(lblanco, fadeValue);
        analogWrite(lblanco2, fadeValue);   
        delay(700);  
      }
    } 
 
 // A 17:05 90% luces PWM
 
 if (hour == 17 && minute ==6)
   {
      
      for(int fadeValue = 0 ; fadeValue <= 50; fadeValue -=1)
      { 
        analogWrite(lrojo, fadeValue);
        analogWrite(lazul, fadeValue);
        analogWrite(lazul2, fadeValue);  
        analogWrite(lblanco, fadeValue);
        analogWrite(lblanco2, fadeValue);   
        delay(700);  
      }
    }
   
   // A las 19 solo led PWM al 80%

    if (hour == 19 && minute ==4 )
    {
      
      for(int fadeValue =50 ; fadeValue <= 100; fadeValue +=1)
      { //EFECTO FADING EN LUZ LUNA LEDS
        analogWrite(lrojo, fadeValue);
        analogWrite(lazul, fadeValue);
        analogWrite(lazul2, fadeValue);  
        analogWrite(lblanco, fadeValue);
        analogWrite(lblanco2, fadeValue);      
        delay(1500);  
      }
    }
 
  // A las 20:30h  led pwm 60%

    if (hour == 20 && minute ==30 )
    {
     
      
      for(int fadeValue = 100 ; fadeValue <= 200; fadeValue +=1)
      { 
        analogWrite(lrojo, fadeValue);
        analogWrite(lazul, fadeValue);
        analogWrite(lazul2, fadeValue);  
        analogWrite(lblanco, fadeValue);
        analogWrite(lblanco2, fadeValue);   
        delay(1500);
      }
      
    }
    
    // A las 21:30 comienza anochecer 40% led 

    if (hour == 21 && minute ==30)
    {
      
       ////lcdini();
      ledvon();
      //spi_trans("Comienza a ",0,1);
      //spi_trans("ponerse el Sol",1,1);
      for(int fadeValue = 200 ; fadeValue <= 150; fadeValue -=1)
      { 
        analogWrite(lrojo, fadeValue);
        analogWrite(lazul, fadeValue);
        analogWrite(lazul2, fadeValue);  
        analogWrite(lblanco, fadeValue);
        analogWrite(lblanco2, fadeValue);   
        delay(1500);  
      }
      //lcdoff();
      ledvoff();
      anochecer = 1;
    }
    
    // A las 22.05 se va apagando el blanco y un poco al azul

    if (hour == 22 && minute ==5 )
    {
      ////lcdini();
      ledvon();
       //spi_trans("El Sol",0,5);
      //spi_trans("se acuesta ",1,4);
      for(int fadeValue = 150 ; fadeValue <= 254; fadeValue +=1) { 
        analogWrite(lblanco, fadeValue);
        analogWrite(lblanco2, fadeValue);   
        delay(1000);
      }
      for(int fadeValue = 150 ; fadeValue <= 254; fadeValue +=1) { 
        analogWrite(lrojo, fadeValue);
        analogWrite(lazul, fadeValue);
        analogWrite(lazul2, fadeValue);   
        delay(1000);
      }
      ledvoff();
      //lcdoff();
    }
    
    //A las 22.30 solo leds azules
    if (hour == 22 && minute ==30 && anochecer == 0)
    {
       //i=random(0,6);
       //Serial.print(anocheceres[i]);
      analogWrite(lblanco, 255 );
      analogWrite(lblanco2, 255 );
      analogWrite(lrojo, 255 );
      delay(5000);
      anochecer=1;
      amanecer=0;
    }
    
    // A las 23:10 se apaga la luz
    if (hour == 23 && minute  ==10 && anochecer == 1)
    {
     digitalWrite(rele1,LOW);
     digitalWrite(rele2,LOW);
     digitalWrite(rele4,LOW);
      anochecer=0;
    }
  }
}
 
Última edición:
Bueno pues ya he conseguido que se enciendan, ya he encontrado el problema, en la linea que dice

if (hour == 10 && minute ==5)

poniendo

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
 
Estado
Cerrado para nuevas respuestas.
Atrás
Arriba