Ayuda reles codigo

Tema en 'Programación' iniciado por Joiba, 16 Jul 2013.

  1. Joiba

    Joiba

    Mensajes:
    148
    Registrado:
    5 Feb 2008
    Ubicación:
    España
    Hola a todos resulta que no consigo hacer funcionar el rele de la fuente para el dimeo, el dimeo si que lo hace bien.
    Este codigo es gracias a el compañero Ben y lo he modificado a mis necesidades.
    Gracias por vuestra ayuda:

    //Pinout//
    /*
    PWM2
    PWM3
    PWM4
    PWM5 - Sensores de Temperatura
    PWM6 - Receptor IRDA
    PWM7
    PWM8 - Dimeo 1 Azules
    PWM9
    PWM10
    PWM11
    PWM12
    PWM13
    D22 - rele1 fuente de lampara leds
    D23 - rele2 Bombra de reposicion
    D24 - rele3 Bomba de subida
    D25 - rele4
    D26 - rele5
    D27 - rele6
    D28 - rele7
    D29 - rele8
    D30 - triac ventiladores lampara
    D31 - triac ventilador sump
    D32 - triac ventiladores urna ppal
    D33 - triac/rele luz sump
    D34 - triac Luz Luna?? o dimeo..
    D35
    D36
    D37
    D38
    D39
    D40
    D41
    D42
    D43
    D44
    D45
    D46
    D47
    D48
    D49
    D50
    D51
    D52
    D53
    A0 - Boya nivel relleno 1
    A1 - Boya nivel relleno 2
    A2 - Boya nivel ppal
    A3
    A4
    A5
    A6
    A7
    A8
    A9
    A10
    A11
    A12
    A13
    A14
    A15
    */


    #include <WProgram.h> // necesaria quita error de copilacion
    #include <EEPROM.h> // read/write eeprom
    #include <avr/wdt.h> //perro
    #include <Wire.h> // comunicacion I2C
    #include <IRremote.h> // #include <NECIRrcv.h> // Mando a Distacia
    #include <OneWire.h> // temeperatura
    #include <DallasTemperature.h> //temperatura DS1820
    #include <LiquidCrystal_I2C.h> // Pantalla LCD
    // direcciones de memoria del I2C
    #define Reloj_I2C 0x68
    LiquidCrystal_I2C lcd(0x3f,20,4);


    //// Pin (I/O) /////
    #define ONE_WIRE_BUS 25//pin de temperatura 25
    int RECV_PIN = 23; // pin del mando a distancia
    int Rele1Luces =22;
    int DimeoA = 8;
    OneWire oneWire(ONE_WIRE_BUS);//temperatura
    DallasTemperature sensores(&oneWire);// temperatura

    ////+++++++++++++++++++++++++++++++++///

    //////////////// variables//////////////

    int ValorFaderMaxA = 180;

    int ValorFaderA = 0;

    int ValorHora = 0; // valor de la hora para poder comparar

    int horaON = 10; //hora a la que empiezan a encender
    int minutoON = 30;
    int horaOFF = 21; //hora a la que se apagan
    int minutoOFF = 0;

    int TiempoDimeoA=25; //el valor bueno es 25 puesto 1 para pruebas

    int TiempoDimeando = (ValorFaderMaxA*TiempoDimeoA)/60;

    int ONLucesA = (horaON*60)+minutoON;
    int OFFLucesA = ((horaOFF*60)+minutoOFF)-TiempoDimeando;

    int ContadorA=0;

    int ContadorDiaA=0;

    int ContadorNocheA=0;


    int TempAcu;//variable donde guardaremos la temperatura del acuario


    byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; //del reloj

    ////// constantes Mado distancia
    #define mando_1 16621663


    ///////////////////Funciones /////////////////////////////

    //////// leer la hora /////////////
    void Leer_Reloj(byte *second,
    byte *minute,
    byte *hour,
    byte *dayOfWeek,
    byte *dayOfMonth,
    byte *month,
    byte *year)
    {
    // Resetea el registro puntero
    Wire.beginTransmission(Reloj_I2C);
    Wire.send(0);
    Wire.endTransmission();
    Wire.requestFrom(Reloj_I2C, 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());
    }


    // 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) );}

    //// LEDS PANTALLA////

    void LucesA() {//Como son los primeros y ultimos solo estos controlan el rele
    ContadorA=0;// se reinicia contador si no cumple ninguna de las condiciones
    //On//
    if (ValorHora >= ONLucesA && ValorHora <= OFFLucesA && ValorFaderA < ValorFaderMaxA)
    {
    if (ValorFaderA == 0)
    { digitalWrite(Rele1Luces,LOW); //sera low o high segun se conecten los reles
    }
    analogWrite (DimeoA,ValorFaderA);
    ValorFaderA=ValorFaderA+1;
    ContadorA=ContadorDiaA;
    }
    //OFF//
    if (ValorHora >= OFFLucesA && ValorFaderA != 0 )
    {
    ValorFaderA=ValorFaderA-1;
    analogWrite (DimeoA,ValorFaderA);
    if (ValorFaderA == 0) {
    digitalWrite(Rele1Luces,HIGH);
    }
    ContadorA=ContadorNocheA;
    }
    }

    void setup()
    {
    lcd.init();
    lcd.backlight();
    }


    void loop()
    {
    Leer_Reloj(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
    ValorHora = (hour*60)+minute;
    ///// codiciones de los canales /////
    if (ContadorA ==TiempoDimeoA)
    {
    LucesA(); // funcion de dimeo pantalla
    }

    /////// incremento contador de canales ////////
    ContadorA=ContadorA+1;

    lcd.setCursor(0, 0);

    if (dayOfMonth < 10) lcd.print("0");
    lcd.print(dayOfMonth, DEC);
    lcd.print("/");
    if (month < 10) lcd.print("0");
    lcd.print(month, DEC);
    lcd.print("/");
    if (year < 10) lcd.print("0");
    lcd.print(year, DEC);
    lcd.setCursor(12, 0);
    if (hour < 10) lcd.print("0");
    lcd.print(hour, DEC);
    lcd.print(":");
    if (minute < 10) lcd.print("0");
    lcd.print(minute, DEC);
    lcd.print(":");
    if (second < 10) lcd.print("0");
    lcd.print(second, DEC);
    lcd.setCursor(0,2);
    lcd.print("Dimeo Pantalla:");
    lcd.print(ValorFaderA, DEC);

    /////TEMPERATURA/////

    // Lee el valor de temperatura de todos los sensores conectados al bus
    sensores.requestTemperatures();

    // Crea una variable llamada ”T1” asignándole el valor de temperatura obtenido con sensores.getTemp(0),el valor 0 indica que es el primer sensor que encuentre en el bus//
    float T1(sensores.getTempCByIndex(0));

    lcd.setCursor(0,3);
    lcd.print("Temp. Acuario:");
    lcd.print(T1);

    delay(800);
    }
     
  2. Joiba

    Joiba

    Mensajes:
    148
    Registrado:
    5 Feb 2008
    Ubicación:
    España
    Mas de 190 visitas y ni un solo comentario???
    Me parece que no soy el unico que no sabe mucho de este tema.
     
  3. manolete

    manolete

    Mensajes:
    122
    Registrado:
    15 Dic 2010
    Ubicación:
    esp
    Hola, no soy experto ni mucho menos pero en el setup creo que te falta algo como esto "pinMode (rele1, OUTPUT);// FUENTE ALIMENTACION ON/OFF" pero para tus necesidades. Saludos