Reloj con alarma programado por enconder. Luna es gay
Dependencies: mbed QEI Debounced ds3231 TextLCD RTC-DS1307 Pulse1
main.cpp
- Committer:
- diavad
- Date:
- 2019-08-13
- Revision:
- 0:fd394f5c0449
File content as of revision 0:fd394f5c0449:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include "mbed.h" #include "DebouncedIn.h" #include "TextLCD.h" #include "QEI.h" #include "ds3231.h" #include "Rtc_Ds1307.h" #include "string.h" #include <Pulse1.h> #define ESC 0x1B ///////////////////////////////// LIB LCD TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 // Se debe conectar Vss a GND; VDD a 5V; V0 a pot con otro lado conectado a GND // El puerto A va hacia una resistencia de 200 hom a 5 V // EL puerto K va a GND Serial pc(USBTX, USBRX); ///////////////////////////////// LIB RELOJ 3231 //Ds3231 rtc(PTE0, PTE1); // SDA SCL Rtc_Ds1307 rtc(PTE0, PTE1);//SCL,SDA Rtc_Ds1307::Time_rtc tm = {}; time_t epoch_time; ///////////////////////////////// LIB Encoder QEI wheel (PTD7, PTD6, NC, 50); DebouncedIn button_enco(PTC5); int EncoderInput; int EncoderBoton; ////////////////////////////////// Sensor IRDA PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo BusOut leds(LED1,LED2,LED3); int IRDAInput; int IRDAOpcion; /////////////////////////////////////////// Declarar Variables globales int OpcionMenu; void ImprimirHora(){ int Hora=0; while(Hora==0){ lcd.cls(); Rtc_Ds1307::Time_rtc tm = {}; rtc.getTime(tm); lcd.locate(0,0); lcd.printf("Hora :"); lcd.locate(7,0); lcd.printf("%02d:",tm.hour); lcd.printf("%02d:",tm.min); lcd.printf("%02d",tm.sec); lcd.locate(0,1); lcd.printf("BY Procesadores "); wait_ms(100); if(button_enco.falling()){ Hora=1; } //epoch_time = rtc.get_epoch(); //lcd.cls(); //lcd.locate(0,0); //lcd.printf(" CLK %s", ctime(&epoch_time)); } } int LeerEncoder(){ wheel.reset(); int Valor=0; while(Valor==0){ EncoderInput=wheel.getPulses(); lcd.cls(); lcd.locate(0,0); lcd.printf("Leyendo Encoder"); lcd.locate(0,5); lcd.printf("Val : %i",wheel.getPulses()); if(button_enco.falling()){ EncoderBoton=1; EncoderInput=wheel.getPulses(); pc.printf("Boton %i\n", wheel.getPulses()); Valor=1; } wait_ms(50); } return EncoderInput; } void LeerIRDA(){ //////////////////////// Declaro Variables int header =0; //tiempo de cabecera pulso abajo const int head_H = 10884; //+20% medida con osciloscopio en microsegundos const int head_L = 7256;//-20% medida con osciloscopio int i=0; const int T_alto=1570;//ponga su tiempo de la prueba const int T_bajo=467;//ponga su tiempo de la prueba const int num_bits = 32;//ponga su numero de bits int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos int sec[num_bits];//cadena para almacenar la cadena codificada en binario 00100000110111111000100001110111 int boton1[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1,1,0}; //00100000110111111000100001110110 Boton 1 int boton2[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0}; //00100000110111110100100010110110 Boton 2 int boton3[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0}; //00100000110111111100100000110110 Boton 3 int boton4[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,0}; //00100000110111110010100011010110 Boton 4 int boton5[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,0,1,0,1,0,1,1,0}; //00100000110111111010100001010110 Boton 5 int boton6[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0}; //00100000110111110110100010010110 Boton 6 int boton7[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0}; //00100000110111111110100000010110 Boton 7 int boton8[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,0}; //00100000110111110001100011100110 Boton 8 int boton9[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0}; //00100000110111111001100001100110 Boton 9 int boton0[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,1,0}; //00100000110111110000100011110110 Boton 0 int botonEnt[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,1,1,0,0}; //00100000110111110010001011011100 Boton Ent int botonIzq[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0}; //00100000110111111110000000011110 Boton Izq int botonDer[]= {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,0,0,1,0,0,1,1,1,1,0}; //00100000110111110110000010011110 Boton Der int flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag8,flag9,flag0,flagEnt,flagIzq,flagDer; //Banderas de boton presionado int dato; // tiempo de cada dato que se lee int LeerIRDA=1; //////////////////////////////////////////////////////// Funcion leer datos IRDA leds = 1; // Color en LED Azul lcd.locate(0,0); while(LeerIRDA==1) { ini1: pc.printf("Esperando entrada control remoto: \n"); header=0; header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo if (header > head_L && header < head_H) goto seguir;//verificar que este en la tolerancia +-20% else goto ini1; seguir: //leo los datos de la trama y se meten a un arreglo wait_us(2000); for(i=0; i<(num_bits-1); ++i) // POR OSCILOSCOPIO se determina que llegan (num_bits),datos { dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control num[i]=dato; wait_us(332); } //wait(0.5); //espero un poquito antes de leer todo el arreglo y ponerlo en pantalla pc.printf(",%d",header); for(i=0; i<num_bits; ++i) { pc.printf(",%d",num[i]); } //wait(0.1); //espero e imprimo en binario pc.printf("\n\n"); for(i=0; i<num_bits; ++i) { if(num[i] > ((T_alto+T_bajo)/2)) { pc.printf("1"); sec[i]=1; // guardo la secuancia en binario } else { sec[i]=0; //guardo la secuencia en binario pc.printf("0"); } } flag1=1;flag4=1;flag7=1;flag0=1;flagDer=1; flag2=1;flag5=1;flag8=1;flagEnt=1; flag3=1;flag6=1;flag9=1;flagIzq=1; for(i=0; i<32; ++i) { if(sec[i]!=boton1[i]) //en caso de que un bit no coincida se descarta el boton 1 { //pc.printf("NO Presionaste 1"); flag1=0; } if(sec[i]!=boton2[i]) //en caso de que un bit no coincida se descarta el boton 2 { //pc.printf("NO Presionaste 2"); flag2=0; } if(sec[i]!=boton3[i]) //en caso de que un bit no coincida se descarta el boton 3 { //pc.printf("NO Presionaste 3"); flag3=0; } if(sec[i]!=boton4[i]) //en caso de que un bit no coincida se descarta el boton 3 { //pc.printf("NO Presionaste 3"); flag4=0; } if(sec[i]!=boton5[i]) //en caso de que un bit no coincida se descarta el boton 3 { //pc.printf("NO Presionaste 3"); flag5=0; } if(sec[i]!=boton6[i]) //en caso de que un bit no coincida se descarta el boton 3 { //pc.printf("NO Presionaste 3"); flag6=0; } if(sec[i]!=boton7[i]) //en caso de que un bit no coincida se descarta el boton 3 { //pc.printf("NO Presionaste 3"); flag7=0; } if(sec[i]!=boton8[i]) //en caso de que un bit no coincida se descarta el boton 3 { //pc.printf("NO Presionaste 3"); flag8=0; } if(sec[i]!=boton9[i]) //en caso de que un bit no coincida se descarta el boton 3 { //pc.printf("NO Presionaste 3"); flag9=0; } if(sec[i]!=boton0[i]) //en caso de que un bit no coincida se descarta el boton 3 { //pc.printf("NO Presionaste 3"); flag0=0; } if(sec[i]!=botonEnt[i]) //en caso de que un bit no coincida se descarta el boton 3 { //pc.printf("NO Presionaste 3"); flagEnt=0; } if(sec[i]!=botonIzq[i]) //en caso de que un bit no coincida se descarta el boton 3 { //pc.printf("NO Presionaste 3"); flagIzq=0; } if(sec[i]!=botonDer[i]) //en caso de que un bit no coincida se descarta el boton 3 { //pc.printf("NO Presionaste 3"); flagDer=0; } } if(flag1==1) { lcd.printf("\n Presionaste 1 \n"); //si coincidieron todos los bits del boton 1 leds = 2; // Led Color Rosa IRDAInput=1; LeerIRDA=0; } else if(flag2==1) { leds=2; // Led Color Amarillo lcd.printf("\n Presionaste 2 \n"); //si coincidieron todos los bits del boton 1 IRDAInput=2; LeerIRDA=0; } else if(flag3==1) { leds=2; // Led Color Verde lcd.printf("\n Presionaste 3 \n"); //si coincidieron todos los bits del boton 1 IRDAInput=3; LeerIRDA=0; } else if(flag4==1) { leds=2; // Led Color Verde lcd.printf("\n Presionaste 4 \n"); //si coincidieron todos los bits del boton 1 IRDAInput=4; LeerIRDA=0; } else if(flag5==1) { leds=2; // Led Color Verde lcd.printf("\n Presionaste 5 \n"); //si coincidieron todos los bits del boton 1 IRDAInput=5; LeerIRDA=0; } else if(flag6==1) { leds=2; // Led Color Verde lcd.printf("\n Presionaste 6 \n"); //si coincidieron todos los bits del boton 1 IRDAInput=6; LeerIRDA=0; } else if(flag7==1) { leds=2; // Led Color Verde lcd.printf("\n Presionaste 7 \n"); //si coincidieron todos los bits del boton 1 IRDAInput=7; LeerIRDA=0; } else if(flag8==1) { leds=2; // Led Color Verde lcd.printf("\n Presionaste 8 \n"); //si coincidieron todos los bits del boton 1 IRDAInput=8; LeerIRDA=0; } else if(flag9==1) { leds=2; // Led Color Verde lcd.printf("\n Presionaste 9 \n"); //si coincidieron todos los bits del boton 1 IRDAInput=9; LeerIRDA=0; } else if(flag0==1) { leds=2; // Led Color Verde lcd.printf("\n Presionaste 0 \n"); //si coincidieron todos los bits del boton 1 IRDAInput=0; LeerIRDA=0; } else if(flagEnt==1) { leds=5; // Led Color Verde lcd.printf("\n Presionaste Ent \n"); //si coincidieron todos los bits del boton 1 IRDAInput=3; LeerIRDA=0; }else if(flagIzq==1) { leds=5; // Led Color Verde lcd.printf("\n Presionaste Izq \n"); //si coincidieron todos los bits del boton 1 IRDAInput=3; LeerIRDA=0; } else if(flagDer==1) { leds=5; lcd.printf("\n Presionaste Der \n"); //si coincidieron todos los bits del boton 1 IRDAInput=3; LeerIRDA=0; } else { leds=8; // Led Color Blanco lcd.printf("boton no reconocido"); //si coincidieron todos los bits del boton 1 IRDAInput=4; LeerIRDA=0; } } wait_ms(1000); } void Menu(){ lcd.cls(); lcd.locate(0,0); lcd.printf("1_Hora"); lcd.locate(8,0); lcd.printf("3_Alarma"); lcd.locate(0,1); lcd.printf("2_Config Hora"); wait_ms(1000); } //////////////////////////////////////// Configurar Reloj ///////////////// void ConfiReloj(){ Rtc_Ds1307::Time_rtc tm = {}; //;config = 0,config = 0,config = 0,ano = 2019,hora = 0, min = 0, int configR = 0, cont = 1, set = 0; int estado = 1; leds=2; wait(0.2); while(estado == 1){ if(configR == 0) { lcd.cls(); lcd.locate(0,0); lcd.printf("Configurar reloj"); set = set + wheel.getPulses(); pc.printf("%i",set); wheel.reset(); if(set > 1) { set = 0; } if(set < 0) { set = 1; } lcd.locate(0, 1); if(set == 0) { lcd.printf(" NO "); //wait_ms(10); } else if(set == 1) { lcd.printf(" SI "); //wait_ms(10); } if(button_enco.falling()){ if(set==1){ configR=1; }else if(set!=1){ configR=0; estado=0; } } } if(configR == 1) { cont = cont + wheel.getPulses(); wheel.reset(); if(cont > 31) { cont = 1; } if(cont < 1) { cont = 31; } lcd.locate(0, 1); lcd.printf("Dia: %02d ", cont); tm.date = cont; if(button_enco.falling()){ configR=2; } } if(configR == 2) { cont = cont + wheel.getPulses(); wheel.reset(); if(cont > 12) { cont = 1; } if(cont < 1) { cont = 12; } lcd.locate(0, 1); lcd.printf("Mes: %02d ", cont); if(button_enco.falling()){ tm.mon = cont; configR = 3; } } if(configR == 3) { cont = cont + wheel.getPulses(); wheel.reset(); if(cont > 3000) { cont = 2016; } if(cont < 2016) { cont = 2016; } lcd.locate(0, 1); lcd.printf("Anno: %02d ", cont); if(button_enco.falling()){ tm.year = cont; configR = 4; } } if(configR == 4) { cont = cont + wheel.getPulses(); wheel.reset(); if(cont > 7) { cont = 1; } if(cont < 1) { cont = 7; } lcd.locate(0, 1); lcd.printf("Dia semana: %1d", cont); //tm.wday = cont; if(button_enco.falling()){ tm.wday = cont; configR = 5; } } if(configR == 5) { cont = cont + wheel.getPulses(); wheel.reset(); if(cont > 23) { cont = 0; } if(cont < 0) { cont = 23; } lcd.locate(0, 1); lcd.printf("Hora: %02d ", cont); //tm.hour = cont; if(button_enco.falling()){ tm.hour = cont; configR = 6; } } if(configR == 6) { cont = cont + wheel.getPulses(); wheel.reset(); if(cont > 59) { cont = 0; } if(cont < 0) { cont = 59; } lcd.locate(0, 1); lcd.printf("Minutos: %02d ", cont); //tm.min = cont; if(button_enco.falling()){ tm.min = cont; configR = 7; } } if(configR == 7) { cont = cont + wheel.getPulses(); wheel.reset(); if(cont > 59) { cont = 0; } if(cont < 0) { cont = 59; } lcd.locate(0, 1); lcd.printf("Segundos: %02d ", cont); tm.sec = cont; if(button_enco.falling()){ tm.sec = cont; configR = 8; } } if(configR == 8) { lcd.locate(0, 1); lcd.printf(" Establecido "); rtc.setTime(tm, false, false); rtc.startClock(); //estado = 0; configR = 0; estado=0; wait(2); } } } int main(){ while(1) { pc.printf("Corriendo ...\n"); Menu(); wait_ms(1000); OpcionMenu = LeerEncoder(); pc.printf("%i",OpcionMenu); switch(OpcionMenu){ //pc.printf("%i",OpcionMenu); case 1: // 1 HORA ImprimirHora(); case 2: //Configurar hora ConfiReloj(); break; case 3: // Alarmas break; case 4: lcd.cls(); lcd.locate(0,0); lcd.printf("Esperando trama"); lcd.locate(0,1); lcd.printf("control remoto"); LeerIRDA(); break; } //ImprimirHora(); wait_ms(500); //LeerEncoder(); //wait_ms(50); //LeerIRDA(); } }