Apenas UM acelerômetro em I2C, UM sensor de fluxo. Utiliza a biblioteca serial para enviar para o computador.

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Jamess
Date:
Mon Jul 13 17:40:42 2015 +0000
Commit message:
Leitura do sensor de fluxo analogico e dos aceler?metros utilizando I2C

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r aa70f7963d9f main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Jul 13 17:40:42 2015 +0000
@@ -0,0 +1,184 @@
+// Juntando a programação do sensor de fluxo com o acelerômetro
+// por Thiago
+
+// Criado dia 02/03/2015
+//
+
+#include "mbed.h"
+
+/*-------ADXL345-------*/
+
+// When SDO grounded
+#define ADXL1_ADDR_WRITE 0xA6
+#define ADXL1_ADDR_READ 0xA7
+#define ADXL1_ADDR 0X53
+
+//When SDO high
+#define ADXL2_ADDR_WRITE 0x3A
+#define ADXL2_ADDR_READ 0x3B
+#define ADXL2_ADDR 0x53
+
+//Registers
+
+#define POWER_CTL 0x2D
+#define DATA_FORMAT 0x31
+#define DATAX0 0x32
+#define DATAX1 0x33
+#define DATAY0 0x34
+#define DATAY1 0x35
+#define DATAZ0 0x36
+#define DATAZ1 0x37
+#define OFSX 0x1D
+#define OFSY 0x1F
+#define OFSZ 0x20
+#define BW_RATE 0x2C
+
+/*----Transmicao----*/
+
+I2C i2c(PTC2,PTC1);    
+Serial pc(USBTX,USBRX);
+
+/*-----Funcoes------*/
+
+// Acelerômetro:
+int RegisterWrite(char,char,char);
+int RegisterRead(char,char);
+inline void MultByteRead(char,char,char*,int);
+void GetOutput(char,int*);
+
+// Sensor de Fluxo:
+AnalogIn ain(PTB3);
+DigitalOut led2(LED2);  // Led red
+void HandlerT1(void);
+void rx_Handler(void);
+
+Ticker t1;              // Timer to send data
+
+volatile bool STATUS = true;
+char test = 0;
+
+int main()
+{
+
+/*-----------------INICIALIZA SENSOR DE FLUXO-----------*/
+    pc.baud(9600);
+    pc.attach(&rx_Handler, pc.RxIrq);
+    led2=0;
+
+
+/*------------------INICIALIZA ACELEROMETRO-------------*/
+int readings[3] = {0,0,0};
+    printf("Entrou no main");   //Debug.
+    
+    i2c.frequency(100000);  //100kHz
+
+// Testa Envio:
+    pc.printf("Sending POWER CONTROL\t");
+    STATUS = RegisterWrite(ADXL1_ADDR,POWER_CTL,0x00);
+
+     if (STATUS != 0){
+      pc.printf("WRITE NO SUCCESS\t");
+     }
+    else{
+      pc.printf("ACKNOLEDGE RECEIVED");
+     }
+
+    wait(0.1);
+      pc.printf("Sending Data Format\t");
+
+    RegisterWrite(ADXL1_ADDR,DATA_FORMAT,0x09); // 
+
+    RegisterWrite(ADXL1_ADDR,BW_RATE,0x0A);     // Default Value... 100kHZ
+
+    RegisterWrite(ADXL1_ADDR,POWER_CTL,0x08);   // MeasurementMode
+    
+
+/*-------------Setting the Offset Value---------------*/
+
+    RegisterWrite(ADXL1_ADDR,OFSX,0xFD);
+    RegisterWrite(ADXL1_ADDR,OFSY,0x03);
+    RegisterWrite(ADXL1_ADDR,OFSZ,0xFE);
+
+/*----------------------------------------------------*/
+
+    wait(0.1);
+    printf("Now, trying to read data\t");
+    printf("%i", RegisterRead(ADXL1_ADDR,0x00));
+    
+    if (STATUS == 0){
+      printf("READ SUCCESSFULL\t");
+    }
+    else {
+      printf("READ NOT SUCCESSFUL\n");
+    }    
+        
+    pc.printf("Press 2 to Start");
+
+    while(1) {
+
+        wait(0.5);                                  // Debug
+        led2 = 0;
+        pc.putc(test);                             // Debug
+
+        if (test == '2') {
+            t1.attach(&HandlerT1, 0.01);
+        }
+
+        while(test == '2') {
+
+            if (STATUS == true) {
+
+                STATUS = false;
+                led2 = 1;
+                pc.printf("0x%04X",ain.read_u16());
+            GetOutput(ADXL1_ADDR,readings);
+            pc.printf("%i,%i,%i\n",(int16_t)readings[0],(int16_t)readings[1],(int16_t)readings[2]);
+         }
+
+
+        } //end of while(test=='2'){}
+
+        t1.detach();    // Detaches timer interruption when not needed
+    }//end of while(1)
+}//end of main
+
+void HandlerT1(void)
+{
+    STATUS = true;
+}
+
+void rx_Handler(void)
+{
+    test = pc.getc();
+    pc.putc(test);
+}
+
+int RegisterWrite(char SLAVE, char RegAddress, char Data){
+    char cmd[2];
+    cmd[0]= RegAddress;
+    cmd[1]= Data;
+    int ack = i2c.write((SLAVE<<1),cmd,2);
+    return ack;
+    }
+    
+int RegisterRead(char SLAVE, char address){
+    char output;
+    char tx = address; 
+    i2c.write((SLAVE<<1),&tx,1);
+    STATUS = i2c.read((SLAVE<<1), &output,1);
+    return output;
+    } 
+    
+inline void MultRegisterRead(char SLAVE, char address,char*output,int size){
+    i2c.write((SLAVE<<1),&address,1);
+    i2c.read((SLAVE<<1),output,size);
+    return;    
+    }
+
+void GetOutput(char SLAVE, int* readings){
+    char buffer[6];
+    MultRegisterRead(SLAVE,DATAX0,buffer, 6);
+    readings[0] = (int)buffer[1] << 8 | (int)buffer[0];
+    readings[1] = (int)buffer[3] << 8 | (int)buffer[2];
+    readings[2] = (int)buffer[5] << 8 | (int)buffer[4];        
+    }
\ No newline at end of file
diff -r 000000000000 -r aa70f7963d9f mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Jul 13 17:40:42 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/9ad691361fac
\ No newline at end of file