Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp
- Committer:
- Jamess
- Date:
- 2015-04-30
- Revision:
- 5:b58e5d191b17
- Parent:
- 4:f7d06462819b
- Child:
- 6:27a323008a53
File content as of revision 5:b58e5d191b17:
// Goal: Program that receives and send 4 channels of data.
// Receives: 1kHz
// Sends: 70kbits/s
//DONE:
// O programa lê e envia dados da taxa indicada por TIMER_RATE
//TODO:
// Fazer uma interrupção Serial de Envio?
// Utilizar Putc? Apenas se tiver o programaque concatena bytes.
// Olhar Módulo Bluetooth.(Ver qual o melhor modo de blueth (i2C,SPI,UART);)
#include "mbed.h"
/*--------------Signal Definition-----------------*/
//16bits buffer
#define ECG1 0
#define ECG2 1
#define RESP 2
#define PPG 3
//8bits buffer
#define LSB_ECG1 0
#define MSB_ECG1 1
#define LSB_ECG2 2
#define MSB_ECG2 3
#define LSB_RESP 4
#define MSB_RESP 5
#define LSB_PPG 6
#define MSB_PPG 7
/*---------------- Sample Speed Timer --------------*/
#define TIMER_RATE 1
/*-----READS THE ANALOG SIGNAL FROM THE SENSORS-----*/
AnalogIn Ecg1(A0);
AnalogIn Ecg2(A1);
AnalogIn Resp(A3);
AnalogIn Ppg(A4);
DigitalOut testSpeed(PTE1);
/*------CONTROLS THE DATA RATE OF THE READING------*/
Ticker t0;
Serial pc(USBTX,USBRX);
/*---HANDLES THE TIMER AND SERIAL INTERRUPTIONS-----*/
void t0_handler(void);
void rx_Handler(void);
char test = 0; // Tests the data received from the computer in order to start the reading
/*------------BUFFER TO STORE DATA------------------*/
int buffer_16[4] = {0,0,0,0};
char buffer_8[8] = {0,0,0,0,0,0,0,0};
int main() {
pc.printf("main");
pc.attach(&rx_Handler, pc.RxIrq);
while(1){}
//aciona porta
//pc.printf("%i,%i,%i,%i\n",buffer[ECG1],buffer[ECG2],buffer[RESP],buffer[PPG]);//PUTC
}
/*----------------------FUNCTIONS-----------------------*/
//Reads and send data to the computer
void t0_handler(void){
//Reads the Analog Ports
buffer_16[ECG1] = Ecg1.read_u16();
buffer_16[ECG2] = Ecg2.read_u16();
buffer_16[RESP] = Resp.read_u16();
buffer_16[PPG] = Ppg.read_u16();
//Divides de buffer 16 into multiple buffers;
buffer_8[LSB_ECG1] = (buffer_16[ECG1]&&0x0F);
buffer_8[MSB_ECG1] = (buffer_16[ECG1]&&0xF);
buffer_8[LSB_ECG2] = (buffer_16[ECG2]&&0x0F);
buffer_8[LSB_ECG2] = (buffer_16[ECG2]&&0xF);
buffer_8[LSB_RESP] = (buffer_16[RESP]&&0x0F);
buffer_8[MSB_RESP] = (buffer_16[RESP]&&0xF);
buffer_8[LSB_PPG] = (buffer_16[PPG]&&0x0F);
buffer_8[MSB_PPG] = (buffer_16[PPG]&&0xF);
//Sends to the computer
for (int j = 0;j<8;j++){
pc.putc(buffer_8[j]);
}
}
//This function must
void rx_Handler(void){
// A programação não estava funcionando poisnão se deve utilizar interrupções para realizar grandes tarefas;
// Elas travam e não funciona mais nada.
// Como fazer para não ficar testando no main?? Sexta feira no globo reporter
test = pc.getc(); // it gets the received character
pc.putc(test);//debug
//--Tests the Receive Character----
if(test == '2'|| test == '2')
{
t0.attach(&t0_handler,TIMER_RATE);
}else if (test=='3'|| test == '3')
{
t0.detach();
}
}
/*Commit
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
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
a função putchar.
Caso queria otimizar a velocidade de envio, deve-se utilizar a função putchar e concatenar os dados!!
Quanto ao consumo, ainda deve ser verificado as funções que reduziriam.
Neste código, algumas variáveis ficam constantemente sendo testadas no Main, isso pode reduzir a eficiencia energética do projeto
*/