Despertador con RTC-DS1307 y Encoder

Dependencies:   Debounced QEI RTC-DS1307 mbed

Committer:
Meli
Date:
Fri Nov 20 12:30:40 2015 +0000
Revision:
0:705ab0651f98
Despertador con RTC-DS1307 y Encoder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Meli 0:705ab0651f98 1 #include "mbed.h"
Meli 0:705ab0651f98 2 #include "Rtc_Ds1307.h"
Meli 0:705ab0651f98 3 #include "DebouncedIn.h"
Meli 0:705ab0651f98 4 #include "QEI.h"
Meli 0:705ab0651f98 5
Meli 0:705ab0651f98 6 Rtc_Ds1307 rtc(PTE0,PTE1); //Puertos para el modulo
Meli 0:705ab0651f98 7 Serial pc(USBTX, USBRX, "pc"); //Puertos para el PC
Meli 0:705ab0651f98 8 QEI wheel (PTD5, PTD0, NC, 100); //Configuracion encoder
Meli 0:705ab0651f98 9 DebouncedIn Boton(PTA13); //Boton Encoder
Meli 0:705ab0651f98 10 DigitalOut myled(LED1);
Meli 0:705ab0651f98 11 int dia=0,mes=0,ano=2015,hh=0,mm=0,ss=0;
Meli 0:705ab0651f98 12
Meli 0:705ab0651f98 13 char buffer[128];
Meli 0:705ab0651f98 14 int readptr = 0;
Meli 0:705ab0651f98 15
Meli 0:705ab0651f98 16 int main() {
Meli 0:705ab0651f98 17 char c;
Meli 0:705ab0651f98 18 Rtc_Ds1307::Time_rtc tm = {};
Meli 0:705ab0651f98 19
Meli 0:705ab0651f98 20 while(1) {
Meli 0:705ab0651f98 21
Meli 0:705ab0651f98 22
Meli 0:705ab0651f98 23
Meli 0:705ab0651f98 24 pc.printf("*************************************\n");
Meli 0:705ab0651f98 25 pc.printf("* Menu for RTC Test : *\n");
Meli 0:705ab0651f98 26 pc.printf("* read - reads the clock *\n");
Meli 0:705ab0651f98 27 pc.printf("* start - start the clock *\n");
Meli 0:705ab0651f98 28 pc.printf("* stop - stop the clock *\n");
Meli 0:705ab0651f98 29 pc.printf("* write - write the clock *\n");
Meli 0:705ab0651f98 30 pc.printf("* ena - enable Square wave output *\n");
Meli 0:705ab0651f98 31 pc.printf("* dis - disable square wave outp. *\n");
Meli 0:705ab0651f98 32 pc.printf("*************************************\n");
Meli 0:705ab0651f98 33
Meli 0:705ab0651f98 34 while( (c = pc.getc()) != '\n') {
Meli 0:705ab0651f98 35 buffer[readptr++] = c;
Meli 0:705ab0651f98 36 }
Meli 0:705ab0651f98 37 buffer[readptr++] = 0;
Meli 0:705ab0651f98 38 if (strncmp(buffer, "read", 4) == 0) {
Meli 0:705ab0651f98 39 // perform read
Meli 0:705ab0651f98 40 pc.printf("Performing read operation\n");
Meli 0:705ab0651f98 41 if (rtc.getTime(tm) ) {
Meli 0:705ab0651f98 42 pc.printf("La hora actual es: %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec);
Meli 0:705ab0651f98 43 pc.printf("La fecha actual es: %s, %02d/%02d/%04d\n", rtc.weekdayToString(tm.wday), tm.mon, tm.date, tm.year);
Meli 0:705ab0651f98 44 }
Meli 0:705ab0651f98 45
Meli 0:705ab0651f98 46 }
Meli 0:705ab0651f98 47 else if (strncmp(buffer, "write", 5) == 0) {
Meli 0:705ab0651f98 48 // perform write
Meli 0:705ab0651f98 49 pc.printf("Dia (0..31)");
Meli 0:705ab0651f98 50 pc.scanf("%d", &tm.date);
Meli 0:705ab0651f98 51 pc.printf("Mes (1..12)");
Meli 0:705ab0651f98 52 pc.scanf("%d", &tm.mon);
Meli 0:705ab0651f98 53 pc.printf("Anno");
Meli 0:705ab0651f98 54 pc.scanf("%d", &tm.year);
Meli 0:705ab0651f98 55 pc.printf("Hora (0..23)");
Meli 0:705ab0651f98 56 pc.scanf("%d", &tm.hour);
Meli 0:705ab0651f98 57 pc.printf("Minutos (0..59)");
Meli 0:705ab0651f98 58 pc.scanf("%d", &tm.min);
Meli 0:705ab0651f98 59 pc.printf("Segundos (0..59)");
Meli 0:705ab0651f98 60 pc.scanf("%d", &tm.sec);
Meli 0:705ab0651f98 61 pc.printf("Performing write operation\n");
Meli 0:705ab0651f98 62
Meli 0:705ab0651f98 63 while(pc.readable())
Meli 0:705ab0651f98 64 pc.getc();
Meli 0:705ab0651f98 65 rtc.setTime(tm, false, false);
Meli 0:705ab0651f98 66 }
Meli 0:705ab0651f98 67 else if (strncmp(buffer, "start", 5) == 0) {
Meli 0:705ab0651f98 68 // start
Meli 0:705ab0651f98 69 readptr = 0;
Meli 0:705ab0651f98 70 pc.printf("Dispositivo Iniciado\n");
Meli 0:705ab0651f98 71 rtc.startClock();
Meli 0:705ab0651f98 72 goto set_alarma;
Meli 0:705ab0651f98 73
Meli 0:705ab0651f98 74
Meli 0:705ab0651f98 75 }
Meli 0:705ab0651f98 76 else if (strncmp(buffer, "stop", 4) == 0) {
Meli 0:705ab0651f98 77 // stop
Meli 0:705ab0651f98 78 pc.printf("Performing stop operation\n");
Meli 0:705ab0651f98 79 rtc.stopClock();
Meli 0:705ab0651f98 80 }
Meli 0:705ab0651f98 81 else if (strncmp(buffer, "ena", 3) == 0) {
Meli 0:705ab0651f98 82 int rs;
Meli 0:705ab0651f98 83 pc.printf("Please specify the frequency : [0 = 1Hz, 1 = 4.096kHz, 2 = 8.192kHz, 3 = 32.768kHz] ");
Meli 0:705ab0651f98 84 scanf("%d", &rs);
Meli 0:705ab0651f98 85 pc.printf("Enabling the output with %d option\n", rs);
Meli 0:705ab0651f98 86 rtc.setSquareWaveOutput(true, (Rtc_Ds1307::SqwRateSelect_t)rs);
Meli 0:705ab0651f98 87 }
Meli 0:705ab0651f98 88 else if (strncmp(buffer, "dis", 3) == 0) {
Meli 0:705ab0651f98 89 pc.printf("Disableing square wave output\n");
Meli 0:705ab0651f98 90 rtc.setSquareWaveOutput(false, Rtc_Ds1307::RS1Hz);
Meli 0:705ab0651f98 91 }
Meli 0:705ab0651f98 92 else {
Meli 0:705ab0651f98 93 pc.printf("syntax error\n");
Meli 0:705ab0651f98 94 }
Meli 0:705ab0651f98 95 readptr = 0;
Meli 0:705ab0651f98 96 //pc.printf("\n\n\n");
Meli 0:705ab0651f98 97 }
Meli 0:705ab0651f98 98
Meli 0:705ab0651f98 99
Meli 0:705ab0651f98 100 set_alarma: //Configuracion Alarma
Meli 0:705ab0651f98 101 pc.printf("******* Configuracion Alarma *******\n");
Meli 0:705ab0651f98 102
Meli 0:705ab0651f98 103
Meli 0:705ab0651f98 104 set_dia: //Configuracion del Dia para la alarma
Meli 0:705ab0651f98 105 while(1){
Meli 0:705ab0651f98 106
Meli 0:705ab0651f98 107 dia=dia+wheel.getPulses(); //Aumentar el dia con el encoder
Meli 0:705ab0651f98 108 wheel.reset();
Meli 0:705ab0651f98 109
Meli 0:705ab0651f98 110 if(dia>=31){ //Si es mayor a 31, mantener en 31
Meli 0:705ab0651f98 111 dia=31;
Meli 0:705ab0651f98 112 }
Meli 0:705ab0651f98 113 else if (dia<=0){ //Si es menor a 0, mantener en 0
Meli 0:705ab0651f98 114 dia=0;
Meli 0:705ab0651f98 115 }
Meli 0:705ab0651f98 116 pc.printf("Dia=%d\n",dia); //Imprimir el Dia
Meli 0:705ab0651f98 117
Meli 0:705ab0651f98 118
Meli 0:705ab0651f98 119 if(Boton.falling()){ //Si el boton es presionado, pasar a mes
Meli 0:705ab0651f98 120 goto set_mes;
Meli 0:705ab0651f98 121 }
Meli 0:705ab0651f98 122
Meli 0:705ab0651f98 123 }
Meli 0:705ab0651f98 124
Meli 0:705ab0651f98 125 set_mes: //Configuracion del Mes para la alarma
Meli 0:705ab0651f98 126
Meli 0:705ab0651f98 127 while(1){
Meli 0:705ab0651f98 128
Meli 0:705ab0651f98 129 mes=mes+wheel.getPulses(); //Aumentar Mes con el encoder
Meli 0:705ab0651f98 130
Meli 0:705ab0651f98 131 wheel.reset();
Meli 0:705ab0651f98 132
Meli 0:705ab0651f98 133
Meli 0:705ab0651f98 134 if(mes>=12){ //Si es mayor a 12, mantener en 12
Meli 0:705ab0651f98 135
Meli 0:705ab0651f98 136 mes=12;
Meli 0:705ab0651f98 137 }
Meli 0:705ab0651f98 138 else if (mes<=0){ //Si es menor a 0, mantener en 0
Meli 0:705ab0651f98 139
Meli 0:705ab0651f98 140 mes=0;
Meli 0:705ab0651f98 141 }
Meli 0:705ab0651f98 142 pc.printf(" Mes=%d\n ",mes); //Imprimir el Mes
Meli 0:705ab0651f98 143
Meli 0:705ab0651f98 144
Meli 0:705ab0651f98 145
Meli 0:705ab0651f98 146 if(Boton.falling()){
Meli 0:705ab0651f98 147 goto set_ano;
Meli 0:705ab0651f98 148 }
Meli 0:705ab0651f98 149
Meli 0:705ab0651f98 150
Meli 0:705ab0651f98 151 }
Meli 0:705ab0651f98 152 set_ano:
Meli 0:705ab0651f98 153 while(1){
Meli 0:705ab0651f98 154
Meli 0:705ab0651f98 155 ano=ano+wheel.getPulses();
Meli 0:705ab0651f98 156 wheel.reset();
Meli 0:705ab0651f98 157
Meli 0:705ab0651f98 158
Meli 0:705ab0651f98 159 if(ano>=3000){
Meli 0:705ab0651f98 160 ano=3000;
Meli 0:705ab0651f98 161 }
Meli 0:705ab0651f98 162 else if (ano<=2015){
Meli 0:705ab0651f98 163 ano=2015;
Meli 0:705ab0651f98 164 }
Meli 0:705ab0651f98 165 pc.printf(" Anno=%d\n ",ano);
Meli 0:705ab0651f98 166
Meli 0:705ab0651f98 167
Meli 0:705ab0651f98 168 if(Boton.falling()){
Meli 0:705ab0651f98 169 goto set_hh;
Meli 0:705ab0651f98 170 }
Meli 0:705ab0651f98 171
Meli 0:705ab0651f98 172 }
Meli 0:705ab0651f98 173 set_hh:
Meli 0:705ab0651f98 174 while(1){
Meli 0:705ab0651f98 175
Meli 0:705ab0651f98 176 hh=hh+wheel.getPulses();
Meli 0:705ab0651f98 177 wheel.reset();
Meli 0:705ab0651f98 178
Meli 0:705ab0651f98 179
Meli 0:705ab0651f98 180 if(hh>=23){
Meli 0:705ab0651f98 181 hh=23;
Meli 0:705ab0651f98 182 }
Meli 0:705ab0651f98 183 else if (hh<=0){
Meli 0:705ab0651f98 184 hh=0;
Meli 0:705ab0651f98 185 }
Meli 0:705ab0651f98 186 pc.printf(" Hora=%d\n ",hh);
Meli 0:705ab0651f98 187
Meli 0:705ab0651f98 188
Meli 0:705ab0651f98 189 if(Boton.falling()){
Meli 0:705ab0651f98 190 goto set_mm;
Meli 0:705ab0651f98 191 }
Meli 0:705ab0651f98 192
Meli 0:705ab0651f98 193
Meli 0:705ab0651f98 194 }
Meli 0:705ab0651f98 195 set_mm:
Meli 0:705ab0651f98 196 while(1){
Meli 0:705ab0651f98 197
Meli 0:705ab0651f98 198 mm=mm+wheel.getPulses();
Meli 0:705ab0651f98 199 wheel.reset();
Meli 0:705ab0651f98 200
Meli 0:705ab0651f98 201
Meli 0:705ab0651f98 202 if(mm>=59){
Meli 0:705ab0651f98 203 mm=59;
Meli 0:705ab0651f98 204 }
Meli 0:705ab0651f98 205 else if (hh<=0){
Meli 0:705ab0651f98 206 mm=0;
Meli 0:705ab0651f98 207 }
Meli 0:705ab0651f98 208 pc.printf(" Min=%d\n ",mm);
Meli 0:705ab0651f98 209
Meli 0:705ab0651f98 210
Meli 0:705ab0651f98 211 if(Boton.falling()){
Meli 0:705ab0651f98 212 goto set_comp;
Meli 0:705ab0651f98 213 }
Meli 0:705ab0651f98 214
Meli 0:705ab0651f98 215 }
Meli 0:705ab0651f98 216
Meli 0:705ab0651f98 217
Meli 0:705ab0651f98 218 set_comp:
Meli 0:705ab0651f98 219
Meli 0:705ab0651f98 220 pc.printf("***La alarma se programara el:****\n");
Meli 0:705ab0651f98 221 pc.printf(" Dia=%d Mes=%d Ano=%d Hora=%d Min=%d Seg=%d\n ",dia,mes,ano,hh,mm,ss);
Meli 0:705ab0651f98 222
Meli 0:705ab0651f98 223 while(1){
Meli 0:705ab0651f98 224 rtc.getTime(tm);
Meli 0:705ab0651f98 225 pc.printf("La hora actual es: %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec);
Meli 0:705ab0651f98 226 pc.printf("La fecha actual es: %02d/%02d/%04d\n", tm.mon, tm.date, tm.year);
Meli 0:705ab0651f98 227 if(tm.hour>=hh && tm.min>=mm &&tm.sec>=ss && tm.mon>=mes && tm.date>=dia && tm.year>=ano){
Meli 0:705ab0651f98 228 myled=0;
Meli 0:705ab0651f98 229 }
Meli 0:705ab0651f98 230 else {
Meli 0:705ab0651f98 231 myled=1;
Meli 0:705ab0651f98 232 }
Meli 0:705ab0651f98 233 wait(1);
Meli 0:705ab0651f98 234 }
Meli 0:705ab0651f98 235
Meli 0:705ab0651f98 236
Meli 0:705ab0651f98 237 }
Meli 0:705ab0651f98 238
Meli 0:705ab0651f98 239