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
main.cpp@0:dc639ee44cab, 2019-08-13 (annotated)
- Committer:
- Giovani_Cardona
- Date:
- Tue Aug 13 03:24:11 2019 +0000
- Revision:
- 0:dc639ee44cab
.
Who changed what in which revision?
User | Revision | Line number | New 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 | } |