//////////////////////////////////// //Firmware del proyecto HAPA // //Desarrollado por Ronal Celaya y // //Carlos Soto. Fundación CENIDTEL // #include "Wire.h" #include "LiquidCrystal.h" //#include <avr/io.h> #define DS1307 0x68 //Dirección del RTC #define DS1621 0x48 //Dirección del sensor de temperatura #define PCF85741 0x20 //Direcciones de los expansores de puertos #define PCF85742 0x21 //Cambia dependiendo del modelo PCF8574A ó PCF8574 //#define d1 0x10 //#define d2 0x20 //#define d3 0x40 //#define d4 0x80 #define comandoTemp 0x03 //Comando para obtener la temperatura del SHT15 #define comandoHume 0x04 //Comando para obtener la humedad del SHT15 #define pinDatos 9 #define pinReloj 8 #define pinSMH 13 /*Aumenta los segundos, minutos y horas de la Alarma o la Hora*/ #define pinCamb 12 /*Entra en modo de configuración de la Alarma*/ #define pinCH 11 /*Entra en modo de configuración de la Hora*/ #define pinCA 10 //En modo de configuración de la alarma, elige el día para la alarma. En modo de visión de la alarma, muestra los días //#define pinRiego 0 int vecDiaC[14]={2,1,2,2,2,3,2,4,2,5,2,6,2,7}, //Vector donde se guardan los días de configuración de la alarma. Sigue la lógica {Lun,check,Mar,check...} elecc=2; unsigned int activAlar=0;//La alarma esta activada(1) o desactivada(0) byte horasT=19, minutosT=45, //segundosT=0, horasC=19, minutosC=44; int diaAC=1, diaAT=1; //segundosC=0; //byte numbcd, // decena, // unidad, // num4par[2]={0,0}; //byte horasD, // horasU, // minutosD, // minutosU; //byte segundosC=0, minutosC=0, horasC=12, // horasCD=0, horasCU=0, minutosCD=0, minutosCU=0; // //byte segundosT=0, minutosT=0, horasT=12, // horasTD=0, horasTU=0, minutosTD=0, minutosTU=0; byte graf[8]={B11111,// ##### B10101,// # # # B10101,// # # # B10111,// # ### B10001,// # # B10001,// # # B10001,// # # B11111},// ##### check[8]={B00000,// B00000,// B00001,// # B00010,// # B10100,// # # B01000,// # B00000,// B00000},// borrar[8]={B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000}; LiquidCrystal lcd(7,6,5,4,3,2);//Definición de los pines del LCD byte decimal2bcd(byte val) { return ( (val/10*16) + (val%10) ); //Conversión decimal a BCD } byte bcd2decimal(byte val) { return ( (val/16*10) + (val%16) ); //Conversión BCD a decimal } void ajustarRelojInterno(byte segundos, //Función para ajustar el RTC byte minutos, byte horas, byte diaSemana, byte diaMes, byte mes, byte ano) { Wire.beginTransmission(DS1307); //Envía el comando de inicio Wire.send(0x00); //Se ubica en la dirección de memoria 0 //Wire.send(0x01); Wire.send(decimal2bcd(segundos)); //Envía el valor de los segundos, Wire.send(decimal2bcd(minutos)); //minutos, Wire.send(decimal2bcd(horas)); //horas, Wire.send(decimal2bcd(diaSemana)); //día de la semana, 1, 2, 3,..., 7, Wire.send(decimal2bcd(diaMes)); //día del mes, 1, 2, 3,..., 28, 29,..., Wire.send(decimal2bcd(mes)); //mes del año, Wire.send(decimal2bcd(ano)); //año Wire.endTransmission(); } void leerReloj(byte *segundos, //Función para leer el RTC byte *minutos, byte *horas, byte *diaSemana, byte *diaMes, byte *mes, byte *ano) { Wire.beginTransmission(DS1307); Wire.send(0x00); //Se ubica en la dirección de memoria 0 //Wire.send(0x01); Wire.endTransmission(); //Reiniciar la transmisión Wire.requestFrom(DS1307,7); //Espera por una respuesta de 7 bytes *segundos = bcd2decimal(Wire.receive() & 0x7F); //Lee el valor de los segundos y los enmascara *minutos = bcd2decimal(Wire.receive()); //minutos *horas = bcd2decimal(Wire.receive() & 0x3F); //hora y la enmascara *diaSemana = bcd2decimal(Wire.receive()); *diaMes = bcd2decimal(Wire.receive()); *mes = bcd2decimal(Wire.receive()); *ano = bcd2decimal(Wire.receive()); } /*void leerReloj(byte *minutos, byte *horas) { Wire.beginTransmission(DS1307); Wire.send(0x01); Wire.endTransmission(); Wire.requestFrom(DS1307,7); *minutos = bcd2decimal(Wire.receive()); *horas = bcd2decimal(Wire.receive() & 0x3F); }*/ void elegirDia(byte dia) //Función para imprimir el nombre del día { switch(dia) { case 1: lcd.print("Lun."); break; case 2: lcd.print("Mar."); break; case 3: lcd.print("Mie."); break; case 4: lcd.print("Jue."); break; case 5: lcd.print("Vie."); break; case 6: lcd.print("Sab."); break; case 7: lcd.print("Dom."); break; } } void iniciarTemperatura() //Función para la inicialización del sensor de temperatura { Wire.beginTransmission(DS1621); //Comienza la comunicación Wire.send(0xAC); Wire.send(0x02); Wire.beginTransmission(DS1621); Wire.send(0xEE); Wire.endTransmission(); delay(15); } void leerTemperatura(int *temp) { Wire.beginTransmission(DS1621); Wire.send(0xAA); Wire.endTransmission(); Wire.requestFrom(DS1621,1); //Espera por una respuesta de 1 byte *temp = Wire.receive(); } //void escribirI2C(byte direc, byte dec1, byte uni1, byte dec2, byte uni2) //Escribe, mediante el expansor de puertos indicado, cada digito en el respectivo display //{ // Wire.beginTransmission(direc); // Wire.send(dec1 | d1); // Wire.send(uni1 | d2); // Wire.send(dec2 | d3); // Wire.send(uni2 | d4); // Wire.endTransmission(); //} // //void uniYdec(byte num) //Separa los valores en decenas y unidades y escribe los valores por individual //{ // numbcd = decimal2bcd(num); // unidad = numbcd & 0x0F; // decena = (numbcd & 0xF0) >> 4; // num4par[0] = unidad; // num4par[1]= decena; //} /*byte leerExpansor() { Wire.beginTransmission(PCF85741); Wire.send(0xFF); Wire.endTransmission(); Wire.requestFrom(PCF85741,1); return Wire.receive(); }*/ ///////////SHT15//////////////////////// //Funciones para la lectura del SHT15/// int leerDatos (int numBits) //Función para leer datos en forma serial. { int deci = 0; for (int i=0; i<numBits; i++) { //digitalWrite(pinReloj,HIGH); PORTB|=_BV(PB0); deci = (deci<<1) + digitalRead(pinDatos); //digitalWrite(pinReloj,LOW); PORTB&=~_BV(PB0); } return deci; } void iniciarTrans()//Rutina para iniciar la transmisión { PORTB|=_BV(PB0);/*digitalWrite(pinReloj,HIGH);*/ DDRB|=_BV(DDB1);/*pinMode(pinDatos,OUTPUT);*/ PORTB&=~_BV(PB1);/*digitalWrite(pinDatos,LOW);*/ PORTB&=~_BV(PB0);/*digitalWrite(pinReloj,LOW);*/ PORTB|=_BV(PB0);/*digitalWrite(pinReloj,HIGH);*/ PORTB|=_BV(PB1);/*digitalWrite(pinDatos,HIGH);*/ PORTB&=~_BV(PB0);/*digitalWrite(pinReloj,LOW);*/ } void enviarComando(int comando) { //shiftOut(pinDatos, pinReloj, MSBFIRST, comando); for(int i=0;i<8;i++){ digitalWrite(pinDatos,!!(comando & (1<<(7-i)))); //Enviar datos en forma serial. Tomado de la función shiftOut PORTB|=_BV(PB0); PORTB&=~_BV(PB0); } PORTB|=_BV(PB0);/*digitalWrite(pinReloj,HIGH);*/ DDRB&=~_BV(DDB1);/*pinMode(pinDatos,INPUT);*/ /*if (digitalRead(pinDatos)) Serial.println("Error del ACK bajo");*/ PORTB&=~_BV(PB0);/*digitalWrite(pinReloj,LOW);*/ /*if (!digitalRead(pinDatos)) Serial.println("Error del ACK alto");*/ } int recibirDato() { int datos; DDRB&=~_BV(DDB1);/*pinMode(pinDatos,INPUT);*/ // waitForResult(); while(bit_is_set(PINB,1)/*digitalRead(pinDatos)*/){ } datos = leerDatos(8) << 8; DDRB|=_BV(DDB1);/*pinMode(pinDatos,OUTPUT);*/ PORTB&=~_BV(PB1);/*digitalWrite(pinDatos,LOW);*/ PORTB|=_BV(PB0);/*digitalWrite(pinReloj,HIGH);*/ PORTB&=~_BV(PB0);/*digitalWrite(pinReloj,LOW);*/ DDRB&=~_BV(PB1);/*pinMode(pinDatos,INPUT);*/ return datos |= leerDatos(8); } float tempe() { int dato; float medida; iniciarTrans(); enviarComando(comandoTemp); dato=recibirDato(); return medida=-40.1+0.01*dato; } float hume() { int dato; float medida; // const float c1=-2.0468, // c2=0.0367, // c3=-1.5955e-6; iniciarTrans(); enviarComando(comandoHume); dato=recibirDato(); return medida=-2.0468+0.0367*dato+-1.5955e-6*dato*dato; } void setup() { byte segundos, minutos, horas, diaSemana, diaMes, mes ,ano; Wire.begin(); //pinMode(pinReloj,OUTPUT); DDRB|=_BV(DDB0); Serial.begin(9600); DDRB&=~_BV(DDB5);/*pinMode(pinSMH, INPUT);*/ DDRB&=~_BV(DDB4);/*pinMode(pinCamb, INPUT);*/ DDRB&=~_BV(DDB3);/*pinMode(pinCH, INPUT);*/ DDRB&=~_BV(DDB2);/*pinMode(pinCA, INPUT);*/ DDRC|=_BV(DDC0); //pinMode(pinRiego,OUTPUT); lcd.begin(16,2); lcd.createChar(0,graf); lcd.createChar(1,check); lcd.createChar(2,borrar); segundos = 0; minutos = 43; horas = 19; diaSemana = 4; diaMes = 18; mes = 8; ano = 10; ajustarRelojInterno(segundos, minutos, horas, diaSemana, diaMes, mes ,ano); iniciarTemperatura(); } void loop() { byte segundos, minutos, horas, diaSemana, diaMes, mes ,ano; int temp, i=0, acumH=0, acumCamb=0, acumA=0, acumCA=0, acumElec=1; float temperatura, humedad; byte lec; lcd.noBlink(); PORTC|=_BV(PC0); ////Mostrar hora y fecha//// while(acumCamb==0 && acumH==0) { if(bit_is_set(PINB,4))//if(digitalRead(pinCamb)) { delay(200); acumCamb=1; } if(bit_is_set(PINB,3))//if(digitalRead(pinCH)) { delay(200); acumH=1; } leerReloj(&segundos, &minutos, &horas, &diaSemana, &diaMes, &mes, &ano); lcd.clear(); lcd.setCursor(0,0); elegirDia(diaSemana); lcd.setCursor(8,0); if(diaMes<10) { lcd.print(0); lcd.print(diaMes,DEC); } else { lcd.print(diaMes,DEC); } lcd.print("/"); if(mes<10) { lcd.print(0); lcd.print(mes,DEC); } else { lcd.print(mes,DEC); } lcd.print("/"); if(ano<10) { lcd.print(0); lcd.print(ano,DEC); } else { lcd.print(ano,DEC); } lcd.setCursor(5,1); if(horas<10) { lcd.print(0); lcd.print(horas,DEC); } else { lcd.print(horas,DEC); } lcd.print(":"); if(minutos<10) { lcd.print(0); lcd.print(minutos,DEC); } else { lcd.print(minutos,DEC); } /*lcd.print(":"); if(segundos<10) { lcd.print(0); lcd.print(segundos,DEC); } else { lcd.print(segundos,DEC); }*/ if(activAlar==1) { if((horasC==horas) && (minutosC==minutos) && (vecDiaC[(diaSemana<<1)-2]==1)) { //digitalWrite(pinRiego,HIGH); //Serial.println("Comienzo"); PORTC&=~_BV(PC0); } if((horasT==horas) && (minutosT==minutos)) { //digitalWrite(pinRiego,LOW); PORTC|=_BV(PC0); } if(activAlar==1) { lcd.setCursor(15,1); lcd.write(0); } } delay(20); } ////Mostrar hora y temperatura del DS1307//// while(acumCamb==1 && acumH==0) { if(bit_is_set(PINB,4))//if(digitalRead(pinCamb)) { delay(300); acumCamb=2; i=0; } leerTemperatura(&temp); leerReloj(&segundos, &minutos, &horas, &diaSemana, &diaMes, &mes, &ano); lcd.clear(); lcd.setCursor(0,0); lcd.print("Temp1:"); lcd.setCursor(9,0); lcd.print((float)temp,2); lcd.print((char)223); lcd.print("C"); lcd.setCursor(5,1); if(horas<10) { lcd.print(0); lcd.print(horas,DEC); } else { lcd.print(horas,DEC); } lcd.print(":"); if(minutos<10) { lcd.print(0); lcd.print(minutos,DEC); } else { lcd.print(minutos,DEC); } /*lcd.print(":"); if(segundos<10) { lcd.print(0); lcd.print(segundos,DEC); } else { lcd.print(segundos,DEC); }*/ if(activAlar==1) { lcd.setCursor(15,1); lcd.write(0); } i++; if(i==500) { acumCamb=0; i=0; } delay(20); } ////Mostrar hora y temperatura del SHT15//// while(acumCamb==2 && acumH==0) { if(bit_is_set(PINB,4))//if(digitalRead(pinCamb)) { delay(200); acumCamb=3; i=0; } leerReloj(&segundos, &minutos, &horas, &diaSemana, &diaMes, &mes, &ano); temperatura=tempe(); lcd.clear(); lcd.setCursor(0,0); lcd.print("Temp2:"); lcd.setCursor(9,0); lcd.print(temperatura,2); lcd.print((char)223); lcd.print("C"); lcd.setCursor(5,1); if(horas<10) { lcd.print(0); lcd.print(horas,DEC); } else { lcd.print(horas,DEC); } lcd.print(":"); if(minutos<10) { lcd.print(0); lcd.print(minutos,DEC); } else { lcd.print(minutos,DEC); } /*lcd.print(":"); if(segundos<10) { lcd.print(0); lcd.print(segundos,DEC); } else { lcd.print(segundos,DEC); }*/ if(activAlar==1) { lcd.setCursor(15,1); lcd.write(0); } i++; if(i==12) { acumCamb=0; i=0; } delay(800); } ////Mostrar hora y humedad//// while(acumCamb==3 && acumH==0) { if(bit_is_set(PINB,4))//if(digitalRead(pinCamb)) { delay(200); acumCamb=4; i=0; } leerReloj(&segundos, &minutos, &horas, &diaSemana, &diaMes, &mes, &ano); humedad=hume(); lcd.clear(); lcd.setCursor(0,0); lcd.print("Humedad: "); lcd.print(humedad,2); lcd.setCursor(15,0); lcd.print("%"); lcd.setCursor(5,1); if(horas<10) { lcd.print(0); lcd.print(horas,DEC); } else { lcd.print(horas,DEC); } lcd.print(":"); if(minutos<10) { lcd.print(0); lcd.print(minutos,DEC); } else { lcd.print(minutos,DEC); } /*lcd.print(":"); if(segundos<10) { lcd.print(0); lcd.print(segundos,DEC); } else { lcd.print(segundos,DEC); }*/ if(activAlar==1) { lcd.setCursor(15,1); lcd.write(0); } i++; if(i==12) { acumCamb=0; i=0; } delay(800); } ////Ver Riego//// while(acumCamb==4 && acumH==0) { if(bit_is_set(PINB,4))//if(digitalRead(pinCamb)) { delay(300); acumCamb=5; i=0; } lcd.noBlink(); lcd.clear(); lcd.setCursor(2,0); lcd.print("Config. del"); lcd.setCursor(5,1); lcd.print("Riego"); delay(2000); while(acumCamb==4) { if(bit_is_set(PINB,4))//if(digitalRead(pinCamb)) { delay(300); acumCamb=5; i=0; } if(bit_is_set(PINB,3))//if(digitalRead(pinCA)) { delay(300); acumCA=1; } lcd.noBlink(); lcd.clear(); lcd.setCursor(3,0); lcd.print("Comienza:"); lcd.setCursor(0,1); if(horasC<10) { lcd.print(0); lcd.print(horasC,DEC); } else { lcd.print(horasC,DEC); } lcd.print(":"); if(minutosC<10) { lcd.print(0); lcd.print(minutosC,DEC); } else { lcd.print(minutosC,DEC); } if(activAlar==1) { lcd.setCursor(5,1); lcd.write(0); } lcd.setCursor(11,1); if(bit_is_set(PINB,2)) { delay(300); acumElec++; if(acumElec>7) { acumElec=1; } } lcd.write(vecDiaC[(acumElec<<1)-2]); elegirDia(vecDiaC[(acumElec<<1)-1]); // switch(acumElec) // { // case 1: // lcd.write(vecDia[0]); // elegirDia(vecDia[1]); // break; // // case 2: // lcd.write(vecDia[2]); // elegirDia(vecDia[3]); // break; // // case 3: // lcd.write(vecDia[4]); // elegirDia(vecDia[5]); // break; // // case 4: // lcd.write(vecDia[6]); // elegirDia(vecDia[7]); // break; // // case 5: // lcd.write(vecDia[8]); // elegirDia(vecDia[9]); // break; // // case 6: // lcd.write(vecDia[10]); // elegirDia(vecDia[11]); // break; // // case 7: // lcd.write(vecDia[12]); // elegirDia(vecDia[13]); // break; // } while(acumCA==1) { if(bit_is_set(PINB,3))//if(digitalRead(pinCA)) { delay(300); acumCA=2; } lcd.setCursor(11,1); lcd.blink(); if(bit_is_set(PINB,5)) { delay(300); //lcd.print(char(254)); //lcd.setCursor(12,1); diaAC++; lcd.write(vecDiaC[(diaAC<<1)-2]); if(diaAC>7) { diaAC=1; } elegirDia(diaAC); } if(bit_is_set(PINB,2)) { delay(300); elecc++; if(elecc>2) { elecc=1; } lcd.write(elecc); vecDiaC[(diaAC<<1)-2]=elecc; vecDiaC[(diaAC<<1)-1]=diaAC; } } while(acumCA==2) { if(bit_is_set(PINB,3))//if(digitalRead(pinCA)) { delay(300); acumCA=3; } lcd.setCursor(5,1); lcd.blink(); if(bit_is_set(PINB,5))//if(digitalRead(pinSMH)) { delay(300); activAlar++; if(activAlar==1) { lcd.write(0); } else if(activAlar==2) { lcd.print(char(254)); activAlar=0; } } } while(acumCA==3) { if(bit_is_set(PINB,3))//if(digitalRead(pinCA)) { delay(300); acumCA=4; } lcd.setCursor(4,1); lcd.blink(); if(bit_is_set(PINB,5))//if(digitalRead(pinSMH)) { delay(200); minutosC++; lcd.setCursor(3,1); if(minutosC>59) { minutosC=0; } if(minutosC<10) { lcd.print(0); lcd.print(minutosC,DEC); } else { lcd.print(minutosC,DEC); } } } while(acumCA==4) { if(bit_is_set(PINB,3))//if(digitalRead(pinCA)) { delay(300); acumCA=0; } lcd.setCursor(1,1); lcd.blink(); if(bit_is_set(PINB,5))//if(digitalRead(pinSMH)) { delay(200); horasC++; lcd.setCursor(0,1); if(horasC>23) { horasC=0; } if(horasC<10) { lcd.print(0); lcd.print(horasC,DEC); } else { lcd.print(horasC,DEC); } } } i++; if(i==500) { acumCamb=0; i=0; } delay(20); } } while(acumCamb==5 && acumH==0) { if(bit_is_set(PINB,4))//if(digitalRead(pinCamb)) { delay(300); acumCamb=0; i=0; } while(acumCamb==5) { if(bit_is_set(PINB,4))//if(digitalRead(pinCamb)) { delay(300); acumCamb=0; } if(bit_is_set(PINB,3))//if(digitalRead(pinCA)) { delay(300); acumCA=1; } lcd.noBlink(); lcd.clear(); lcd.setCursor(4,0); lcd.print("Termina:"); lcd.setCursor(0,1); if(horasT<10) { lcd.print(0); lcd.print(horasT,DEC); } else { lcd.print(horasT,DEC); } lcd.print(":"); if(minutosT<10) { lcd.print(0); lcd.print(minutosT,DEC); } else { lcd.print(minutosT,DEC); } if(activAlar==1) { lcd.setCursor(5,1); lcd.write(0); } lcd.setCursor(11,1); if(bit_is_set(PINB,2)) { delay(300); acumElec++; if(acumElec>7) { acumElec=1; } } lcd.write(vecDiaC[(acumElec<<1)-2]); elegirDia(vecDiaC[(acumElec<<1)-1]); // while(acumCA==1) // { // if(bit_is_set(PINB,3))//if(digitalRead(pinCA)) // { // delay(300); // acumCA=2; // } // lcd.setCursor(12,1); // lcd.blink(); // // if(bit_is_set(PINB,5)) // { // delay(300); // diaAT++; // lcd.write(vecDiaT[(diaAT<<1)-2]); // if(diaAT>7) // { // diaAT=1; // } // elegirDia(diaAT); // } // if(bit_is_set(PINB,2)) // { // delay(300); // elecc++; // if(elecc>2) // { // elecc=1; // } // lcd.write(elecc); // // vecDiaC[(diaAT<<1)-2]=elecc; // vecDiaC[(diaAT<<1)-1]=diaAT; // } // } while(acumCA==1) { if(bit_is_set(PINB,3))//if(digitalRead(pinCA)) { delay(300); acumCA=2; } lcd.setCursor(4,1); lcd.blink(); if(bit_is_set(PINB,5))//if(digitalRead(pinSMH)) { delay(200); minutosT++; lcd.setCursor(3,1); if(minutosT>59) { minutosT=0; } if(minutosT<10) { lcd.print(0); lcd.print(minutosT,DEC); } else { lcd.print(minutosT,DEC); } } } while(acumCA==2) { if(bit_is_set(PINB,3))//if(digitalRead(pinCA)) { delay(300); acumCA=0; } lcd.setCursor(1,1); lcd.blink(); if(bit_is_set(PINB,5))//if(digitalRead(pinSMH)) { delay(200); horasT++; lcd.setCursor(0,1); if(horasT>23) { horasT=0; } if(horasT<10) { lcd.print(0); lcd.print(horasT,DEC); } else { lcd.print(horasT,DEC); } } } i++; if(i==500) { acumCamb=0; i=0; } delay(20); } } ////Configuración de la hora//// while(acumH==1) { if(bit_is_set(PINB,3))//if(digitalRead(pinCH)) { delay(300); Wire.beginTransmission(DS1307); Wire.send(0x03); Wire.send(decimal2bcd(diaSemana)); // Wire.send(decimal2bcd(horas)); Wire.endTransmission(); acumH=2; } lcd.setCursor(0,0); lcd.blink(); if(bit_is_set(PINB,5))//if(digitalRead(pinSMH)) { delay(300); diaSemana++; if(diaSemana>7) { diaSemana=1; } elegirDia(diaSemana); } } while(acumH==2) { unsigned int resto=0; if(bit_is_set(PINB,3))//if(digitalRead(pinCH)) { delay(300); Wire.beginTransmission(DS1307); Wire.send(0x04); Wire.send(decimal2bcd(diaMes)); // Wire.send(decimal2bcd(horas)); Wire.endTransmission(); acumH=3; } lcd.setCursor(9,0); lcd.blink(); if(bit_is_set(PINB,5))//if(digitalRead(pinSMH)) { delay(300); diaMes++; if(mes==4 || mes==6 || mes==9 || mes==11) { if(diaMes>30) { diaMes=1; } } else if(mes==2) { if(ano%4==0) { if(diaMes>29) { diaMes=1; } } else { if(diaMes>28) { diaMes=1; } } } else { if(diaMes>31) { diaMes=1; } } lcd.setCursor(8,0); if(diaMes<10) { lcd.print(0); lcd.print(diaMes,DEC); } else { lcd.print(diaMes,DEC); } } } while(acumH==3) { if(bit_is_set(PINB,3))//if(digitalRead(pinCH)) { delay(300); Wire.beginTransmission(DS1307); Wire.send(0x05); Wire.send(decimal2bcd(mes)); // Wire.send(decimal2bcd(horas)); Wire.endTransmission(); acumH=4; } lcd.setCursor(12,0); lcd.blink(); if(bit_is_set(PINB,5))//if(digitalRead(pinSMH)) { delay(300); mes++; if(mes>12) { mes=1; } lcd.setCursor(11,0); if(mes<10) { lcd.print(0); lcd.print(mes,DEC); } else { lcd.print(mes,DEC); } } } while(acumH==4) { if(bit_is_set(PINB,3))//if(digitalRead(pinCH)) { delay(300); Wire.beginTransmission(DS1307); Wire.send(0x06); Wire.send(decimal2bcd(ano)); // Wire.send(decimal2bcd(horas)); Wire.endTransmission(); acumH=5; } lcd.setCursor(15,0); lcd.blink(); if(bit_is_set(PINB,5))//if(digitalRead(pinSMH)) { delay(300); ano++; if(ano>99) { ano=1; } lcd.setCursor(14,0); if(ano<10) { lcd.print(0); lcd.print(ano,DEC); } else { lcd.print(ano,DEC); } } } while(acumH==5) { if(bit_is_set(PINB,3))//if(digitalRead(pinCH)) { delay(300); Wire.beginTransmission(DS1307); Wire.send(0x00); Wire.send(0); Wire.send(decimal2bcd(minutos)); // Wire.send(decimal2bcd(horas)); Wire.endTransmission(); acumH=6; } lcd.setCursor(9,1); lcd.blink(); if(bit_is_set(PINB,5))//if(digitalRead(pinSMH)) { delay(300); minutos++; if(minutos>59) { minutos=0; //horas++; } // Wire.beginTransmission(DS1307); // Wire.send(0x01); // Wire.send(decimal2bcd(minutos)); // // Wire.send(decimal2bcd(horas)); // Wire.endTransmission(); // leerReloj(&minutos, &horas); lcd.setCursor(8,1); // if(horas<10) // { // lcd.print(0); // lcd.print(horas,DEC); // } // else // { // lcd.print(horas,DEC); // } // lcd.print(":"); if(minutos<10) { lcd.print(0); lcd.print(minutos,DEC); } else { lcd.print(minutos,DEC); } // lcd.print(":"); // // if(segundos<10) // { // lcd.print(0); // lcd.print(segundos,DEC); // } // else // { // lcd.print(segundos,DEC); // } if(activAlar==1) { lcd.setCursor(15,1); lcd.write(0); } } } while(acumH==6) { if(bit_is_set(PINB,3))//if(digitalRead(pinCH)) { delay(300); Wire.beginTransmission(DS1307); Wire.send(0x00); Wire.send(0); Wire.beginTransmission(DS1307); Wire.send(0x02); Wire.send(decimal2bcd(horas)); Wire.endTransmission(); acumH=0; } lcd.setCursor(6,1); lcd.blink(); if(bit_is_set(PINB,5))//if(digitalRead(pinSMH)) { delay(300); horas++; if(horas>23) { horas=0; } // Wire.beginTransmission(DS1307); // Wire.send(0x02); // Wire.send(decimal2bcd(horas)); // Wire.endTransmission(); // leerReloj(&minutos, &horas); lcd.setCursor(5,1); if(horas<10) { lcd.print(0); lcd.print(horas,DEC); } else { lcd.print(horas,DEC); } // lcd.print(":"); // // if(minutos<10) // { // lcd.print(0); // lcd.print(minutos,DEC); // } // else // { // lcd.print(minutos,DEC); // } // // lcd.print(":"); // // if(segundos<10) // { // lcd.print(0); // lcd.print(segundos,DEC); // } // else // { // lcd.print(segundos,DEC); // } if(activAlar==1) { lcd.setCursor(15,1); lcd.write(0); } } } ////Configurar riego//// }