Electrocardiograma: consiste en monitorear la señal cardia de una persona. Proporcionando el numero de latidos por minuto.
Dependencies: mbed TextLCD Keypad
main.cpp@0:2e353d06d153, 2019-05-31 (annotated)
- Committer:
- LeonardoLG
- Date:
- Fri May 31 00:40:02 2019 +0000
- Revision:
- 0:2e353d06d153
ProyectoECG;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
LeonardoLG | 0:2e353d06d153 | 1 | /* ########################################################################### |
LeonardoLG | 0:2e353d06d153 | 2 | ** Archivo : main.c |
LeonardoLG | 0:2e353d06d153 | 3 | ** Proyecto : FRDM-KL46Z_Plantilla |
LeonardoLG | 0:2e353d06d153 | 4 | ** Procesador : MKL46Z256VLL4 |
LeonardoLG | 0:2e353d06d153 | 5 | ** Herramienta : Mbed |
LeonardoLG | 0:2e353d06d153 | 6 | ** Version : Driver 01.01 |
LeonardoLG | 0:2e353d06d153 | 7 | ** Compilador : GNU C Compiler |
LeonardoLG | 0:2e353d06d153 | 8 | ** Fecha/Hora : 24-05-2019, 00:48, # CodeGen: 0 |
LeonardoLG | 0:2e353d06d153 | 9 | ** Descripción : |
LeonardoLG | 0:2e353d06d153 | 10 | ** |
LeonardoLG | 0:2e353d06d153 | 11 | ** This Proyect Measures the heart rate in one minute. and shows it on a 20X4 LCD screen. |
LeonardoLG | 0:2e353d06d153 | 12 | ** Componentes : GPIO, Timer, etc ,DisplayLCD,KeyPad,Dispay 7segmentos,"AD8232 with electrodes for heart". |
LeonardoLG | 0:2e353d06d153 | 13 | ** Configuraciones : Includes, Stacks y Drivers externos |
LeonardoLG | 0:2e353d06d153 | 14 | ** Autores : |
LeonardoLG | 0:2e353d06d153 | 15 | ** ATEAM Development Group: |
LeonardoLG | 0:2e353d06d153 | 16 | ** -Josué Leonardo López García and |
LeonardoLG | 0:2e353d06d153 | 17 | ** - Antulio Morgado Valle |
LeonardoLG | 0:2e353d06d153 | 18 | ** |
LeonardoLG | 0:2e353d06d153 | 19 | ** Versión : Beta |
LeonardoLG | 0:2e353d06d153 | 20 | ** Revisión : A |
LeonardoLG | 0:2e353d06d153 | 21 | ** Release : 0 |
LeonardoLG | 0:2e353d06d153 | 22 | ** Bugs & Fixes : |
LeonardoLG | 0:2e353d06d153 | 23 | ** Date : 24/05/2019 |
LeonardoLG | 0:2e353d06d153 | 24 | ** Added support for Led_RGB |
LeonardoLG | 0:2e353d06d153 | 25 | ** 22/09/2018 |
LeonardoLG | 0:2e353d06d153 | 26 | ** Added LCD Menu, Beta version (with bugs) |
LeonardoLG | 0:2e353d06d153 | 27 | ** |
LeonardoLG | 0:2e353d06d153 | 28 | * ###########################################################################/ |
LeonardoLG | 0:2e353d06d153 | 29 | |
LeonardoLG | 0:2e353d06d153 | 30 | :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
LeonardoLG | 0:2e353d06d153 | 31 | : Includes |
LeonardoLG | 0:2e353d06d153 | 32 | :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
LeonardoLG | 0:2e353d06d153 | 33 | */ |
LeonardoLG | 0:2e353d06d153 | 34 | #include "mbed.h" |
LeonardoLG | 0:2e353d06d153 | 35 | #include "TextLCD.h" //Este archivo contiene la libreria para manipular el DiplayLCD |
LeonardoLG | 0:2e353d06d153 | 36 | #include "Keypad.h" //Este archivo contiene la libreria para manipular el TecladoMatricial |
LeonardoLG | 0:2e353d06d153 | 37 | //#include "MyNewTLCD.h" //Este archivo contiene la libreria para dibujar la señal de onda |
LeonardoLG | 0:2e353d06d153 | 38 | /* |
LeonardoLG | 0:2e353d06d153 | 39 | :............................................................................... |
LeonardoLG | 0:2e353d06d153 | 40 | : Definiciones |
LeonardoLG | 0:2e353d06d153 | 41 | :............................................................................... |
LeonardoLG | 0:2e353d06d153 | 42 | */ |
LeonardoLG | 0:2e353d06d153 | 43 | #define TRUE 1 |
LeonardoLG | 0:2e353d06d153 | 44 | #define FALSE 0 |
LeonardoLG | 0:2e353d06d153 | 45 | |
LeonardoLG | 0:2e353d06d153 | 46 | /* |
LeonardoLG | 0:2e353d06d153 | 47 | +------------------------------------------------------------------------------- |
LeonardoLG | 0:2e353d06d153 | 48 | | Configuración de Puertos |
LeonardoLG | 0:2e353d06d153 | 49 | +------------------------------------------------------------------------------- |
LeonardoLG | 0:2e353d06d153 | 50 | */ |
LeonardoLG | 0:2e353d06d153 | 51 | DigitalIn Digital(PTE1); //Confifuracion de una entrada digital |
LeonardoLG | 0:2e353d06d153 | 52 | DigitalIn Digital1(PTE0);//Confifuracion de una otra entrada digital |
LeonardoLG | 0:2e353d06d153 | 53 | DigitalOut LedG(LED1); |
LeonardoLG | 0:2e353d06d153 | 54 | DigitalOut LedR(LED2); |
LeonardoLG | 0:2e353d06d153 | 55 | BusOut SalidaSeg(PTB18,PTC10,PTC11,PTC7,PTB19,PTC4,PTC6,PTC0);//Confifuracion de la salida de segmentos del Diplay 7Seg |
LeonardoLG | 0:2e353d06d153 | 56 | BusOut SalidaDig(PTA12,PTD3,PTA2,PTA1);//Confifuracion de la salida de Digitos del Diplay 7Seg |
LeonardoLG | 0:2e353d06d153 | 57 | TextLCD lcd(PTE20,PTE21,PTE22,PTE23,PTB20,PTE30,TextLCD::LCD20x4); // rs, e, d4-d7 Confifuracion de la salida del DiplayLCD y sus datos |
LeonardoLG | 0:2e353d06d153 | 58 | Keypad TecMat(PTE16,PTE6,PTE3,PTE2,PTE31,PTE19,PTE18,PTE17);//Confifuracion de puertos para el Teclado Matricial |
LeonardoLG | 0:2e353d06d153 | 59 | DigitalOut gpo(D0); |
LeonardoLG | 0:2e353d06d153 | 60 | DigitalOut led(LED_RED); |
LeonardoLG | 0:2e353d06d153 | 61 | AnalogIn A(A0);//Confifuracion de la Entrada Analogica |
LeonardoLG | 0:2e353d06d153 | 62 | Timer relog; //Timer que fungira como contador en segundos para monitoriar el tiempo |
LeonardoLG | 0:2e353d06d153 | 63 | /* |
LeonardoLG | 0:2e353d06d153 | 64 | +------------------------------------------------------------------------------- |
LeonardoLG | 0:2e353d06d153 | 65 | | Variables Globales de Usuario |
LeonardoLG | 0:2e353d06d153 | 66 | +------------------------------------------------------------------------------- |
LeonardoLG | 0:2e353d06d153 | 67 | */ |
LeonardoLG | 0:2e353d06d153 | 68 | |
LeonardoLG | 0:2e353d06d153 | 69 | uint16_t cont_1ms=0,scan_rate=0,counter=500,flag1,flag2,flag3,cont_10ms=0,cont_100ms=0,cont_1s=0;//Declaracion e inicializacion de los contadores y banderas |
LeonardoLG | 0:2e353d06d153 | 70 | int16_t i=0; |
LeonardoLG | 0:2e353d06d153 | 71 | uint16_t Digito[]={0x01,0x02,0x04,0x08};//Orden de los Digitos del Display de 7Seg |
LeonardoLG | 0:2e353d06d153 | 72 | uint16_t Number[]={0x81,0xE7,0x49,0x43,0x27,0x13,0x11,0xC7,0x01,0x03,0xFF}; |
LeonardoLG | 0:2e353d06d153 | 73 | char key; //Variable de tipo caracter que sera designada por el teclado matricial |
LeonardoLG | 0:2e353d06d153 | 74 | int released=1,tiemp=0,j=0;//inicializacion de variables de las funciones |
LeonardoLG | 0:2e353d06d153 | 75 | /* |
LeonardoLG | 0:2e353d06d153 | 76 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
LeonardoLG | 0:2e353d06d153 | 77 | | Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción |
LeonardoLG | 0:2e353d06d153 | 78 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
LeonardoLG | 0:2e353d06d153 | 79 | */ |
LeonardoLG | 0:2e353d06d153 | 80 | |
LeonardoLG | 0:2e353d06d153 | 81 | //funcion1 |
LeonardoLG | 0:2e353d06d153 | 82 | uint16_t Letra(uint8_t L){ //Funcion encargada de recibir un numero para despues codificarlo y poder ser mostrado en el display de 7Seg |
LeonardoLG | 0:2e353d06d153 | 83 | if(L=='0')return 0x81; |
LeonardoLG | 0:2e353d06d153 | 84 | else if(L=='1')return 0xE7; |
LeonardoLG | 0:2e353d06d153 | 85 | else if(L=='2')return 0x49; |
LeonardoLG | 0:2e353d06d153 | 86 | else if(L=='3')return 0x43; |
LeonardoLG | 0:2e353d06d153 | 87 | else if(L=='4')return 0x27; |
LeonardoLG | 0:2e353d06d153 | 88 | else if(L=='5')return 0x13; |
LeonardoLG | 0:2e353d06d153 | 89 | else if(L=='6')return 0x11; |
LeonardoLG | 0:2e353d06d153 | 90 | else if(L=='7')return 0xC7; |
LeonardoLG | 0:2e353d06d153 | 91 | else if(L=='8')return 0x01; |
LeonardoLG | 0:2e353d06d153 | 92 | else if(L=='9')return 0x03; |
LeonardoLG | 0:2e353d06d153 | 93 | else if(L=='A'||L=='a')return 0x05; |
LeonardoLG | 0:2e353d06d153 | 94 | else if(L=='B'||L=='b')return 0x31; |
LeonardoLG | 0:2e353d06d153 | 95 | else if(L=='C'||L=='c')return 0x99; |
LeonardoLG | 0:2e353d06d153 | 96 | else if(L=='D'||L=='d')return 0x61; |
LeonardoLG | 0:2e353d06d153 | 97 | else if(L=='E'||L=='e')return 0x19; |
LeonardoLG | 0:2e353d06d153 | 98 | else if(L=='F'||L=='f')return 0x1D; |
LeonardoLG | 0:2e353d06d153 | 99 | else if(L=='G'||L=='g')return 0x03; |
LeonardoLG | 0:2e353d06d153 | 100 | else if(L=='H'||L=='h')return 0x25; |
LeonardoLG | 0:2e353d06d153 | 101 | else if(L=='I'||L=='i')return 0xFD; |
LeonardoLG | 0:2e353d06d153 | 102 | else if(L=='J'||L=='j')return 0xE1; |
LeonardoLG | 0:2e353d06d153 | 103 | else if(L=='K'||L=='k')return 0x29; |
LeonardoLG | 0:2e353d06d153 | 104 | else if(L=='L'||L=='l')return 0xB9; |
LeonardoLG | 0:2e353d06d153 | 105 | else if(L=='M'||L=='m')return 0x85; |
LeonardoLG | 0:2e353d06d153 | 106 | else if(L=='N'||L=='n')return 0x75; |
LeonardoLG | 0:2e353d06d153 | 107 | else if(L=='O'||L=='o')return 0x81; |
LeonardoLG | 0:2e353d06d153 | 108 | else if(L=='P'||L=='p')return 0x0D; |
LeonardoLG | 0:2e353d06d153 | 109 | else if(L=='Q'||L=='q')return 0x07; |
LeonardoLG | 0:2e353d06d153 | 110 | else if(L=='R'||L=='r')return 0x7D; |
LeonardoLG | 0:2e353d06d153 | 111 | else if(L=='S'||L=='s')return 0x13; |
LeonardoLG | 0:2e353d06d153 | 112 | else if(L=='T'||L=='t')return 0x39; |
LeonardoLG | 0:2e353d06d153 | 113 | else if(L=='U'||L=='u')return 0xF1; |
LeonardoLG | 0:2e353d06d153 | 114 | else if(L=='V'||L=='v')return 0xA1; |
LeonardoLG | 0:2e353d06d153 | 115 | else if(L=='W'||L=='w')return 0xD1; |
LeonardoLG | 0:2e353d06d153 | 116 | else if(L=='X'||L=='x')return 0x3D; |
LeonardoLG | 0:2e353d06d153 | 117 | else if(L=='Y'||L=='y')return 0x23; |
LeonardoLG | 0:2e353d06d153 | 118 | else if(L=='Z'||L=='z')return 0x5B; |
LeonardoLG | 0:2e353d06d153 | 119 | else if(L=='-')return 0x7F; |
LeonardoLG | 0:2e353d06d153 | 120 | else if(L=='=')return 0x7B; |
LeonardoLG | 0:2e353d06d153 | 121 | else if(L=='.')return 0xFE; |
LeonardoLG | 0:2e353d06d153 | 122 | else if(L==' ')return 0xFF; |
LeonardoLG | 0:2e353d06d153 | 123 | else return 0xFF; |
LeonardoLG | 0:2e353d06d153 | 124 | } |
LeonardoLG | 0:2e353d06d153 | 125 | |
LeonardoLG | 0:2e353d06d153 | 126 | //funcion2 |
LeonardoLG | 0:2e353d06d153 | 127 | void barrido(){//Funcion que se encarga del barrido del display de 7Seg |
LeonardoLG | 0:2e353d06d153 | 128 | cont_1ms++; |
LeonardoLG | 0:2e353d06d153 | 129 | scan_rate++; |
LeonardoLG | 0:2e353d06d153 | 130 | counter--; |
LeonardoLG | 0:2e353d06d153 | 131 | if(scan_rate==2) |
LeonardoLG | 0:2e353d06d153 | 132 | { |
LeonardoLG | 0:2e353d06d153 | 133 | scan_rate=0; |
LeonardoLG | 0:2e353d06d153 | 134 | flag1=TRUE; |
LeonardoLG | 0:2e353d06d153 | 135 | } |
LeonardoLG | 0:2e353d06d153 | 136 | if(scan_rate==1) |
LeonardoLG | 0:2e353d06d153 | 137 | { |
LeonardoLG | 0:2e353d06d153 | 138 | flag3=TRUE; |
LeonardoLG | 0:2e353d06d153 | 139 | } |
LeonardoLG | 0:2e353d06d153 | 140 | if (cont_1ms>=10) |
LeonardoLG | 0:2e353d06d153 | 141 | { |
LeonardoLG | 0:2e353d06d153 | 142 | cont_10ms++; |
LeonardoLG | 0:2e353d06d153 | 143 | cont_1ms=0; |
LeonardoLG | 0:2e353d06d153 | 144 | } |
LeonardoLG | 0:2e353d06d153 | 145 | if (cont_10ms>=10) |
LeonardoLG | 0:2e353d06d153 | 146 | { |
LeonardoLG | 0:2e353d06d153 | 147 | cont_100ms++; |
LeonardoLG | 0:2e353d06d153 | 148 | cont_10ms=0; |
LeonardoLG | 0:2e353d06d153 | 149 | } |
LeonardoLG | 0:2e353d06d153 | 150 | if (cont_100ms>=10) |
LeonardoLG | 0:2e353d06d153 | 151 | { |
LeonardoLG | 0:2e353d06d153 | 152 | cont_1s++; |
LeonardoLG | 0:2e353d06d153 | 153 | cont_100ms=0; |
LeonardoLG | 0:2e353d06d153 | 154 | } |
LeonardoLG | 0:2e353d06d153 | 155 | if (cont_1s>=10) |
LeonardoLG | 0:2e353d06d153 | 156 | { |
LeonardoLG | 0:2e353d06d153 | 157 | cont_1s=0; |
LeonardoLG | 0:2e353d06d153 | 158 | } |
LeonardoLG | 0:2e353d06d153 | 159 | if (!counter) |
LeonardoLG | 0:2e353d06d153 | 160 | { |
LeonardoLG | 0:2e353d06d153 | 161 | counter=500; |
LeonardoLG | 0:2e353d06d153 | 162 | flag2=TRUE; |
LeonardoLG | 0:2e353d06d153 | 163 | } |
LeonardoLG | 0:2e353d06d153 | 164 | } |
LeonardoLG | 0:2e353d06d153 | 165 | |
LeonardoLG | 0:2e353d06d153 | 166 | //funcion3 |
LeonardoLG | 0:2e353d06d153 | 167 | |
LeonardoLG | 0:2e353d06d153 | 168 | void teclado() |
LeonardoLG | 0:2e353d06d153 | 169 | {//Funcion se encarga de asignar un caracter a la variable key dependiendo del estado del teclado matricial |
LeonardoLG | 0:2e353d06d153 | 170 | key=TecMat.ReadKey(); |
LeonardoLG | 0:2e353d06d153 | 171 | if(key=='\0') |
LeonardoLG | 0:2e353d06d153 | 172 | released=1; |
LeonardoLG | 0:2e353d06d153 | 173 | if((key!='\0') && (released==1)) |
LeonardoLG | 0:2e353d06d153 | 174 | { |
LeonardoLG | 0:2e353d06d153 | 175 | lcd.printf("%c",key); |
LeonardoLG | 0:2e353d06d153 | 176 | released=0; |
LeonardoLG | 0:2e353d06d153 | 177 | |
LeonardoLG | 0:2e353d06d153 | 178 | } |
LeonardoLG | 0:2e353d06d153 | 179 | } |
LeonardoLG | 0:2e353d06d153 | 180 | |
LeonardoLG | 0:2e353d06d153 | 181 | //funcion4 |
LeonardoLG | 0:2e353d06d153 | 182 | |
LeonardoLG | 0:2e353d06d153 | 183 | void WelcomToECG(void){ |
LeonardoLG | 0:2e353d06d153 | 184 | //Esta funcion se encarga de dar la bienvenida al ECG y dar instrucciones al usuario para su correcto funcionamiento |
LeonardoLG | 0:2e353d06d153 | 185 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 186 | lcd.locate(0,0); |
LeonardoLG | 0:2e353d06d153 | 187 | lcd.printf("Bienvenido al ECG."); |
LeonardoLG | 0:2e353d06d153 | 188 | lcd.locate(0,1); |
LeonardoLG | 0:2e353d06d153 | 189 | lcd.printf("Por favor coloca los"); |
LeonardoLG | 0:2e353d06d153 | 190 | lcd.locate(0,2); |
LeonardoLG | 0:2e353d06d153 | 191 | lcd.printf("electrodos referente"); |
LeonardoLG | 0:2e353d06d153 | 192 | lcd.locate(0,3); |
LeonardoLG | 0:2e353d06d153 | 193 | lcd.printf("al triangulo de");wait(5); |
LeonardoLG | 0:2e353d06d153 | 194 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 195 | lcd.locate(0,0); |
LeonardoLG | 0:2e353d06d153 | 196 | lcd.printf("Eithoven.");wait(3); |
LeonardoLG | 0:2e353d06d153 | 197 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 198 | lcd.printf("Tiempo de espera: 3 seg.");wait(05); |
LeonardoLG | 0:2e353d06d153 | 199 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 200 | lcd.locate(0,0); |
LeonardoLG | 0:2e353d06d153 | 201 | lcd.printf("Por favor, mantenga"); |
LeonardoLG | 0:2e353d06d153 | 202 | lcd.locate(0,1); |
LeonardoLG | 0:2e353d06d153 | 203 | lcd.printf("presionada la tecla "); |
LeonardoLG | 0:2e353d06d153 | 204 | lcd.locate(0,2); |
LeonardoLG | 0:2e353d06d153 | 205 | lcd.printf("A Si ya tiene"); |
LeonardoLG | 0:2e353d06d153 | 206 | lcd.locate(0,3); |
LeonardoLG | 0:2e353d06d153 | 207 | lcd.printf("los electrodos ");wait(6); |
LeonardoLG | 0:2e353d06d153 | 208 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 209 | } |
LeonardoLG | 0:2e353d06d153 | 210 | |
LeonardoLG | 0:2e353d06d153 | 211 | |
LeonardoLG | 0:2e353d06d153 | 212 | /* |
LeonardoLG | 0:2e353d06d153 | 213 | #=============================================================================== |
LeonardoLG | 0:2e353d06d153 | 214 | | |
LeonardoLG | 0:2e353d06d153 | 215 | | P R O G R A M A P R I N C I P A L |
LeonardoLG | 0:2e353d06d153 | 216 | | |
LeonardoLG | 0:2e353d06d153 | 217 | #=============================================================================== |
LeonardoLG | 0:2e353d06d153 | 218 | */ |
LeonardoLG | 0:2e353d06d153 | 219 | |
LeonardoLG | 0:2e353d06d153 | 220 | int main() |
LeonardoLG | 0:2e353d06d153 | 221 | { |
LeonardoLG | 0:2e353d06d153 | 222 | |
LeonardoLG | 0:2e353d06d153 | 223 | Ticker timer;//Declaracion de un timer usado en el barrido del display |
LeonardoLG | 0:2e353d06d153 | 224 | timer.attach_us(&barrido,500); |
LeonardoLG | 0:2e353d06d153 | 225 | |
LeonardoLG | 0:2e353d06d153 | 226 | uint16_t longitud=63;//Se designa una longitud para el mensaje que queremos mostrar |
LeonardoLG | 0:2e353d06d153 | 227 | int16_t j=0,e=0; |
LeonardoLG | 0:2e353d06d153 | 228 | while(e<3){//Lazo principal del corrimiento del display el corrimiento solo se hara 2 veces |
LeonardoLG | 0:2e353d06d153 | 229 | uint8_t Cadena[]="HOLA ESIME ZACATENCO ING EN COMUNICACIONES Y ELECTRONICA "; |
LeonardoLG | 0:2e353d06d153 | 230 | uint8_t Apaga[]=" "; |
LeonardoLG | 0:2e353d06d153 | 231 | if (flag1==TRUE){ |
LeonardoLG | 0:2e353d06d153 | 232 | SalidaSeg = Letra(Apaga[0]); |
LeonardoLG | 0:2e353d06d153 | 233 | SalidaDig = Digito[-i+3]; |
LeonardoLG | 0:2e353d06d153 | 234 | SalidaSeg = Letra(Cadena[i+j-5]); |
LeonardoLG | 0:2e353d06d153 | 235 | |
LeonardoLG | 0:2e353d06d153 | 236 | i++; |
LeonardoLG | 0:2e353d06d153 | 237 | if(i==4)i=0; |
LeonardoLG | 0:2e353d06d153 | 238 | if(j==longitud)j=0; |
LeonardoLG | 0:2e353d06d153 | 239 | LedR=!LedR; |
LeonardoLG | 0:2e353d06d153 | 240 | flag1=FALSE; |
LeonardoLG | 0:2e353d06d153 | 241 | |
LeonardoLG | 0:2e353d06d153 | 242 | } |
LeonardoLG | 0:2e353d06d153 | 243 | if (flag2==TRUE){ |
LeonardoLG | 0:2e353d06d153 | 244 | LedG=!LedG; |
LeonardoLG | 0:2e353d06d153 | 245 | flag2=FALSE; |
LeonardoLG | 0:2e353d06d153 | 246 | j++; |
LeonardoLG | 0:2e353d06d153 | 247 | } |
LeonardoLG | 0:2e353d06d153 | 248 | e++; |
LeonardoLG | 0:2e353d06d153 | 249 | } |
LeonardoLG | 0:2e353d06d153 | 250 | |
LeonardoLG | 0:2e353d06d153 | 251 | |
LeonardoLG | 0:2e353d06d153 | 252 | |
LeonardoLG | 0:2e353d06d153 | 253 | |
LeonardoLG | 0:2e353d06d153 | 254 | //Inicio del Programa, se muestra en el DisplayLCD |
LeonardoLG | 0:2e353d06d153 | 255 | Inicio: |
LeonardoLG | 0:2e353d06d153 | 256 | key=NULL; |
LeonardoLG | 0:2e353d06d153 | 257 | lcd.printf("ELECTROCARDIOGRAMA");wait(4); |
LeonardoLG | 0:2e353d06d153 | 258 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 259 | lcd.locate(0,0); |
LeonardoLG | 0:2e353d06d153 | 260 | lcd.printf("Hola!"); |
LeonardoLG | 0:2e353d06d153 | 261 | lcd.locate(0,1); |
LeonardoLG | 0:2e353d06d153 | 262 | lcd.printf("Este dispositivo"); |
LeonardoLG | 0:2e353d06d153 | 263 | lcd.locate(0,2); |
LeonardoLG | 0:2e353d06d153 | 264 | lcd.printf("mide el ritmo "); |
LeonardoLG | 0:2e353d06d153 | 265 | lcd.locate(0,3); |
LeonardoLG | 0:2e353d06d153 | 266 | lcd.printf("cardiaco.");wait(4); |
LeonardoLG | 0:2e353d06d153 | 267 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 268 | lcd.locate(0,0); |
LeonardoLG | 0:2e353d06d153 | 269 | lcd.printf("Por favor, mantenga"); |
LeonardoLG | 0:2e353d06d153 | 270 | lcd.locate(0,1); |
LeonardoLG | 0:2e353d06d153 | 271 | lcd.printf("presionada la tecla"); |
LeonardoLG | 0:2e353d06d153 | 272 | lcd.locate(0,2); |
LeonardoLG | 0:2e353d06d153 | 273 | lcd.printf("Por 3 Seg,segun su "); |
LeonardoLG | 0:2e353d06d153 | 274 | lcd.locate(0,3); |
LeonardoLG | 0:2e353d06d153 | 275 | lcd.printf("Eleccion ");wait(4); |
LeonardoLG | 0:2e353d06d153 | 276 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 277 | lcd.locate(0,0); |
LeonardoLG | 0:2e353d06d153 | 278 | lcd.printf("0 Para Salir"); |
LeonardoLG | 0:2e353d06d153 | 279 | lcd.locate(0,1); |
LeonardoLG | 0:2e353d06d153 | 280 | lcd.printf("1 Para Inicio"); |
LeonardoLG | 0:2e353d06d153 | 281 | lcd.locate(0,2); |
LeonardoLG | 0:2e353d06d153 | 282 | lcd.printf("2 Para Ingresar al ECG");wait(3); |
LeonardoLG | 0:2e353d06d153 | 283 | lcd.cls();wait(3); |
LeonardoLG | 0:2e353d06d153 | 284 | teclado(); |
LeonardoLG | 0:2e353d06d153 | 285 | |
LeonardoLG | 0:2e353d06d153 | 286 | while(1) |
LeonardoLG | 0:2e353d06d153 | 287 | { //Lazo principal si se presiona la tecla '2' Entra al programa para medir el ritmo cardiaco |
LeonardoLG | 0:2e353d06d153 | 288 | if(key=='2') |
LeonardoLG | 0:2e353d06d153 | 289 | { |
LeonardoLG | 0:2e353d06d153 | 290 | WelcomToECG(); |
LeonardoLG | 0:2e353d06d153 | 291 | teclado(); |
LeonardoLG | 0:2e353d06d153 | 292 | if(key=='A') lcd.printf("Detectando Senal cardiaca");wait(3); |
LeonardoLG | 0:2e353d06d153 | 293 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 294 | |
LeonardoLG | 0:2e353d06d153 | 295 | for(int i=0;relog.read()<=60;i++)//Incializacion del timer para que empiece en 0 seg y termine en 60seg/1minuto |
LeonardoLG | 0:2e353d06d153 | 296 | { |
LeonardoLG | 0:2e353d06d153 | 297 | if(i==0)//nos aseguramos que este en 0seg |
LeonardoLG | 0:2e353d06d153 | 298 | relog.start(); //empieza a contar |
LeonardoLG | 0:2e353d06d153 | 299 | if(Digital==1||Digital1==1)//Condicion de entradas digitales "las entradas estan sicronizadas y son complementarias, es decir si una es 1 la otra es 0" |
LeonardoLG | 0:2e353d06d153 | 300 | j++;//Cuenta los pulsos e incrementa en un minuto, segun los pulso que hayan recibido las entradas digitales |
LeonardoLG | 0:2e353d06d153 | 301 | } |
LeonardoLG | 0:2e353d06d153 | 302 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 303 | lcd.locate(0,0); |
LeonardoLG | 0:2e353d06d153 | 304 | lcd.printf("tiempo:%f",relog.read());wait(4);//muestra el tiempo que tardo en ejecutarse en segundos |
LeonardoLG | 0:2e353d06d153 | 305 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 306 | lcd.locate(0,0); |
LeonardoLG | 0:2e353d06d153 | 307 | lcd.printf("Ritmo Cardiaco:%d",j);//Muestra cuantos 1 logicos detecto en un minuto, equivalente a los ritmos cardiacos |
LeonardoLG | 0:2e353d06d153 | 308 | lcd.locate(0,1); |
LeonardoLG | 0:2e353d06d153 | 309 | lcd.printf("Latidos/minuto"); |
LeonardoLG | 0:2e353d06d153 | 310 | } |
LeonardoLG | 0:2e353d06d153 | 311 | |
LeonardoLG | 0:2e353d06d153 | 312 | |
LeonardoLG | 0:2e353d06d153 | 313 | |
LeonardoLG | 0:2e353d06d153 | 314 | |
LeonardoLG | 0:2e353d06d153 | 315 | else if(key=='0')//Si la variable key='0' sale del programa |
LeonardoLG | 0:2e353d06d153 | 316 | { |
LeonardoLG | 0:2e353d06d153 | 317 | lcd.locate(0,1); |
LeonardoLG | 0:2e353d06d153 | 318 | lcd.printf("Hasta Luego"); |
LeonardoLG | 0:2e353d06d153 | 319 | lcd.locate(0,2); |
LeonardoLG | 0:2e353d06d153 | 320 | lcd.printf("Un gusto servirle :)"); |
LeonardoLG | 0:2e353d06d153 | 321 | wait(3); |
LeonardoLG | 0:2e353d06d153 | 322 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 323 | |
LeonardoLG | 0:2e353d06d153 | 324 | exit(-1); |
LeonardoLG | 0:2e353d06d153 | 325 | } |
LeonardoLG | 0:2e353d06d153 | 326 | else if(key=='1') |
LeonardoLG | 0:2e353d06d153 | 327 | { //Si la variable key='1' redirecciona el programa a la parte de codigo denominada "Inicio" |
LeonardoLG | 0:2e353d06d153 | 328 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 329 | lcd.cls(); |
LeonardoLG | 0:2e353d06d153 | 330 | goto Inicio; |
LeonardoLG | 0:2e353d06d153 | 331 | } |
LeonardoLG | 0:2e353d06d153 | 332 | |
LeonardoLG | 0:2e353d06d153 | 333 | key=NULL; //Se borra el contenido de la variable key para no ocacionar problemas posteriores |
LeonardoLG | 0:2e353d06d153 | 334 | } |
LeonardoLG | 0:2e353d06d153 | 335 | //Fin del programa |
LeonardoLG | 0:2e353d06d153 | 336 | } |
LeonardoLG | 0:2e353d06d153 | 337 | /* END main */ |
LeonardoLG | 0:2e353d06d153 | 338 | /* |
LeonardoLG | 0:2e353d06d153 | 339 | ____________________________ |
LeonardoLG | 0:2e353d06d153 | 340 | | |
LeonardoLG | 0:2e353d06d153 | 341 | | Funciones Prototipo |
LeonardoLG | 0:2e353d06d153 | 342 | |___________________________ |
LeonardoLG | 0:2e353d06d153 | 343 | */ |
LeonardoLG | 0:2e353d06d153 | 344 | |
LeonardoLG | 0:2e353d06d153 | 345 | |
LeonardoLG | 0:2e353d06d153 | 346 | uint16_t Letra(uint8_t L); |
LeonardoLG | 0:2e353d06d153 | 347 | void barrido(void); |
LeonardoLG | 0:2e353d06d153 | 348 | void teclado(void); |
LeonardoLG | 0:2e353d06d153 | 349 | void WelcomToECG(void); |
LeonardoLG | 0:2e353d06d153 | 350 | |
LeonardoLG | 0:2e353d06d153 | 351 | |
LeonardoLG | 0:2e353d06d153 | 352 | |
LeonardoLG | 0:2e353d06d153 | 353 | |
LeonardoLG | 0:2e353d06d153 | 354 | |
LeonardoLG | 0:2e353d06d153 | 355 |