ECG Study Group / Mbed 2 deprecated Programacao_marco

Dependencies:   mbed

Committer:
Jamess
Date:
Thu Apr 30 16:38:37 2015 +0000
Revision:
6:27a323008a53
Parent:
5:b58e5d191b17
Child:
7:76f16051b775
Falta ver se a rota??o t? certa!;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jamess 0:d3db149c4040 1 // Goal: Program that receives and send 4 channels of data.
Jamess 0:d3db149c4040 2 // Receives: 1kHz
Jamess 0:d3db149c4040 3 // Sends: 70kbits/s
Jamess 4:f7d06462819b 4
Jamess 4:f7d06462819b 5 //DONE:
Jamess 4:f7d06462819b 6 // O programa lê e envia dados da taxa indicada por TIMER_RATE
Jamess 4:f7d06462819b 7 //TODO:
Jamess 4:f7d06462819b 8 // Fazer uma interrupção Serial de Envio?
Jamess 4:f7d06462819b 9 // Utilizar Putc? Apenas se tiver o programaque concatena bytes.
Jamess 4:f7d06462819b 10 // Olhar Módulo Bluetooth.(Ver qual o melhor modo de blueth (i2C,SPI,UART);)
Jamess 0:d3db149c4040 11
Jamess 0:d3db149c4040 12 #include "mbed.h"
Jamess 0:d3db149c4040 13
Jamess 3:7d014ee1c543 14 /*--------------Signal Definition-----------------*/
Jamess 5:b58e5d191b17 15 //16bits buffer
Jamess 0:d3db149c4040 16 #define ECG1 0
Jamess 0:d3db149c4040 17 #define ECG2 1
Jamess 0:d3db149c4040 18 #define RESP 2
Jamess 0:d3db149c4040 19 #define PPG 3
Jamess 0:d3db149c4040 20
Jamess 5:b58e5d191b17 21 //8bits buffer
Jamess 5:b58e5d191b17 22 #define LSB_ECG1 0
Jamess 5:b58e5d191b17 23 #define MSB_ECG1 1
Jamess 5:b58e5d191b17 24 #define LSB_ECG2 2
Jamess 5:b58e5d191b17 25 #define MSB_ECG2 3
Jamess 5:b58e5d191b17 26 #define LSB_RESP 4
Jamess 5:b58e5d191b17 27 #define MSB_RESP 5
Jamess 5:b58e5d191b17 28 #define LSB_PPG 6
Jamess 5:b58e5d191b17 29 #define MSB_PPG 7
Jamess 5:b58e5d191b17 30
Jamess 5:b58e5d191b17 31
Jamess 4:f7d06462819b 32 /*---------------- Sample Speed Timer --------------*/
Jamess 3:7d014ee1c543 33 #define TIMER_RATE 1
Jamess 3:7d014ee1c543 34
Jamess 0:d3db149c4040 35 /*-----READS THE ANALOG SIGNAL FROM THE SENSORS-----*/
Jamess 0:d3db149c4040 36
Jamess 0:d3db149c4040 37 AnalogIn Ecg1(A0);
Jamess 0:d3db149c4040 38 AnalogIn Ecg2(A1);
Jamess 0:d3db149c4040 39 AnalogIn Resp(A3);
Jamess 0:d3db149c4040 40 AnalogIn Ppg(A4);
Jamess 0:d3db149c4040 41
Jamess 5:b58e5d191b17 42 DigitalOut testSpeed(PTE1);
Jamess 5:b58e5d191b17 43
Jamess 2:769c937f9228 44
Jamess 0:d3db149c4040 45 /*------CONTROLS THE DATA RATE OF THE READING------*/
Jamess 0:d3db149c4040 46 Ticker t0;
Jamess 0:d3db149c4040 47 Serial pc(USBTX,USBRX);
Jamess 0:d3db149c4040 48
Jamess 1:94681b7c2565 49
Jamess 4:f7d06462819b 50 /*---HANDLES THE TIMER AND SERIAL INTERRUPTIONS-----*/
Jamess 0:d3db149c4040 51
Jamess 0:d3db149c4040 52 void t0_handler(void);
Jamess 0:d3db149c4040 53 void rx_Handler(void);
Jamess 3:7d014ee1c543 54
Jamess 1:94681b7c2565 55 char test = 0; // Tests the data received from the computer in order to start the reading
Jamess 5:b58e5d191b17 56
Jamess 0:d3db149c4040 57
Jamess 0:d3db149c4040 58 /*------------BUFFER TO STORE DATA------------------*/
Jamess 0:d3db149c4040 59
Jamess 6:27a323008a53 60 uint16_t buffer_16[4] = {0,0,0,0};
Jamess 6:27a323008a53 61 uint8_t buffer_8[8] = {0,0,0,0,0,0,0,0};
Jamess 0:d3db149c4040 62
Jamess 0:d3db149c4040 63
Jamess 0:d3db149c4040 64 int main() {
Jamess 3:7d014ee1c543 65 pc.printf("main");
Jamess 0:d3db149c4040 66 pc.attach(&rx_Handler, pc.RxIrq);
Jamess 1:94681b7c2565 67
Jamess 5:b58e5d191b17 68
Jamess 5:b58e5d191b17 69 while(1){}
Jamess 5:b58e5d191b17 70
Jamess 5:b58e5d191b17 71 //aciona porta
Jamess 3:7d014ee1c543 72
Jamess 5:b58e5d191b17 73 //pc.printf("%i,%i,%i,%i\n",buffer[ECG1],buffer[ECG2],buffer[RESP],buffer[PPG]);//PUTC
Jamess 5:b58e5d191b17 74
Jamess 5:b58e5d191b17 75
Jamess 5:b58e5d191b17 76 }
Jamess 0:d3db149c4040 77
Jamess 0:d3db149c4040 78 /*----------------------FUNCTIONS-----------------------*/
Jamess 0:d3db149c4040 79
Jamess 0:d3db149c4040 80 //Reads and send data to the computer
Jamess 0:d3db149c4040 81
Jamess 0:d3db149c4040 82 void t0_handler(void){
Jamess 5:b58e5d191b17 83
Jamess 5:b58e5d191b17 84 //Reads the Analog Ports
Jamess 5:b58e5d191b17 85 buffer_16[ECG1] = Ecg1.read_u16();
Jamess 5:b58e5d191b17 86 buffer_16[ECG2] = Ecg2.read_u16();
Jamess 5:b58e5d191b17 87 buffer_16[RESP] = Resp.read_u16();
Jamess 5:b58e5d191b17 88 buffer_16[PPG] = Ppg.read_u16();
Jamess 5:b58e5d191b17 89
Jamess 5:b58e5d191b17 90 //Divides de buffer 16 into multiple buffers;
Jamess 6:27a323008a53 91 //Falta rotacionar:
Jamess 6:27a323008a53 92 //Ver Ser a rotação está correta
Jamess 5:b58e5d191b17 93
Jamess 5:b58e5d191b17 94 buffer_8[LSB_ECG1] = (buffer_16[ECG1]&&0x0F);
Jamess 6:27a323008a53 95 buffer_8[MSB_ECG1] = ((buffer_16[ECG1]&&0xF)>>8);
Jamess 5:b58e5d191b17 96
Jamess 5:b58e5d191b17 97 buffer_8[LSB_ECG2] = (buffer_16[ECG2]&&0x0F);
Jamess 6:27a323008a53 98 buffer_8[LSB_ECG2] = ((buffer_16[ECG2]&&0xF)>>8);
Jamess 5:b58e5d191b17 99
Jamess 5:b58e5d191b17 100 buffer_8[LSB_RESP] = (buffer_16[RESP]&&0x0F);
Jamess 6:27a323008a53 101 buffer_8[MSB_RESP] = ((buffer_16[RESP]&&0xF)>>8);
Jamess 5:b58e5d191b17 102
Jamess 5:b58e5d191b17 103 buffer_8[LSB_PPG] = (buffer_16[PPG]&&0x0F);
Jamess 6:27a323008a53 104 buffer_8[MSB_PPG] = ((buffer_16[PPG]&&0xF)>>8);
Jamess 5:b58e5d191b17 105
Jamess 5:b58e5d191b17 106 //Sends to the computer
Jamess 6:27a323008a53 107 pc.printf("%i,%i,%i,%i\n",buffer_16[ECG1],buffer_16[ECG2],buffer_16[RESP],buffer_16[PPG]);//PUTC
Jamess 6:27a323008a53 108
Jamess 5:b58e5d191b17 109 for (int j = 0;j<8;j++){
Jamess 5:b58e5d191b17 110 pc.putc(buffer_8[j]);
Jamess 5:b58e5d191b17 111 }
Jamess 5:b58e5d191b17 112
Jamess 5:b58e5d191b17 113
Jamess 0:d3db149c4040 114 }
Jamess 0:d3db149c4040 115
Jamess 4:f7d06462819b 116 //This function must
Jamess 4:f7d06462819b 117
Jamess 0:d3db149c4040 118 void rx_Handler(void){
Jamess 3:7d014ee1c543 119 // A programação não estava funcionando poisnão se deve utilizar interrupções para realizar grandes tarefas;
Jamess 3:7d014ee1c543 120 // Elas travam e não funciona mais nada.
Jamess 3:7d014ee1c543 121 // Como fazer para não ficar testando no main?? Sexta feira no globo reporter
Jamess 3:7d014ee1c543 122
Jamess 3:7d014ee1c543 123 test = pc.getc(); // it gets the received character
Jamess 5:b58e5d191b17 124 pc.putc(test);//debug
Jamess 5:b58e5d191b17 125
Jamess 5:b58e5d191b17 126 //--Tests the Receive Character----
Jamess 5:b58e5d191b17 127
Jamess 5:b58e5d191b17 128 if(test == '2'|| test == '2')
Jamess 5:b58e5d191b17 129 {
Jamess 5:b58e5d191b17 130 t0.attach(&t0_handler,TIMER_RATE);
Jamess 5:b58e5d191b17 131
Jamess 5:b58e5d191b17 132 }else if (test=='3'|| test == '3')
Jamess 5:b58e5d191b17 133 {
Jamess 5:b58e5d191b17 134 t0.detach();
Jamess 5:b58e5d191b17 135 }
Jamess 5:b58e5d191b17 136
Jamess 3:7d014ee1c543 137
Jamess 1:94681b7c2565 138 }
Jamess 4:f7d06462819b 139 /*Commit
Jamess 4:f7d06462819b 140
Jamess 4:f7d06462819b 141 A programação do jeito que está não é a mais rápida possível, é a mais fácil de ser manuseada já que utiliza a função printf e envia
Jamess 4:f7d06462819b 142 Strings inteiras com os dados lidos das entradas analógicas. A vantagem é que o usuário não necessita concatenar dois bytes como teria defazê-lo caso utilizasse
Jamess 4:f7d06462819b 143 a função putchar.
Jamess 4:f7d06462819b 144
Jamess 4:f7d06462819b 145 Caso queria otimizar a velocidade de envio, deve-se utilizar a função putchar e concatenar os dados!!
Jamess 4:f7d06462819b 146
Jamess 4:f7d06462819b 147 Quanto ao consumo, ainda deve ser verificado as funções que reduziriam.
Jamess 4:f7d06462819b 148
Jamess 4:f7d06462819b 149 Neste código, algumas variáveis ficam constantemente sendo testadas no Main, isso pode reduzir a eficiencia energética do projeto
Jamess 4:f7d06462819b 150
Jamess 4:f7d06462819b 151 */