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@0:3a4518df1d2b, 2015-04-22 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |