ECG Study Group / Mbed 2 deprecated Quatro_accelerometros

Dependencies:   mbed

Committer:
Jamess
Date:
Wed Apr 22 14:35:49 2015 +0000
Revision:
0:3a4518df1d2b
fazeraltera??es que professor falou!!!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jamess 0:3a4518df1d2b 1 // Juntando a programação do sensor de fluxo com o acelerômetro
Jamess 0:3a4518df1d2b 2 // E mais QUATRO ACELERÔMETROS
Jamess 0:3a4518df1d2b 3
Jamess 0:3a4518df1d2b 4 // Since there`s only two possible adresses to the accelerômeter, we will have to use two I2C buses.
Jamess 0:3a4518df1d2b 5
Jamess 0:3a4518df1d2b 6 // por Thiago
Jamess 0:3a4518df1d2b 7
Jamess 0:3a4518df1d2b 8 // Criado dia 02/03/2015
Jamess 0:3a4518df1d2b 9 //
Jamess 0:3a4518df1d2b 10
Jamess 0:3a4518df1d2b 11 #include "mbed.h"
Jamess 0:3a4518df1d2b 12
Jamess 0:3a4518df1d2b 13 /*-------ADXL345-------*/
Jamess 0:3a4518df1d2b 14
Jamess 0:3a4518df1d2b 15 // When SDO grounded
Jamess 0:3a4518df1d2b 16 #define ADXL1_ADDR_WRITE 0xA6
Jamess 0:3a4518df1d2b 17 #define ADXL1_ADDR_READ 0xA7
Jamess 0:3a4518df1d2b 18 #define ADXL1_ADDR 0X53
Jamess 0:3a4518df1d2b 19
Jamess 0:3a4518df1d2b 20 //When SDO high
Jamess 0:3a4518df1d2b 21 #define ADXL2_ADDR_WRITE 0x3A
Jamess 0:3a4518df1d2b 22 #define ADXL2_ADDR_READ 0x3B
Jamess 0:3a4518df1d2b 23 #define ADXL2_ADDR 0x53
Jamess 0:3a4518df1d2b 24
Jamess 0:3a4518df1d2b 25 //Registers
Jamess 0:3a4518df1d2b 26
Jamess 0:3a4518df1d2b 27 #define POWER_CTL 0x2D
Jamess 0:3a4518df1d2b 28 #define DATA_FORMAT 0x31
Jamess 0:3a4518df1d2b 29 #define DATAX0 0x32 //X
Jamess 0:3a4518df1d2b 30 #define DATAX1 0x33
Jamess 0:3a4518df1d2b 31 #define DATAY0 0x34 //Y
Jamess 0:3a4518df1d2b 32 #define DATAY1 0x35
Jamess 0:3a4518df1d2b 33 #define DATAZ0 0x36 //Z
Jamess 0:3a4518df1d2b 34 #define DATAZ1 0x37
Jamess 0:3a4518df1d2b 35 #define OFSX 0x1D //Accelerometer offset calibration
Jamess 0:3a4518df1d2b 36 #define OFSY 0x1F
Jamess 0:3a4518df1d2b 37 #define OFSZ 0x20
Jamess 0:3a4518df1d2b 38 #define BW_RATE 0x2C //Define Baudrate
Jamess 0:3a4518df1d2b 39
Jamess 0:3a4518df1d2b 40 /*----Transmicao----*/
Jamess 0:3a4518df1d2b 41
Jamess 0:3a4518df1d2b 42 I2C i2c(PTC2,PTC1); //
Jamess 0:3a4518df1d2b 43 Serial pc(USBTX,USBRX); //
Jamess 0:3a4518df1d2b 44
Jamess 0:3a4518df1d2b 45 /*-----Funcoes------*/
Jamess 0:3a4518df1d2b 46
Jamess 0:3a4518df1d2b 47 // Acelerômetro:
Jamess 0:3a4518df1d2b 48 int RegisterWrite(char,char,char,char);
Jamess 0:3a4518df1d2b 49 int RegisterRead(char,char,char);
Jamess 0:3a4518df1d2b 50 inline void MultRegisterRead(char,char,char,char*,int);
Jamess 0:3a4518df1d2b 51 void GetOutput(char,char,int*);
Jamess 0:3a4518df1d2b 52 int readings[3] = {0,0,0};
Jamess 0:3a4518df1d2b 53
Jamess 0:3a4518df1d2b 54 // Sensor de Fluxo:
Jamess 0:3a4518df1d2b 55 AnalogIn ain(PTB3);
Jamess 0:3a4518df1d2b 56 DigitalOut led2(LED2); // Led red
Jamess 0:3a4518df1d2b 57 void HandlerT1(void);
Jamess 0:3a4518df1d2b 58 void rx_Handler(void);
Jamess 0:3a4518df1d2b 59
Jamess 0:3a4518df1d2b 60 Ticker t1; // Timer to send data
Jamess 0:3a4518df1d2b 61
Jamess 0:3a4518df1d2b 62 volatile bool STATUS = true;
Jamess 0:3a4518df1d2b 63 char test = 0;
Jamess 0:3a4518df1d2b 64
Jamess 0:3a4518df1d2b 65 int main()
Jamess 0:3a4518df1d2b 66 {
Jamess 0:3a4518df1d2b 67
Jamess 0:3a4518df1d2b 68 /*-----------------INICIALIZA SENSOR DE FLUXO-----------*/
Jamess 0:3a4518df1d2b 69 pc.baud(9600);
Jamess 0:3a4518df1d2b 70 pc.attach(&rx_Handler, pc.RxIrq);
Jamess 0:3a4518df1d2b 71 led2=0;
Jamess 0:3a4518df1d2b 72
Jamess 0:3a4518df1d2b 73
Jamess 0:3a4518df1d2b 74 /*------------------INICIALIZA ACELEROMETRO 1-------------*/
Jamess 0:3a4518df1d2b 75
Jamess 0:3a4518df1d2b 76 printf("Entrou no main"); //Debug.
Jamess 0:3a4518df1d2b 77
Jamess 0:3a4518df1d2b 78 i2c.frequency(100000); //100kHz
Jamess 0:3a4518df1d2b 79
Jamess 0:3a4518df1d2b 80 // Testa Envio:
Jamess 0:3a4518df1d2b 81 pc.printf("Sending POWER CONTROL\t");
Jamess 0:3a4518df1d2b 82 STATUS = RegisterWrite(ADXL1_ADDR,POWER_CTL,0x00);
Jamess 0:3a4518df1d2b 83
Jamess 0:3a4518df1d2b 84 if (STATUS != 0){
Jamess 0:3a4518df1d2b 85 pc.printf("WRITE NO SUCCESS\t");
Jamess 0:3a4518df1d2b 86 }
Jamess 0:3a4518df1d2b 87 else{
Jamess 0:3a4518df1d2b 88 pc.printf("ACKNOLEDGE RECEIVED");
Jamess 0:3a4518df1d2b 89 }
Jamess 0:3a4518df1d2b 90
Jamess 0:3a4518df1d2b 91 wait(0.1);
Jamess 0:3a4518df1d2b 92 pc.printf("Sending Data Format\t");
Jamess 0:3a4518df1d2b 93
Jamess 0:3a4518df1d2b 94 RegisterWrite(ADXL1_ADDR,DATA_FORMAT,0x09); //
Jamess 0:3a4518df1d2b 95
Jamess 0:3a4518df1d2b 96 RegisterWrite(ADXL1_ADDR,BW_RATE,0x0A); // Default Value... 100kHZ
Jamess 0:3a4518df1d2b 97
Jamess 0:3a4518df1d2b 98 RegisterWrite(ADXL1_ADDR,POWER_CTL,0x08); // MeasurementMode
Jamess 0:3a4518df1d2b 99
Jamess 0:3a4518df1d2b 100
Jamess 0:3a4518df1d2b 101 /*-------------Setting the Offset Value 1 -------------*/
Jamess 0:3a4518df1d2b 102
Jamess 0:3a4518df1d2b 103 RegisterWrite(ADXL1_ADDR,OFSX,0xFD);
Jamess 0:3a4518df1d2b 104 RegisterWrite(ADXL1_ADDR,OFSY,0x03);
Jamess 0:3a4518df1d2b 105 RegisterWrite(ADXL1_ADDR,OFSZ,0xFE);
Jamess 0:3a4518df1d2b 106
Jamess 0:3a4518df1d2b 107 /*----------------------------------------------------*/
Jamess 0:3a4518df1d2b 108
Jamess 0:3a4518df1d2b 109 wait(0.1);
Jamess 0:3a4518df1d2b 110 printf("Now, trying to read data\t");
Jamess 0:3a4518df1d2b 111 printf("%i", RegisterRead(ADXL1_ADDR,0x00));
Jamess 0:3a4518df1d2b 112
Jamess 0:3a4518df1d2b 113 if (STATUS == 0){
Jamess 0:3a4518df1d2b 114 printf("READ SUCCESSFULL\t");
Jamess 0:3a4518df1d2b 115 }
Jamess 0:3a4518df1d2b 116 else {
Jamess 0:3a4518df1d2b 117 printf("READ NOT SUCCESSFUL\n");
Jamess 0:3a4518df1d2b 118 }
Jamess 0:3a4518df1d2b 119
Jamess 0:3a4518df1d2b 120 pc.printf("Press 2 to Start");
Jamess 0:3a4518df1d2b 121
Jamess 0:3a4518df1d2b 122 while(1) { }
Jamess 0:3a4518df1d2b 123
Jamess 0:3a4518df1d2b 124
Jamess 0:3a4518df1d2b 125
Jamess 0:3a4518df1d2b 126 }//end of main
Jamess 0:3a4518df1d2b 127
Jamess 0:3a4518df1d2b 128 void HandlerT1(void)
Jamess 0:3a4518df1d2b 129 {
Jamess 0:3a4518df1d2b 130 ///Colocar pino em alto e
Jamess 0:3a4518df1d2b 131 GetOutput(ADXL1_ADDR,readings);
Jamess 0:3a4518df1d2b 132 //ver o tempo que isso leva.
Jamess 0:3a4518df1d2b 133
Jamess 0:3a4518df1d2b 134 //int adread = ???
Jamess 0:3a4518df1d2b 135 //putc(adread & 0xFF);
Jamess 0:3a4518df1d2b 136 //putc((adread >> 8) & 0xFF);
Jamess 0:3a4518df1d2b 137 pc.printf("0x%04X",ain.read_u16());
Jamess 0:3a4518df1d2b 138
Jamess 0:3a4518df1d2b 139 pc.printf("%i,%i,%i\n",(int16_t)readings[0],(int16_t)readings[1],(int16_t)readings[2]);
Jamess 0:3a4518df1d2b 140 // Não mandar strings!!!
Jamess 0:3a4518df1d2b 141 // Depois em baixo para medir o tempo que elas levvam para serem executados
Jamess 0:3a4518df1d2b 142 }
Jamess 0:3a4518df1d2b 143
Jamess 0:3a4518df1d2b 144 void rx_Handler(void)
Jamess 0:3a4518df1d2b 145 {
Jamess 0:3a4518df1d2b 146 test = pc.getc();
Jamess 0:3a4518df1d2b 147 pc.putc(test); //debug
Jamess 0:3a4518df1d2b 148 if (test == '2') {
Jamess 0:3a4518df1d2b 149 t1.attach(&HandlerT1, 0.01);
Jamess 0:3a4518df1d2b 150 }
Jamess 0:3a4518df1d2b 151 else if(test == '3'){
Jamess 0:3a4518df1d2b 152 t1.detach(); // Detaches timer interruption when not needed
Jamess 0:3a4518df1d2b 153 }
Jamess 0:3a4518df1d2b 154 }
Jamess 0:3a4518df1d2b 155
Jamess 0:3a4518df1d2b 156 int RegisterWrite(char SLAVE, char RegAddress, char Data){
Jamess 0:3a4518df1d2b 157 char cmd[2];
Jamess 0:3a4518df1d2b 158 cmd[0]= RegAddress;
Jamess 0:3a4518df1d2b 159 cmd[1]= Data;
Jamess 0:3a4518df1d2b 160 int ack = i2c.write((SLAVE<<1),cmd,2);
Jamess 0:3a4518df1d2b 161 return ack;
Jamess 0:3a4518df1d2b 162 }
Jamess 0:3a4518df1d2b 163
Jamess 0:3a4518df1d2b 164 int RegisterRead(char SLAVE, char address){
Jamess 0:3a4518df1d2b 165 char output;
Jamess 0:3a4518df1d2b 166 char tx = address;
Jamess 0:3a4518df1d2b 167 i2c.write((SLAVE<<1),&tx,1);
Jamess 0:3a4518df1d2b 168 STATUS = i2c.read((SLAVE<<1), &output,1);
Jamess 0:3a4518df1d2b 169 return output;
Jamess 0:3a4518df1d2b 170 }
Jamess 0:3a4518df1d2b 171
Jamess 0:3a4518df1d2b 172 inline void MultRegisterRead(char SLAVE, char address,char*output,int size){
Jamess 0:3a4518df1d2b 173 i2c.write((SLAVE<<1),&address,1);
Jamess 0:3a4518df1d2b 174 i2c.read((SLAVE<<1),output,size);
Jamess 0:3a4518df1d2b 175 return;
Jamess 0:3a4518df1d2b 176 }
Jamess 0:3a4518df1d2b 177
Jamess 0:3a4518df1d2b 178 void GetOutput(char SLAVE, int* readings){
Jamess 0:3a4518df1d2b 179 char buffer[6];
Jamess 0:3a4518df1d2b 180 MultRegisterRead(SLAVE,DATAX0,buffer, 6);
Jamess 0:3a4518df1d2b 181 readings[0] = (int)buffer[1] << 8 | (int)buffer[0];
Jamess 0:3a4518df1d2b 182 readings[1] = (int)buffer[3] << 8 | (int)buffer[2];
Jamess 0:3a4518df1d2b 183 readings[2] = (int)buffer[5] << 8 | (int)buffer[4];
Jamess 0:3a4518df1d2b 184 }