Código para el uso del Módulo RTC DS3231 (Pantalla LCD - ENCODER - IRDA) para establecer un sistema de Alarmas en tiempo real.

Dependencies:   mbed QEI ds3231 TextLCD Pulse1

Committer:
Giovani_Cardona
Date:
Tue Aug 13 03:24:11 2019 +0000
Revision:
0:dc639ee44cab
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Giovani_Cardona 0:dc639ee44cab 1 /*Práctica 4 - Procesadores 2019-1
Giovani_Cardona 0:dc639ee44cab 2 Giovani Cardona Sánchez
Giovani_Cardona 0:dc639ee44cab 3 Mateo Valencia Diaz
Giovani_Cardona 0:dc639ee44cab 4 Verónica Ríos Vargas
Giovani_Cardona 0:dc639ee44cab 5 Juan Esteban Rodriguez Oquendo
Giovani_Cardona 0:dc639ee44cab 6 Juan Camilo Pérez Estrada
Giovani_Cardona 0:dc639ee44cab 7 */
Giovani_Cardona 0:dc639ee44cab 8
Giovani_Cardona 0:dc639ee44cab 9 #include "ds3231.h"
Giovani_Cardona 0:dc639ee44cab 10 #include "TextLCD.h"
Giovani_Cardona 0:dc639ee44cab 11 #include <Pulse1.h>
Giovani_Cardona 0:dc639ee44cab 12 #include "QEI.h"
Giovani_Cardona 0:dc639ee44cab 13
Giovani_Cardona 0:dc639ee44cab 14 //--------------------------Puertos---------------------------------//
Giovani_Cardona 0:dc639ee44cab 15 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5, TextLCD::LCD20x4); // rs, e, d4-d7
Giovani_Cardona 0:dc639ee44cab 16 Ds3231 rtc(PTE0, PTE1); //rtc object Ds3231::Ds3231(PinName sda, PinName scl) : I2C(sda, scl)
Giovani_Cardona 0:dc639ee44cab 17 PulseInOut irda(PTD5);// en este puerto se pone el sensor infrarrojo
Giovani_Cardona 0:dc639ee44cab 18 QEI wheel (PTD7, PTD6, NC, 624);
Giovani_Cardona 0:dc639ee44cab 19 Serial pc(USBTX, USBRX);
Giovani_Cardona 0:dc639ee44cab 20
Giovani_Cardona 0:dc639ee44cab 21 DigitalOut ledR(LED_RED); // led rojo
Giovani_Cardona 0:dc639ee44cab 22 DigitalOut ledG(LED_GREEN); // led verde
Giovani_Cardona 0:dc639ee44cab 23 DigitalOut ledB(LED_BLUE); // led azul
Giovani_Cardona 0:dc639ee44cab 24
Giovani_Cardona 0:dc639ee44cab 25 DigitalOut Buzzer(PTD4);
Giovani_Cardona 0:dc639ee44cab 26 InterruptIn button(PTA17);
Giovani_Cardona 0:dc639ee44cab 27
Giovani_Cardona 0:dc639ee44cab 28 //--------------------------Variables---------------------------------//
Giovani_Cardona 0:dc639ee44cab 29
Giovani_Cardona 0:dc639ee44cab 30 int day = 0, date = 0, month = 0, year = 0, hours = 0, minutes = 0, seconds = 0;
Giovani_Cardona 0:dc639ee44cab 31 int modo = 0, pulsos = 0, x = 0, pos = 0, count = 0, n = 0, x_i = -1, f = 0;
Giovani_Cardona 0:dc639ee44cab 32 int Alarmas[16][6];
Giovani_Cardona 0:dc639ee44cab 33
Giovani_Cardona 0:dc639ee44cab 34 //--------IRDA--------//
Giovani_Cardona 0:dc639ee44cab 35 int header =0; //tiempo de cabecera pulso abajo
Giovani_Cardona 0:dc639ee44cab 36 const int head_H = 11000; //+20% medida con osciloscopio en microsegundos
Giovani_Cardona 0:dc639ee44cab 37 const int head_L = 4444 ;//-20% medida con osciloscopio
Giovani_Cardona 0:dc639ee44cab 38 int i=0;
Giovani_Cardona 0:dc639ee44cab 39 const int T_alto=1670;//ponga su tiempo de la prueba
Giovani_Cardona 0:dc639ee44cab 40 const int T_bajo=847;//ponga su tiempo de la prueba
Giovani_Cardona 0:dc639ee44cab 41 const int num_bits = 32;//ponga su numero de bits
Giovani_Cardona 0:dc639ee44cab 42 int num[num_bits];//cadena para almacenar todos los tiempos que conforman los bits de datos
Giovani_Cardona 0:dc639ee44cab 43 int sec[num_bits];//cadena para almacenar la cadena codificada en binario
Giovani_Cardona 0:dc639ee44cab 44 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};
Giovani_Cardona 0:dc639ee44cab 45 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};
Giovani_Cardona 0:dc639ee44cab 46 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};
Giovani_Cardona 0:dc639ee44cab 47 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};
Giovani_Cardona 0:dc639ee44cab 48 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};
Giovani_Cardona 0:dc639ee44cab 49 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};
Giovani_Cardona 0:dc639ee44cab 50 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};
Giovani_Cardona 0:dc639ee44cab 51 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};
Giovani_Cardona 0:dc639ee44cab 52 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};
Giovani_Cardona 0:dc639ee44cab 53 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};
Giovani_Cardona 0:dc639ee44cab 54 int OK[] = {0,0,1,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0};
Giovani_Cardona 0:dc639ee44cab 55
Giovani_Cardona 0:dc639ee44cab 56 int flag1,flag2,flag3,flag_OK; //Banderas de boton presionado
Giovani_Cardona 0:dc639ee44cab 57 int dato; // tiempo de cada dato que se lee
Giovani_Cardona 0:dc639ee44cab 58
Giovani_Cardona 0:dc639ee44cab 59
Giovani_Cardona 0:dc639ee44cab 60 //----------------------Funciones--------------------------------//
Giovani_Cardona 0:dc639ee44cab 61 void get_user_input(char* message, uint8_t min, uint8_t max, uint32_t* member);
Giovani_Cardona 0:dc639ee44cab 62 void get_user_input(char* message, uint8_t min, uint8_t max, bool* member);
Giovani_Cardona 0:dc639ee44cab 63 void set_RTC(void);
Giovani_Cardona 0:dc639ee44cab 64 void set_Alarm_encoder(void);
Giovani_Cardona 0:dc639ee44cab 65 int set_Alarm_IRDA(void);
Giovani_Cardona 0:dc639ee44cab 66 void print_Alarm(void);
Giovani_Cardona 0:dc639ee44cab 67 int detect_number(void);
Giovani_Cardona 0:dc639ee44cab 68 int sel_number(void);
Giovani_Cardona 0:dc639ee44cab 69
Giovani_Cardona 0:dc639ee44cab 70
Giovani_Cardona 0:dc639ee44cab 71 //----------------------Interrupciones---------------------------//
Giovani_Cardona 0:dc639ee44cab 72 void Button(void) {
Giovani_Cardona 0:dc639ee44cab 73 wait(0.1);
Giovani_Cardona 0:dc639ee44cab 74 if(button == 1){
Giovani_Cardona 0:dc639ee44cab 75 if(n == 0){
Giovani_Cardona 0:dc639ee44cab 76 ledG = !ledG; //Se va a ingresar una alarma por IRDA
Giovani_Cardona 0:dc639ee44cab 77 modo = 2;
Giovani_Cardona 0:dc639ee44cab 78 f = 0;
Giovani_Cardona 0:dc639ee44cab 79 count = 0;
Giovani_Cardona 0:dc639ee44cab 80 }
Giovani_Cardona 0:dc639ee44cab 81 if(modo == 0){
Giovani_Cardona 0:dc639ee44cab 82 pos = x;
Giovani_Cardona 0:dc639ee44cab 83 //ledR = !ledR;
Giovani_Cardona 0:dc639ee44cab 84 printf("\nInterrupcion- Alarma = %d",pos);
Giovani_Cardona 0:dc639ee44cab 85 modo = 1; //Cambio de alarma por encoder
Giovani_Cardona 0:dc639ee44cab 86 count = 0;
Giovani_Cardona 0:dc639ee44cab 87 x = 0;
Giovani_Cardona 0:dc639ee44cab 88 }
Giovani_Cardona 0:dc639ee44cab 89 else if(modo == 1){
Giovani_Cardona 0:dc639ee44cab 90 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 91 ledR = !ledR;
Giovani_Cardona 0:dc639ee44cab 92 wait(0.05);
Giovani_Cardona 0:dc639ee44cab 93 ledR = !ledR;
Giovani_Cardona 0:dc639ee44cab 94 count++;
Giovani_Cardona 0:dc639ee44cab 95 x = 0;
Giovani_Cardona 0:dc639ee44cab 96 }
Giovani_Cardona 0:dc639ee44cab 97 }
Giovani_Cardona 0:dc639ee44cab 98 }
Giovani_Cardona 0:dc639ee44cab 99
Giovani_Cardona 0:dc639ee44cab 100
Giovani_Cardona 0:dc639ee44cab 101 //----------------------Ciclo principal---------------------------//
Giovani_Cardona 0:dc639ee44cab 102 int main(void)
Giovani_Cardona 0:dc639ee44cab 103 {
Giovani_Cardona 0:dc639ee44cab 104 //DS3231 rtc variables - default, use bit masks in ds3231.h for desired operation
Giovani_Cardona 0:dc639ee44cab 105 ds3231_cntl_stat_t rtc_control_status = {0,0};
Giovani_Cardona 0:dc639ee44cab 106 rtc.set_cntl_stat_reg(rtc_control_status);
Giovani_Cardona 0:dc639ee44cab 107
Giovani_Cardona 0:dc639ee44cab 108 //******************************//
Giovani_Cardona 0:dc639ee44cab 109 ds3231_time_t time = {12, 0, 0, 0, 1};
Giovani_Cardona 0:dc639ee44cab 110 ds3231_calendar_t calendar = {1, 1, 1, 0};
Giovani_Cardona 0:dc639ee44cab 111 ledR = 1; ledB = 1; ledG = 1;//LEDs OFF
Giovani_Cardona 0:dc639ee44cab 112
Giovani_Cardona 0:dc639ee44cab 113 //set_RTC(); //Configuración del RTC
Giovani_Cardona 0:dc639ee44cab 114
Giovani_Cardona 0:dc639ee44cab 115 //******************************//
Giovani_Cardona 0:dc639ee44cab 116
Giovani_Cardona 0:dc639ee44cab 117 while(1)
Giovani_Cardona 0:dc639ee44cab 118 {
Giovani_Cardona 0:dc639ee44cab 119 rtc.get_time(&time); // NO se va a usar el modo (1 for 12hr 0 for 24hr) o (0 for AM 1 for PM)
Giovani_Cardona 0:dc639ee44cab 120 lcd.locate(0, 0);
Giovani_Cardona 0:dc639ee44cab 121 lcd.printf("Time %02d:%02d:%02d - RTC", time.hours, time.minutes, time.seconds);
Giovani_Cardona 0:dc639ee44cab 122
Giovani_Cardona 0:dc639ee44cab 123 rtc.get_calendar(&calendar);
Giovani_Cardona 0:dc639ee44cab 124 lcd.locate(0, 1);
Giovani_Cardona 0:dc639ee44cab 125 lcd.printf("Calendar %02d/%02d/%02d",calendar.date, calendar.month, calendar.year);
Giovani_Cardona 0:dc639ee44cab 126
Giovani_Cardona 0:dc639ee44cab 127 //-------Verificación Alarma encendido------//
Giovani_Cardona 0:dc639ee44cab 128 for (int i= 0; i<=7;i++){
Giovani_Cardona 0:dc639ee44cab 129 if((time.hours == Alarmas[i][0])&& (time.minutes == Alarmas[i][1]) && (time.seconds == Alarmas[i][2]) && (calendar.date == Alarmas[i][3]) && (calendar.month == Alarmas[i][4]) && (calendar.year == Alarmas[i][5])){
Giovani_Cardona 0:dc639ee44cab 130 ledB = 0;
Giovani_Cardona 0:dc639ee44cab 131 Buzzer = 1;
Giovani_Cardona 0:dc639ee44cab 132 lcd.locate(0, 3);
Giovani_Cardona 0:dc639ee44cab 133 lcd.printf(" Alarm %d activated", i+1);
Giovani_Cardona 0:dc639ee44cab 134 wait(0.5);
Giovani_Cardona 0:dc639ee44cab 135 Buzzer = 0;
Giovani_Cardona 0:dc639ee44cab 136 lcd.locate(0, 3);
Giovani_Cardona 0:dc639ee44cab 137 lcd.printf(" ");
Giovani_Cardona 0:dc639ee44cab 138 }
Giovani_Cardona 0:dc639ee44cab 139 }
Giovani_Cardona 0:dc639ee44cab 140 //-------------------------//
Giovani_Cardona 0:dc639ee44cab 141
Giovani_Cardona 0:dc639ee44cab 142 //-------Verificación Alarma apagado------//
Giovani_Cardona 0:dc639ee44cab 143 for (int i= 8; i<=15;i++){
Giovani_Cardona 0:dc639ee44cab 144 if((time.hours == Alarmas[i][0])&& (time.minutes == Alarmas[i][1]) && (time.seconds == Alarmas[i][2]) && (calendar.date == Alarmas[i][3]) && (calendar.month == Alarmas[i][4]) && (calendar.year == Alarmas[i][5])){
Giovani_Cardona 0:dc639ee44cab 145 ledB = 1;
Giovani_Cardona 0:dc639ee44cab 146 Buzzer = 1;
Giovani_Cardona 0:dc639ee44cab 147 lcd.locate(0, 3);
Giovani_Cardona 0:dc639ee44cab 148 lcd.printf("Alarm %d deactivated", i+1);
Giovani_Cardona 0:dc639ee44cab 149 wait(0.5);
Giovani_Cardona 0:dc639ee44cab 150 Buzzer = 0;
Giovani_Cardona 0:dc639ee44cab 151 lcd.locate(0, 3);
Giovani_Cardona 0:dc639ee44cab 152 lcd.printf(" ");
Giovani_Cardona 0:dc639ee44cab 153 }
Giovani_Cardona 0:dc639ee44cab 154 }
Giovani_Cardona 0:dc639ee44cab 155 //-------------------------//
Giovani_Cardona 0:dc639ee44cab 156
Giovani_Cardona 0:dc639ee44cab 157 switch (modo)
Giovani_Cardona 0:dc639ee44cab 158 {
Giovani_Cardona 0:dc639ee44cab 159 case 0: //Selección de Alarma
Giovani_Cardona 0:dc639ee44cab 160
Giovani_Cardona 0:dc639ee44cab 161 //Cambio de estado del Encoder
Giovani_Cardona 0:dc639ee44cab 162 x = x - wheel.getPulses();
Giovani_Cardona 0:dc639ee44cab 163 wheel.reset();
Giovani_Cardona 0:dc639ee44cab 164 button.rise(&Button);
Giovani_Cardona 0:dc639ee44cab 165
Giovani_Cardona 0:dc639ee44cab 166 //printf("\nx: %d ",x);
Giovani_Cardona 0:dc639ee44cab 167 if ((x != 0) && (modo == 0))
Giovani_Cardona 0:dc639ee44cab 168 {
Giovani_Cardona 0:dc639ee44cab 169 if (x < 1){x = 1;}
Giovani_Cardona 0:dc639ee44cab 170 if (x > 16){x = 16;}
Giovani_Cardona 0:dc639ee44cab 171
Giovani_Cardona 0:dc639ee44cab 172 lcd.locate(0, 2);
Giovani_Cardona 0:dc639ee44cab 173 lcd.printf(" Alarm %02d", x);
Giovani_Cardona 0:dc639ee44cab 174 button.rise(&Button);
Giovani_Cardona 0:dc639ee44cab 175 n = 1;
Giovani_Cardona 0:dc639ee44cab 176 }
Giovani_Cardona 0:dc639ee44cab 177 break;
Giovani_Cardona 0:dc639ee44cab 178
Giovani_Cardona 0:dc639ee44cab 179 case 1: //Modo 1 - Encoder
Giovani_Cardona 0:dc639ee44cab 180 set_Alarm_encoder();
Giovani_Cardona 0:dc639ee44cab 181 if (count == 6){
Giovani_Cardona 0:dc639ee44cab 182 lcd.locate(0, 2);
Giovani_Cardona 0:dc639ee44cab 183 lcd.printf(" Alarm saved! ");
Giovani_Cardona 0:dc639ee44cab 184 wait(0.8);
Giovani_Cardona 0:dc639ee44cab 185 lcd.locate(0, 2);
Giovani_Cardona 0:dc639ee44cab 186 lcd.printf(" ");
Giovani_Cardona 0:dc639ee44cab 187 lcd.locate(0, 3);
Giovani_Cardona 0:dc639ee44cab 188 lcd.printf(" ");
Giovani_Cardona 0:dc639ee44cab 189 count = 0;
Giovani_Cardona 0:dc639ee44cab 190 modo = 0;
Giovani_Cardona 0:dc639ee44cab 191 print_Alarm();
Giovani_Cardona 0:dc639ee44cab 192 n = 0;
Giovani_Cardona 0:dc639ee44cab 193 }
Giovani_Cardona 0:dc639ee44cab 194 break;
Giovani_Cardona 0:dc639ee44cab 195
Giovani_Cardona 0:dc639ee44cab 196 case 2:
Giovani_Cardona 0:dc639ee44cab 197 //Cambio de estado con IRDA
Giovani_Cardona 0:dc639ee44cab 198 lcd.locate(0, 0);
Giovani_Cardona 0:dc639ee44cab 199 lcd.printf(" ");
Giovani_Cardona 0:dc639ee44cab 200 lcd.locate(0, 1);
Giovani_Cardona 0:dc639ee44cab 201 lcd.printf(" ");
Giovani_Cardona 0:dc639ee44cab 202 lcd.locate(0, 0);
Giovani_Cardona 0:dc639ee44cab 203 lcd.printf(" Alarm IRDA");
Giovani_Cardona 0:dc639ee44cab 204 lcd.locate(0, 1);
Giovani_Cardona 0:dc639ee44cab 205 lcd.printf(" Select Alarm: ");
Giovani_Cardona 0:dc639ee44cab 206
Giovani_Cardona 0:dc639ee44cab 207
Giovani_Cardona 0:dc639ee44cab 208 int x1 = 0, x2 = 0, x3 = 0, c = 0;
Giovani_Cardona 0:dc639ee44cab 209 while(1){
Giovani_Cardona 0:dc639ee44cab 210 if (detect_number() == 1){
Giovani_Cardona 0:dc639ee44cab 211 c++;
Giovani_Cardona 0:dc639ee44cab 212 if(c == 1){
Giovani_Cardona 0:dc639ee44cab 213 x1 = sel_number();
Giovani_Cardona 0:dc639ee44cab 214 pc.printf("\nx1: %d c: %d\n",x1,c);
Giovani_Cardona 0:dc639ee44cab 215 x_i = x1;
Giovani_Cardona 0:dc639ee44cab 216 }
Giovani_Cardona 0:dc639ee44cab 217
Giovani_Cardona 0:dc639ee44cab 218 if(c == 2){
Giovani_Cardona 0:dc639ee44cab 219 x2 = sel_number();
Giovani_Cardona 0:dc639ee44cab 220 pc.printf("\nx2: %d c: %d\n",x2,c);
Giovani_Cardona 0:dc639ee44cab 221 if( x2 == -1){
Giovani_Cardona 0:dc639ee44cab 222 x_i = x1;
Giovani_Cardona 0:dc639ee44cab 223 break;
Giovani_Cardona 0:dc639ee44cab 224 }
Giovani_Cardona 0:dc639ee44cab 225 else{
Giovani_Cardona 0:dc639ee44cab 226 x_i = x1*10 + x2;
Giovani_Cardona 0:dc639ee44cab 227 }
Giovani_Cardona 0:dc639ee44cab 228 }
Giovani_Cardona 0:dc639ee44cab 229 if (c == 3){
Giovani_Cardona 0:dc639ee44cab 230 x3 = sel_number();
Giovani_Cardona 0:dc639ee44cab 231 pc.printf("\nx3: %d c: %d\n",x3,c);
Giovani_Cardona 0:dc639ee44cab 232 if( x3 == -1){
Giovani_Cardona 0:dc639ee44cab 233 x_i= x1*10 + x2;
Giovani_Cardona 0:dc639ee44cab 234 break;
Giovani_Cardona 0:dc639ee44cab 235 }
Giovani_Cardona 0:dc639ee44cab 236 }
Giovani_Cardona 0:dc639ee44cab 237 }
Giovani_Cardona 0:dc639ee44cab 238 }
Giovani_Cardona 0:dc639ee44cab 239 x1 = 0; x2 = 0; x3 = 0; c = 0;
Giovani_Cardona 0:dc639ee44cab 240 // -------------------- //
Giovani_Cardona 0:dc639ee44cab 241 lcd.locate(0, 1);
Giovani_Cardona 0:dc639ee44cab 242 lcd.printf(" Select Alarm: %d", x_i);
Giovani_Cardona 0:dc639ee44cab 243 while(f == 0){
Giovani_Cardona 0:dc639ee44cab 244 f = set_Alarm_IRDA();
Giovani_Cardona 0:dc639ee44cab 245 count++;
Giovani_Cardona 0:dc639ee44cab 246 print_Alarm();
Giovani_Cardona 0:dc639ee44cab 247 }
Giovani_Cardona 0:dc639ee44cab 248
Giovani_Cardona 0:dc639ee44cab 249 break;
Giovani_Cardona 0:dc639ee44cab 250 }
Giovani_Cardona 0:dc639ee44cab 251
Giovani_Cardona 0:dc639ee44cab 252
Giovani_Cardona 0:dc639ee44cab 253 //wait(0.2);
Giovani_Cardona 0:dc639ee44cab 254 }//loop
Giovani_Cardona 0:dc639ee44cab 255 }
Giovani_Cardona 0:dc639ee44cab 256
Giovani_Cardona 0:dc639ee44cab 257 //-----------------------Funciones---------------------------------//
Giovani_Cardona 0:dc639ee44cab 258 void set_Alarm_encoder(void){
Giovani_Cardona 0:dc639ee44cab 259
Giovani_Cardona 0:dc639ee44cab 260 lcd.locate(0, 3);
Giovani_Cardona 0:dc639ee44cab 261 lcd.printf(" %02d:%02d:%02d %02d/%02d/%02d", Alarmas[pos-1][0],Alarmas[pos-1][1],Alarmas[pos-1][2],Alarmas[pos-1][3],Alarmas[pos-1][4],Alarmas[pos-1][5]);
Giovani_Cardona 0:dc639ee44cab 262
Giovani_Cardona 0:dc639ee44cab 263 x = x - wheel.getPulses();
Giovani_Cardona 0:dc639ee44cab 264 wheel.reset();
Giovani_Cardona 0:dc639ee44cab 265
Giovani_Cardona 0:dc639ee44cab 266 switch (count) //count representa la posición de la columna en la matriz Alarmas - en este orden HH:MM:SS DD/MM/YY
Giovani_Cardona 0:dc639ee44cab 267 {
Giovani_Cardona 0:dc639ee44cab 268 case 0: //Hora
Giovani_Cardona 0:dc639ee44cab 269 if (x < 0){x = 0;}
Giovani_Cardona 0:dc639ee44cab 270 if (x > 23){x = 23;}
Giovani_Cardona 0:dc639ee44cab 271 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 272 break;
Giovani_Cardona 0:dc639ee44cab 273
Giovani_Cardona 0:dc639ee44cab 274 case 1: //Minutos
Giovani_Cardona 0:dc639ee44cab 275 if (x < 0){x = 0;}
Giovani_Cardona 0:dc639ee44cab 276 if (x > 59){x = 59;}
Giovani_Cardona 0:dc639ee44cab 277 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 278 break;
Giovani_Cardona 0:dc639ee44cab 279
Giovani_Cardona 0:dc639ee44cab 280 case 2: //Segundos
Giovani_Cardona 0:dc639ee44cab 281 if (x < 0){x = 0;}
Giovani_Cardona 0:dc639ee44cab 282 if (x > 59){x = 59;}
Giovani_Cardona 0:dc639ee44cab 283 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 284 break;
Giovani_Cardona 0:dc639ee44cab 285
Giovani_Cardona 0:dc639ee44cab 286 case 3: // Día
Giovani_Cardona 0:dc639ee44cab 287 if (x < 0){x = 0;}
Giovani_Cardona 0:dc639ee44cab 288 if (x > 31){x = 31;}
Giovani_Cardona 0:dc639ee44cab 289 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 290 break;
Giovani_Cardona 0:dc639ee44cab 291
Giovani_Cardona 0:dc639ee44cab 292 case 4: // Mes
Giovani_Cardona 0:dc639ee44cab 293 if (x < 0){x = 0;}
Giovani_Cardona 0:dc639ee44cab 294 if (x > 12){x = 12;}
Giovani_Cardona 0:dc639ee44cab 295 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 296 break;
Giovani_Cardona 0:dc639ee44cab 297
Giovani_Cardona 0:dc639ee44cab 298 case 5: // Año
Giovani_Cardona 0:dc639ee44cab 299 if (x < 0){x = 0;}
Giovani_Cardona 0:dc639ee44cab 300 if (x > 99){x = 99;}
Giovani_Cardona 0:dc639ee44cab 301 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 302 break;
Giovani_Cardona 0:dc639ee44cab 303 }
Giovani_Cardona 0:dc639ee44cab 304 }
Giovani_Cardona 0:dc639ee44cab 305
Giovani_Cardona 0:dc639ee44cab 306 // ---- IRDA ----//
Giovani_Cardona 0:dc639ee44cab 307 int detect_number(void){
Giovani_Cardona 0:dc639ee44cab 308 int y = 0;
Giovani_Cardona 0:dc639ee44cab 309 header=0;
Giovani_Cardona 0:dc639ee44cab 310 header = irda.read_low_us(); //funcion para leer un pulso de caida o bajo
Giovani_Cardona 0:dc639ee44cab 311
Giovani_Cardona 0:dc639ee44cab 312 if (header > head_L && header < head_H){
Giovani_Cardona 0:dc639ee44cab 313 wait_us(2000);
Giovani_Cardona 0:dc639ee44cab 314 for(int i=0; i<(num_bits-1); ++i) // POR OSCILOSCOPIO se determina que llegan (num_bits),datos
Giovani_Cardona 0:dc639ee44cab 315 {
Giovani_Cardona 0:dc639ee44cab 316 dato = irda.read_high_us(); //leer un bit de datos que es pulso arriba en este control
Giovani_Cardona 0:dc639ee44cab 317 num[i]=dato;
Giovani_Cardona 0:dc639ee44cab 318 wait_us(332);
Giovani_Cardona 0:dc639ee44cab 319 }
Giovani_Cardona 0:dc639ee44cab 320 for(int i=0; i<num_bits; ++i)
Giovani_Cardona 0:dc639ee44cab 321 {
Giovani_Cardona 0:dc639ee44cab 322 if(num[i] > ((T_alto+T_bajo)/2))
Giovani_Cardona 0:dc639ee44cab 323 {
Giovani_Cardona 0:dc639ee44cab 324 pc.printf("1");
Giovani_Cardona 0:dc639ee44cab 325 sec[i]=1; // guardo la secuancia en binario
Giovani_Cardona 0:dc639ee44cab 326 }
Giovani_Cardona 0:dc639ee44cab 327 else
Giovani_Cardona 0:dc639ee44cab 328 {
Giovani_Cardona 0:dc639ee44cab 329 sec[i]=0; //guardo la secuencia en binario
Giovani_Cardona 0:dc639ee44cab 330 pc.printf("0");
Giovani_Cardona 0:dc639ee44cab 331 }
Giovani_Cardona 0:dc639ee44cab 332 pc.printf(",");
Giovani_Cardona 0:dc639ee44cab 333 }
Giovani_Cardona 0:dc639ee44cab 334 pc.printf("\n");
Giovani_Cardona 0:dc639ee44cab 335 y = 1;
Giovani_Cardona 0:dc639ee44cab 336 }
Giovani_Cardona 0:dc639ee44cab 337 return y;
Giovani_Cardona 0:dc639ee44cab 338 }
Giovani_Cardona 0:dc639ee44cab 339
Giovani_Cardona 0:dc639ee44cab 340 int sel_number(void){
Giovani_Cardona 0:dc639ee44cab 341 int flag1=1,flag2=1,flag3=1,flag4=1,flag5=1,flag6=1,flag7=1,flag8=1,flag9=1,flag0=1,flag_OK=1;
Giovani_Cardona 0:dc639ee44cab 342 int x_irda;
Giovani_Cardona 0:dc639ee44cab 343
Giovani_Cardona 0:dc639ee44cab 344 for(i=0; i<32; ++i)
Giovani_Cardona 0:dc639ee44cab 345 {
Giovani_Cardona 0:dc639ee44cab 346 if(sec[i]!=boton1[i]) //en caso de que un bit no coincida se descarta el boton 1
Giovani_Cardona 0:dc639ee44cab 347 {
Giovani_Cardona 0:dc639ee44cab 348 flag1=0;
Giovani_Cardona 0:dc639ee44cab 349 }
Giovani_Cardona 0:dc639ee44cab 350 if(sec[i]!=boton2[i]) //en caso de que un bit no coincida se descarta el boton 2
Giovani_Cardona 0:dc639ee44cab 351 {
Giovani_Cardona 0:dc639ee44cab 352 flag2=0;
Giovani_Cardona 0:dc639ee44cab 353 }
Giovani_Cardona 0:dc639ee44cab 354 if(sec[i]!=boton3[i]) //en caso de que un bit no coincida se descarta el boton 3
Giovani_Cardona 0:dc639ee44cab 355 {
Giovani_Cardona 0:dc639ee44cab 356 flag3=0;
Giovani_Cardona 0:dc639ee44cab 357 }
Giovani_Cardona 0:dc639ee44cab 358 if(sec[i]!=boton4[i]) //en caso de que un bit no coincida se descarta el boton 1
Giovani_Cardona 0:dc639ee44cab 359 {
Giovani_Cardona 0:dc639ee44cab 360 flag4=0;
Giovani_Cardona 0:dc639ee44cab 361 }
Giovani_Cardona 0:dc639ee44cab 362 if(sec[i]!=boton5[i]) //en caso de que un bit no coincida se descarta el boton 2
Giovani_Cardona 0:dc639ee44cab 363 {
Giovani_Cardona 0:dc639ee44cab 364 flag5=0;
Giovani_Cardona 0:dc639ee44cab 365 }
Giovani_Cardona 0:dc639ee44cab 366 if(sec[i]!=boton6[i]) //en caso de que un bit no coincida se descarta el boton 3
Giovani_Cardona 0:dc639ee44cab 367 {
Giovani_Cardona 0:dc639ee44cab 368 flag6=0;
Giovani_Cardona 0:dc639ee44cab 369 }
Giovani_Cardona 0:dc639ee44cab 370 if(sec[i]!=boton7[i]) //en caso de que un bit no coincida se descarta el boton 1
Giovani_Cardona 0:dc639ee44cab 371 {
Giovani_Cardona 0:dc639ee44cab 372 flag7=0;
Giovani_Cardona 0:dc639ee44cab 373 }
Giovani_Cardona 0:dc639ee44cab 374 if(sec[i]!=boton8[i]) //en caso de que un bit no coincida se descarta el boton 2
Giovani_Cardona 0:dc639ee44cab 375 {
Giovani_Cardona 0:dc639ee44cab 376 flag8=0;
Giovani_Cardona 0:dc639ee44cab 377 }
Giovani_Cardona 0:dc639ee44cab 378 if(sec[i]!=boton9[i]) //en caso de que un bit no coincida se descarta el boton 3
Giovani_Cardona 0:dc639ee44cab 379 {
Giovani_Cardona 0:dc639ee44cab 380 flag9=0;
Giovani_Cardona 0:dc639ee44cab 381 }
Giovani_Cardona 0:dc639ee44cab 382 if(sec[i]!=boton0[i]) //en caso de que un bit no coincida se descarta el boton 3
Giovani_Cardona 0:dc639ee44cab 383 {
Giovani_Cardona 0:dc639ee44cab 384 flag0=0;
Giovani_Cardona 0:dc639ee44cab 385 }
Giovani_Cardona 0:dc639ee44cab 386 if(sec[i]!=OK[i]) //en caso de que un bit no coincida se descarta el boton 3
Giovani_Cardona 0:dc639ee44cab 387 {
Giovani_Cardona 0:dc639ee44cab 388 flag_OK=0;
Giovani_Cardona 0:dc639ee44cab 389 }
Giovani_Cardona 0:dc639ee44cab 390 }
Giovani_Cardona 0:dc639ee44cab 391
Giovani_Cardona 0:dc639ee44cab 392 if(flag1 == 1) {x_irda =1;}
Giovani_Cardona 0:dc639ee44cab 393 if(flag2 == 1) {x_irda =2;}
Giovani_Cardona 0:dc639ee44cab 394 if(flag3 == 1) {x_irda =3;}
Giovani_Cardona 0:dc639ee44cab 395 if(flag4 == 1) {x_irda =4;}
Giovani_Cardona 0:dc639ee44cab 396 if(flag5 == 1) {x_irda =5;}
Giovani_Cardona 0:dc639ee44cab 397 if(flag6 == 1) {x_irda =6;}
Giovani_Cardona 0:dc639ee44cab 398 if(flag7 == 1) {x_irda =7;}
Giovani_Cardona 0:dc639ee44cab 399 if(flag8 == 1) {x_irda =8;}
Giovani_Cardona 0:dc639ee44cab 400 if(flag9 == 1) {x_irda =9;}
Giovani_Cardona 0:dc639ee44cab 401 if(flag0 == 1) {x_irda =0;}
Giovani_Cardona 0:dc639ee44cab 402 if(flag_OK == 1) {x_irda =-1;}
Giovani_Cardona 0:dc639ee44cab 403
Giovani_Cardona 0:dc639ee44cab 404 return x_irda;
Giovani_Cardona 0:dc639ee44cab 405 }
Giovani_Cardona 0:dc639ee44cab 406
Giovani_Cardona 0:dc639ee44cab 407 int set_Alarm_IRDA(void){
Giovani_Cardona 0:dc639ee44cab 408 lcd.locate(0, 3);
Giovani_Cardona 0:dc639ee44cab 409 int x1 = 0, x2 = 0, x3 = 0, c = 0;
Giovani_Cardona 0:dc639ee44cab 410 pos = x_i;
Giovani_Cardona 0:dc639ee44cab 411 f = 0;
Giovani_Cardona 0:dc639ee44cab 412 lcd.printf(" %02d:%02d:%02d %02d/%02d/%02d", Alarmas[pos-1][0],Alarmas[pos-1][1],Alarmas[pos-1][2],Alarmas[pos-1][3],Alarmas[pos-1][4],Alarmas[pos-1][5]);
Giovani_Cardona 0:dc639ee44cab 413
Giovani_Cardona 0:dc639ee44cab 414 while(1){
Giovani_Cardona 0:dc639ee44cab 415 if (detect_number() == 1){
Giovani_Cardona 0:dc639ee44cab 416 c++;
Giovani_Cardona 0:dc639ee44cab 417 if(c == 1){
Giovani_Cardona 0:dc639ee44cab 418 x1 = sel_number();
Giovani_Cardona 0:dc639ee44cab 419 pc.printf("\nx1: %d c: %d\n",x1,c);
Giovani_Cardona 0:dc639ee44cab 420 x = x1;
Giovani_Cardona 0:dc639ee44cab 421 }
Giovani_Cardona 0:dc639ee44cab 422
Giovani_Cardona 0:dc639ee44cab 423 if(c == 2){
Giovani_Cardona 0:dc639ee44cab 424 x2 = sel_number();
Giovani_Cardona 0:dc639ee44cab 425 pc.printf("\nx2: %d c: %d\n",x2,c);
Giovani_Cardona 0:dc639ee44cab 426 if( x2 == -1){
Giovani_Cardona 0:dc639ee44cab 427 x = x1;
Giovani_Cardona 0:dc639ee44cab 428 break;
Giovani_Cardona 0:dc639ee44cab 429 }
Giovani_Cardona 0:dc639ee44cab 430 else{
Giovani_Cardona 0:dc639ee44cab 431 x = x1*10 + x2;
Giovani_Cardona 0:dc639ee44cab 432 }
Giovani_Cardona 0:dc639ee44cab 433 }
Giovani_Cardona 0:dc639ee44cab 434 if (c == 3){
Giovani_Cardona 0:dc639ee44cab 435 x3 = sel_number();
Giovani_Cardona 0:dc639ee44cab 436 pc.printf("\nx3: %d c: %d\n",x3,c);
Giovani_Cardona 0:dc639ee44cab 437 if( x3 == -1){
Giovani_Cardona 0:dc639ee44cab 438 x = x1*10 + x2;
Giovani_Cardona 0:dc639ee44cab 439 break;
Giovani_Cardona 0:dc639ee44cab 440 }
Giovani_Cardona 0:dc639ee44cab 441 }
Giovani_Cardona 0:dc639ee44cab 442 }
Giovani_Cardona 0:dc639ee44cab 443 }
Giovani_Cardona 0:dc639ee44cab 444
Giovani_Cardona 0:dc639ee44cab 445 switch (count) //count representa la posición de la columna en la matriz Alarmas - en este orden HH:MM:SS DD/MM/YY
Giovani_Cardona 0:dc639ee44cab 446 {
Giovani_Cardona 0:dc639ee44cab 447 case 0: //Hora
Giovani_Cardona 0:dc639ee44cab 448 if (x < 0){x = 0;}
Giovani_Cardona 0:dc639ee44cab 449 if (x > 23){x = 23;}
Giovani_Cardona 0:dc639ee44cab 450 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 451 break;
Giovani_Cardona 0:dc639ee44cab 452
Giovani_Cardona 0:dc639ee44cab 453 case 1: //Minutos
Giovani_Cardona 0:dc639ee44cab 454 if (x < 0){x = 0;}
Giovani_Cardona 0:dc639ee44cab 455 if (x > 59){x = 59;}
Giovani_Cardona 0:dc639ee44cab 456 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 457 break;
Giovani_Cardona 0:dc639ee44cab 458
Giovani_Cardona 0:dc639ee44cab 459 case 2: //Segundos
Giovani_Cardona 0:dc639ee44cab 460 if (x < 0){x = 0;}
Giovani_Cardona 0:dc639ee44cab 461 if (x > 59){x = 59;}
Giovani_Cardona 0:dc639ee44cab 462 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 463 break;
Giovani_Cardona 0:dc639ee44cab 464
Giovani_Cardona 0:dc639ee44cab 465 case 3: // Día
Giovani_Cardona 0:dc639ee44cab 466 if (x < 0){x = 0;}
Giovani_Cardona 0:dc639ee44cab 467 if (x > 31){x = 31;}
Giovani_Cardona 0:dc639ee44cab 468 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 469 break;
Giovani_Cardona 0:dc639ee44cab 470
Giovani_Cardona 0:dc639ee44cab 471 case 4: // Mes
Giovani_Cardona 0:dc639ee44cab 472 if (x < 0){x = 0;}
Giovani_Cardona 0:dc639ee44cab 473 if (x > 12){x = 12;}
Giovani_Cardona 0:dc639ee44cab 474 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 475 break;
Giovani_Cardona 0:dc639ee44cab 476
Giovani_Cardona 0:dc639ee44cab 477 case 5: // Año
Giovani_Cardona 0:dc639ee44cab 478 if (x < 0){x = 0;}
Giovani_Cardona 0:dc639ee44cab 479 if (x > 99){x = 99;}
Giovani_Cardona 0:dc639ee44cab 480 Alarmas[pos-1][count] = x;
Giovani_Cardona 0:dc639ee44cab 481 break;
Giovani_Cardona 0:dc639ee44cab 482 }
Giovani_Cardona 0:dc639ee44cab 483
Giovani_Cardona 0:dc639ee44cab 484 if (count == 5){
Giovani_Cardona 0:dc639ee44cab 485 modo = 0;
Giovani_Cardona 0:dc639ee44cab 486 count = 0;
Giovani_Cardona 0:dc639ee44cab 487 f = 1;
Giovani_Cardona 0:dc639ee44cab 488 lcd.locate(0, 2);
Giovani_Cardona 0:dc639ee44cab 489 lcd.printf(" Alarm saved! ");
Giovani_Cardona 0:dc639ee44cab 490 lcd.locate(0, 3);
Giovani_Cardona 0:dc639ee44cab 491 lcd.printf(" %02d:%02d:%02d %02d/%02d/%02d", Alarmas[pos-1][0],Alarmas[pos-1][1],Alarmas[pos-1][2],Alarmas[pos-1][3],Alarmas[pos-1][4],Alarmas[pos-1][5]);
Giovani_Cardona 0:dc639ee44cab 492 wait(0.8);
Giovani_Cardona 0:dc639ee44cab 493 lcd.locate(0, 2);
Giovani_Cardona 0:dc639ee44cab 494 lcd.printf(" ");
Giovani_Cardona 0:dc639ee44cab 495 lcd.locate(0, 3);
Giovani_Cardona 0:dc639ee44cab 496 lcd.printf(" ");
Giovani_Cardona 0:dc639ee44cab 497 x = 0;
Giovani_Cardona 0:dc639ee44cab 498 }
Giovani_Cardona 0:dc639ee44cab 499 return f;
Giovani_Cardona 0:dc639ee44cab 500 }
Giovani_Cardona 0:dc639ee44cab 501
Giovani_Cardona 0:dc639ee44cab 502 void print_Alarm(void){
Giovani_Cardona 0:dc639ee44cab 503 printf("\n");
Giovani_Cardona 0:dc639ee44cab 504 for (int i=0; i<=15;i++){
Giovani_Cardona 0:dc639ee44cab 505 for (int j= 0; j<=5;j++){
Giovani_Cardona 0:dc639ee44cab 506 printf("%d ",Alarmas[i][j]);
Giovani_Cardona 0:dc639ee44cab 507 }
Giovani_Cardona 0:dc639ee44cab 508 printf("\n");
Giovani_Cardona 0:dc639ee44cab 509 }
Giovani_Cardona 0:dc639ee44cab 510 }
Giovani_Cardona 0:dc639ee44cab 511
Giovani_Cardona 0:dc639ee44cab 512 /**********************************************************************
Giovani_Cardona 0:dc639ee44cab 513 * Function: get_user_input()
Giovani_Cardona 0:dc639ee44cab 514 * Parameters: message - user prompt
Giovani_Cardona 0:dc639ee44cab 515 * min - minimum value of input
Giovani_Cardona 0:dc639ee44cab 516 * max - maximum value of input
Giovani_Cardona 0:dc639ee44cab 517 * member - pointer to struct member
Giovani_Cardona 0:dc639ee44cab 518 * Returns: none
Giovani_Cardona 0:dc639ee44cab 519 *
Giovani_Cardona 0:dc639ee44cab 520 * Description: get time/date input from user
Giovani_Cardona 0:dc639ee44cab 521 *
Giovani_Cardona 0:dc639ee44cab 522 **********************************************************************/
Giovani_Cardona 0:dc639ee44cab 523 void get_user_input(char* message, uint8_t min, uint8_t max, uint32_t* member)
Giovani_Cardona 0:dc639ee44cab 524 {
Giovani_Cardona 0:dc639ee44cab 525 uint32_t temp;
Giovani_Cardona 0:dc639ee44cab 526
Giovani_Cardona 0:dc639ee44cab 527 do
Giovani_Cardona 0:dc639ee44cab 528 {
Giovani_Cardona 0:dc639ee44cab 529 printf("\n%s", message);
Giovani_Cardona 0:dc639ee44cab 530
Giovani_Cardona 0:dc639ee44cab 531 //for some reason mbed doesn't like a pointer to a member in scanf
Giovani_Cardona 0:dc639ee44cab 532 //term.scanf("%d", member); works with gcc on RPi
Giovani_Cardona 0:dc639ee44cab 533 scanf("%d", &temp);
Giovani_Cardona 0:dc639ee44cab 534
Giovani_Cardona 0:dc639ee44cab 535 *member = temp;
Giovani_Cardona 0:dc639ee44cab 536
Giovani_Cardona 0:dc639ee44cab 537 if((*(member)< min) || (*(member) > max))
Giovani_Cardona 0:dc639ee44cab 538 {
Giovani_Cardona 0:dc639ee44cab 539 printf("\nERROR-RTI");
Giovani_Cardona 0:dc639ee44cab 540 }
Giovani_Cardona 0:dc639ee44cab 541 }
Giovani_Cardona 0:dc639ee44cab 542 while((*(member) < min) || (*(member) > max));
Giovani_Cardona 0:dc639ee44cab 543 }
Giovani_Cardona 0:dc639ee44cab 544
Giovani_Cardona 0:dc639ee44cab 545
Giovani_Cardona 0:dc639ee44cab 546 void get_user_input(char* message, uint8_t min, uint8_t max, bool* member)
Giovani_Cardona 0:dc639ee44cab 547 {
Giovani_Cardona 0:dc639ee44cab 548 uint32_t temp;
Giovani_Cardona 0:dc639ee44cab 549
Giovani_Cardona 0:dc639ee44cab 550 do
Giovani_Cardona 0:dc639ee44cab 551 {
Giovani_Cardona 0:dc639ee44cab 552 printf("\n%s", message);
Giovani_Cardona 0:dc639ee44cab 553
Giovani_Cardona 0:dc639ee44cab 554 //for some reason mbed doesn't like a pointer to a member in scanf
Giovani_Cardona 0:dc639ee44cab 555 //term.scanf("%d", member); works with gcc on RPi
Giovani_Cardona 0:dc639ee44cab 556 scanf("%d", &temp);
Giovani_Cardona 0:dc639ee44cab 557
Giovani_Cardona 0:dc639ee44cab 558 *member = temp;
Giovani_Cardona 0:dc639ee44cab 559
Giovani_Cardona 0:dc639ee44cab 560 if((*(member)< min) || (*(member) > max))
Giovani_Cardona 0:dc639ee44cab 561 {
Giovani_Cardona 0:dc639ee44cab 562 printf("\nERROR-RTI");
Giovani_Cardona 0:dc639ee44cab 563 }
Giovani_Cardona 0:dc639ee44cab 564 }
Giovani_Cardona 0:dc639ee44cab 565 while((*(member) < min) || (*(member) > max));
Giovani_Cardona 0:dc639ee44cab 566 }
Giovani_Cardona 0:dc639ee44cab 567
Giovani_Cardona 0:dc639ee44cab 568 void set_RTC(void){
Giovani_Cardona 0:dc639ee44cab 569
Giovani_Cardona 0:dc639ee44cab 570 //Cambio de la configuración del RTC DS3231
Giovani_Cardona 0:dc639ee44cab 571 ds3231_time_t rtc_time;
Giovani_Cardona 0:dc639ee44cab 572 ds3231_calendar_t rtc_calendar;
Giovani_Cardona 0:dc639ee44cab 573
Giovani_Cardona 0:dc639ee44cab 574 //get day from user
Giovani_Cardona 0:dc639ee44cab 575 get_user_input("\nPlease enter day of week, 1 for Sunday (1-7): ", 1,
Giovani_Cardona 0:dc639ee44cab 576 7, &rtc_calendar.day);
Giovani_Cardona 0:dc639ee44cab 577
Giovani_Cardona 0:dc639ee44cab 578 //get day of month from user
Giovani_Cardona 0:dc639ee44cab 579 get_user_input("\nPlease enter day of month (1-31): ", 1, 31,
Giovani_Cardona 0:dc639ee44cab 580 &rtc_calendar.date);
Giovani_Cardona 0:dc639ee44cab 581
Giovani_Cardona 0:dc639ee44cab 582 //get month from user
Giovani_Cardona 0:dc639ee44cab 583 get_user_input("\nPlease enter the month, 1 for January (1-12): ", 1,
Giovani_Cardona 0:dc639ee44cab 584 12, &rtc_calendar.month);
Giovani_Cardona 0:dc639ee44cab 585
Giovani_Cardona 0:dc639ee44cab 586 //get year from user
Giovani_Cardona 0:dc639ee44cab 587 get_user_input("\nPlease enter the year (0-99): ",0, 99,
Giovani_Cardona 0:dc639ee44cab 588 &rtc_calendar.year);
Giovani_Cardona 0:dc639ee44cab 589
Giovani_Cardona 0:dc639ee44cab 590 //Get time mode
Giovani_Cardona 0:dc639ee44cab 591 get_user_input("\nWhat time mode? 1 for 12hr 0 for 24hr: ", 0, 1,
Giovani_Cardona 0:dc639ee44cab 592 &rtc_time.mode);
Giovani_Cardona 0:dc639ee44cab 593
Giovani_Cardona 0:dc639ee44cab 594 if(rtc_time.mode)
Giovani_Cardona 0:dc639ee44cab 595 {
Giovani_Cardona 0:dc639ee44cab 596 //Get AM/PM status
Giovani_Cardona 0:dc639ee44cab 597 get_user_input("\nIs it AM or PM? 0 for AM 1 for PM: ", 0, 1,
Giovani_Cardona 0:dc639ee44cab 598 &rtc_time.am_pm);
Giovani_Cardona 0:dc639ee44cab 599 //Get hour from user
Giovani_Cardona 0:dc639ee44cab 600 get_user_input("\nPlease enter the hour (1-12): ", 1, 12,
Giovani_Cardona 0:dc639ee44cab 601 &rtc_time.hours);
Giovani_Cardona 0:dc639ee44cab 602 }
Giovani_Cardona 0:dc639ee44cab 603 else
Giovani_Cardona 0:dc639ee44cab 604 {
Giovani_Cardona 0:dc639ee44cab 605 //Get hour from user
Giovani_Cardona 0:dc639ee44cab 606 get_user_input("\nPlease enter the hour (0-23): ", 0, 23,
Giovani_Cardona 0:dc639ee44cab 607 &rtc_time.hours);
Giovani_Cardona 0:dc639ee44cab 608 }
Giovani_Cardona 0:dc639ee44cab 609
Giovani_Cardona 0:dc639ee44cab 610 //Get minutes from user
Giovani_Cardona 0:dc639ee44cab 611 get_user_input("\nPlease enter the minute (0-59): ", 0, 59,
Giovani_Cardona 0:dc639ee44cab 612 &rtc_time.minutes);
Giovani_Cardona 0:dc639ee44cab 613
Giovani_Cardona 0:dc639ee44cab 614
Giovani_Cardona 0:dc639ee44cab 615 //Get seconds from user
Giovani_Cardona 0:dc639ee44cab 616 get_user_input("\nPlease enter the second (0-59): ", 0, 59,
Giovani_Cardona 0:dc639ee44cab 617 &rtc_time.seconds);
Giovani_Cardona 0:dc639ee44cab 618
Giovani_Cardona 0:dc639ee44cab 619
Giovani_Cardona 0:dc639ee44cab 620
Giovani_Cardona 0:dc639ee44cab 621 //Set the time, uses inverted logic for return value
Giovani_Cardona 0:dc639ee44cab 622 if(rtc.set_time(rtc_time))
Giovani_Cardona 0:dc639ee44cab 623 {
Giovani_Cardona 0:dc639ee44cab 624 printf("\nrtc.set_time failed!!\n");
Giovani_Cardona 0:dc639ee44cab 625 exit(0);
Giovani_Cardona 0:dc639ee44cab 626 }
Giovani_Cardona 0:dc639ee44cab 627
Giovani_Cardona 0:dc639ee44cab 628 //Set the calendar, uses inverted logic for return value
Giovani_Cardona 0:dc639ee44cab 629 if(rtc.set_calendar(rtc_calendar))
Giovani_Cardona 0:dc639ee44cab 630 {
Giovani_Cardona 0:dc639ee44cab 631 printf("\nrtc.set_calendar failed!!\n");
Giovani_Cardona 0:dc639ee44cab 632 exit(0);
Giovani_Cardona 0:dc639ee44cab 633 }
Giovani_Cardona 0:dc639ee44cab 634
Giovani_Cardona 0:dc639ee44cab 635 }