// Esse programa ainda não foi testado. // É uma adaptação para utilizar vários acelerômetros utilizando a classe // BUSOUT ligado no CS dos acelerômetros; //Baseado na biblioteca de aaronn berek
Fork of ADXLHELLOWORD by
main.cpp
- Committer:
- Jamess
- Date:
- 2015-04-24
- Revision:
- 1:b54671e37e54
- Parent:
- 0:e59a01f2ebcd
- Child:
- 2:6f5f2342d0a5
File content as of revision 1:b54671e37e54:
//Arquivo exemplo de se como utilizar a SPI em com a biblioteca do mbed feita por aaron. //Programa temporario. logo será republicado // TO do: //Verificar se é possível utilizar esta biblioteca para se comunicar com vários acelerômetros-> Provavelmente não; //Ver o tempo em que leva para realizar cada função. //Trocar o printf pelo putc //Sair da biblioteca... na verdade... Não permite muita coisa.. //DONE: //Instalação do acc na protoboard. #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 //X #define DATAX1 0x33 #define DATAY0 0x34 //Y #define DATAY1 0x35 #define DATAZ0 0x36 //Z #define DATAZ1 0x37 #define OFSX 0x1D //accelerometer offset calibration #define OFSY 0x1F #define OFSZ 0x20 #define BW_RATE 0x2C //define Baudrate /*----Transmicao----*/ SPI spi1(PTD2,PTD3,PTD1); //PTD0);//PinName mosi, PinName miso, PinName sck, PinName cs) Serial pc(USBTX, USBRX); DigitalOut PIN(PTA13); /********************---------FUNÇÕES ACELERÔMETRO**********************************/ //Escrita: inline void RegisterWrite(char acc,char address,char data); //Escreve o desejado no acelerômetro acc no endereço tal void MultRegisterWrite(char acc,char address,char data); //Faz isso //Leitura: void GetOutputs(void); //Faz aquilo void MultRegisterRead(void); // void RegisterRead(void); /******************************Variáveis Acelerômetro********************************/ bool Acc_CS[10] = {0}; /************************************************************************************/ int main() { int readings[3] = {0, 0, 0}; //Go into standby mode to configure the device. // pc.printf("Starting setting the accelerômeters"); //accelerometer.setPowerControl(0x00); //Full resolution, +/-16g, 4mg/LSB. //accelerometer.setDataFormatControl(0x0B); //3.2kHz data rate. //accelerometer.setDataRate(ADXL345_3200HZ); //Measurement mode. //accelerometer.setPowerControl(0x08); while (1) { wait(0.1); //accelerometer.getOutput(readings); PIN = 1; //13-bit, sign extended values. // pc.printf("%i, %i, %i\n", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]); PIN = 0; } } void RegisterRead(void){ int tx = (ADXL345_SPI_READ | (address & 0x3F)); int rx = 0; PIN = 0; //Send address to read from. spi_.write(tx); //Read back contents of address. rx = spi_.write(0x00); PIN = 1; return rx; } void RegisterWrite(int address, char data) { int tx = (ADXL345_SPI_WRITE | (address & 0x3F)); PIN = 0; // Aqui na verdade vai ficar uma márcara para decidirvários pinos aomesmo tempo //Send address to write to. spi_.write(tx); //Send data to be written. spi_.write(data); PIN = 1; } void MultRegisterRead(int startAddress, char* buffer, int size) { int tx = (ADXL345_SPI_READ | ADXL345_MULTI_BYTE | (startAddress & 0x3F)); PIN = 0; //Send address to start reading from. spi_.write(tx); for (int i = 0; i < size; i++) { buffer[i] = spi_.write(0x00); } PIN = 1; } void MultRegisterWrite(int startAddress, char* buffer, int size) { int tx = (ADXL345_SPI_WRITE | ADXL345_MULTI_BYTE | (startAddress & 0x3F)); PIN = 0; //Send address to start reading from. spi_.write(tx); for (int i = 0; i < size; i++) { buffer[i] = spi_.write(0x00); } PIN = 1; } /*===============================FUNCOES COPIADAS======================================*/ /*int ADXL345::oneByteRead(int address) { int tx = (ADXL345_SPI_READ | (address & 0x3F)); int rx = 0; PIN = 0; //Send address to read from. spi_.write(tx); //Read back contents of address. rx = spi_.write(0x00); PIN = 1; return rx; } void ADXL345::oneByteWrite(int address, char data) { int tx = (ADXL345_SPI_WRITE | (address & 0x3F)); PIN = 0; //Send address to write to. spi_.write(tx); //Send data to be written. spi_.write(data); PIN = 1; } void ADXL345::multiByteRead(int startAddress, char* buffer, int size) { int tx = (ADXL345_SPI_READ | ADXL345_MULTI_BYTE | (startAddress & 0x3F)); PIN = 0; //Send address to start reading from. spi_.write(tx); for (int i = 0; i < size; i++) { buffer[i] = spi_.write(0x00); } PIN = 1; } void ADXL345::multiByteWrite(int startAddress, char* buffer, int size) { int tx = (ADXL345_SPI_WRITE | ADXL345_MULTI_BYTE | (startAddress & 0x3F)); PIN = 0; //Send address to start reading from. spi_.write(tx); for (int i = 0; i < size; i++) { buffer[i] = spi_.write(0x00); } PIN = 1; }*/