ECG Study Group / Mbed 2 deprecated Programacao_marco

Dependencies:   mbed

Committer:
Jamess
Date:
Thu Apr 30 20:21:07 2015 +0000
Revision:
7:76f16051b775
Parent:
6:27a323008a53
Child:
8:dd65c0eb9927
Funciona!

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 7:76f16051b775 33 #define TIMER_RATE 5
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 7:76f16051b775 61 char 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 7:76f16051b775 94 buffer_8[LSB_ECG1] = (char)(buffer_16[ECG1]);
Jamess 7:76f16051b775 95 buffer_8[MSB_ECG1] = (char)((buffer_16[ECG1]&0xFF)>>8);
Jamess 5:b58e5d191b17 96
Jamess 7:76f16051b775 97 buffer_8[LSB_ECG2] = (char)(buffer_16[ECG2]);
Jamess 7:76f16051b775 98 buffer_8[LSB_ECG2] = (char)((buffer_16[ECG2]&0xFF)>>8);
Jamess 5:b58e5d191b17 99
Jamess 7:76f16051b775 100 buffer_8[LSB_RESP] = (char)(buffer_16[RESP]);
Jamess 7:76f16051b775 101 buffer_8[MSB_RESP] = (char)((buffer_16[RESP]&0xFF)>>8);
Jamess 5:b58e5d191b17 102
Jamess 7:76f16051b775 103 buffer_8[LSB_PPG] = (char)(buffer_16[PPG]);
Jamess 7:76f16051b775 104 buffer_8[MSB_PPG] = (char)((buffer_16[PPG]&0xFF)>>8);
Jamess 5:b58e5d191b17 105
Jamess 5:b58e5d191b17 106 //Sends to the computer
Jamess 6:27a323008a53 107
Jamess 5:b58e5d191b17 108 for (int j = 0;j<8;j++){
Jamess 7:76f16051b775 109 pc.putc(buffer_8[j]); //texto se foi bem sucedida?
Jamess 5:b58e5d191b17 110 }
Jamess 5:b58e5d191b17 111
Jamess 5:b58e5d191b17 112
Jamess 0:d3db149c4040 113 }
Jamess 0:d3db149c4040 114
Jamess 4:f7d06462819b 115 //This function must
Jamess 4:f7d06462819b 116
Jamess 0:d3db149c4040 117 void rx_Handler(void){
Jamess 3:7d014ee1c543 118 // A programação não estava funcionando poisnão se deve utilizar interrupções para realizar grandes tarefas;
Jamess 3:7d014ee1c543 119 // Elas travam e não funciona mais nada.
Jamess 3:7d014ee1c543 120 // Como fazer para não ficar testando no main?? Sexta feira no globo reporter
Jamess 3:7d014ee1c543 121
Jamess 3:7d014ee1c543 122 test = pc.getc(); // it gets the received character
Jamess 5:b58e5d191b17 123 pc.putc(test);//debug
Jamess 5:b58e5d191b17 124
Jamess 5:b58e5d191b17 125 //--Tests the Receive Character----
Jamess 5:b58e5d191b17 126
Jamess 5:b58e5d191b17 127 if(test == '2'|| test == '2')
Jamess 5:b58e5d191b17 128 {
Jamess 5:b58e5d191b17 129 t0.attach(&t0_handler,TIMER_RATE);
Jamess 5:b58e5d191b17 130
Jamess 5:b58e5d191b17 131 }else if (test=='3'|| test == '3')
Jamess 5:b58e5d191b17 132 {
Jamess 5:b58e5d191b17 133 t0.detach();
Jamess 5:b58e5d191b17 134 }
Jamess 5:b58e5d191b17 135
Jamess 3:7d014ee1c543 136
Jamess 1:94681b7c2565 137 }
Jamess 4:f7d06462819b 138 /*Commit
Jamess 4:f7d06462819b 139
Jamess 4:f7d06462819b 140 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 141 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 142 a função putchar.
Jamess 4:f7d06462819b 143
Jamess 4:f7d06462819b 144 Caso queria otimizar a velocidade de envio, deve-se utilizar a função putchar e concatenar os dados!!
Jamess 4:f7d06462819b 145
Jamess 4:f7d06462819b 146 Quanto ao consumo, ainda deve ser verificado as funções que reduziriam.
Jamess 4:f7d06462819b 147
Jamess 4:f7d06462819b 148 Neste código, algumas variáveis ficam constantemente sendo testadas no Main, isso pode reduzir a eficiencia energética do projeto
Jamess 4:f7d06462819b 149
Jamess 4:f7d06462819b 150 */