![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
s
Revision 0:6b088c9d1ac8, committed 2017-01-17
- Comitter:
- ShaolinPoutine
- Date:
- Tue Jan 17 15:55:51 2017 +0000
- Commit message:
- g
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 6b088c9d1ac8 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Jan 17 15:55:51 2017 +0000 @@ -0,0 +1,149 @@ +#include "mbed.h" +#include "LPC17xx.h" + +//Serial pc(USBTX,USBRX); +I2C accelero(p28, p27); +DigitalOut myled(LED1); +char *afficheur = (char *) 0x40010000; + + + +const char reg[] = {0x0d}; +const int device = 0x3A; +char data[1]; +int radtodeg = 57; + +int16_t normal[3] = {0,0,1}; + +int empty = 0x1 << 5; +void write(int c){ + while(!LPC_UART1->LSR & empty){} + *afficheur = c; +} + +void initUART1(uint32_t baud) +{ + uint32_t dll = (SystemCoreClock / (16 * baud)); // Baud rate formula + + LPC_SC->PCONP |= (1 << 4); //Power to UART1 + + LPC_SC->PCLKSEL0 &= ~(3 << 8); + LPC_SC->PCLKSEL0 |= (1 << 8); + + LPC_UART1->LCR = 0x03; //8 bits length + LPC_UART1->LCR |= (1 << 7); // DLAB = 1; + + LPC_UART1->DLM = (dll >> 8) & 0xFF; + LPC_UART1->DLL = (dll) & 0xFF; + + LPC_UART1->LCR &= ~(1 << 7); // DLAB = 0 + + LPC_UART1->FCR |= 0x7; //Set FIFO = 1 (Enable), RX and TX reset + + LPC_PINCON->PINSEL0 &= ~0xC0000000; // Clear bit 31:30 + LPC_PINCON->PINSEL0 |= 0x40000000; // set bit 31:30 to 01 + LPC_PINCON->PINSEL1 &= ~0x00000003; // Clear bit 1:0 + LPC_PINCON->PINSEL1 |= 0x00000001; // set bit 1:0 to 0 +} + +int printDecimalNumber(int i){ + char chiffres[4]; + if (i > 9999) { + write(0x76); + write('e'); + write('e'); + write('e'); + write('e'); + } + else { + // Convert number to char list + chiffres[0] = i / 1000; + chiffres[1] = (i - int(chiffres[0]) * 1000) / 100; + chiffres[2] = (i - int(chiffres[0]) * 1000 - int(chiffres[1]) * 100) / 10; + chiffres[3] = i - int(chiffres[0]) * 1000 - int(chiffres[1]) * 100 - int(chiffres[2]) * 10; + + write(0x76); + write(0x77); + write(0b00000010); + for (int x = 0; x < 4; x++) { + write(chiffres[x]); + } + } + return 0; +} + +int main() +{ + myled = 0; + //pc.printf("Begin"); + + initUART1(9600); + + accelero.write(device,reg,1,true); + accelero.read(device,data,1); + + // pc.printf("Result : %d \r\n", data[0]); + printDecimalNumber((int) data[0]); + + // Set 2g max + char XYZ_DATA_CFG[2] = {0x0e, 0}; + char value[1]; + accelero.read(device, XYZ_DATA_CFG, 1, true); + accelero.write(device, value, 1); + value[0] = value[0] & 0xFC; + + XYZ_DATA_CFG[1] = value[0]; + accelero.write(device, XYZ_DATA_CFG, 2); + + // Activate accelerometer + char ctrlReg1[2] = {0x2a, 0}; + accelero.write(device, ctrlReg1, 1, true); + accelero.read(device, value, 1); + value[0] = value[0] | 0x1; + + ctrlReg1[1] = value[0]; + accelero.write(device, ctrlReg1, 2); + + char XYZ_Data = 0x01; + char data[6]; + int16_t x, y, z; + int16_t buffer; + + int buffersize = 128; + int shiftsize = 7; + int mean[buffersize]; + int angle; + + int iteration = 0; + while(1) { + accelero.write(device, &XYZ_Data, 1, true); + accelero.read(device, data, 6); + + ((char*) &buffer)[0]= data[1]; //LSB + ((char*) &buffer)[1]= data[0]; //MSB + x = buffer >> 4; + ((char*) &buffer)[0]= data[3]; //LSB + ((char*) &buffer)[1]= data[2]; //MSB + y = buffer >> 4; + ((char*) &buffer)[0]= data[5]; //LSB + ((char*) &buffer)[1]= data[4]; //MSB + z = buffer >> 4; + + z = std::abs(z); + if (z > 1024) + z = 1024; + + int theta = std::acos((double) z / (double) 1024) * radtodeg * 100; + mean[iteration % buffersize] = theta >> shiftsize; + + if (iteration % 64 == 0) { + angle = 0; + for (int i = 0; i < buffersize; i++) { + angle += mean[i]; + } + printDecimalNumber(angle); + } + wait(0.0006); + iteration++; + } +} \ No newline at end of file
diff -r 000000000000 -r 6b088c9d1ac8 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Jan 17 15:55:51 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/99b5ccf27215 \ No newline at end of file