test

Dependencies:   mbed MMA8452Q

Fork of HelloWorld by Simon Ford

Committer:
vincentlabbe
Date:
Tue Sep 05 20:18:59 2017 +0000
Revision:
25:16a041dd21db
Parent:
24:0227ae0ad260
Child:
26:523ac79471d8
Apres valide
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vincentlabbe 25:16a041dd21db 1 /**** Vincent Labbé - labv2507 *****/
vincentlabbe 25:16a041dd21db 2 /**** Karan Kalsi - *****/
kkalsi 6:62e39c103d12 3 #include "mbed.h"
kkalsi 23:262e3e171aaf 4 #include "MMA8452Q.h"
kkalsi 7:32229ffff57e 5
kkalsi 23:262e3e171aaf 6 Serial pc(USBTX, USBRX); // tx, rx
vincentlabbe 25:16a041dd21db 7 SPI spi(p11,p12,p13);
vincentlabbe 25:16a041dd21db 8 DigitalOut cs(p14);
kkalsi 10:386a3a12f3cf 9 // Communication I2C
vincentlabbe 25:16a041dd21db 10 //I2C i2c(p9,p10); // sda, scl
kkalsi 10:386a3a12f3cf 11
kkalsi 22:706708bc4c1a 12
kkalsi 22:706708bc4c1a 13 void UARTInit()
kkalsi 22:706708bc4c1a 14 {
kkalsi 22:706708bc4c1a 15 uint16_t usFdiv;
kkalsi 22:706708bc4c1a 16
kkalsi 22:706708bc4c1a 17 // Power up the UART3 it's disabled on powerup.
kkalsi 22:706708bc4c1a 18 LPC_SC->PCONP |= (1 << 25);
kkalsi 22:706708bc4c1a 19
kkalsi 22:706708bc4c1a 20 // Enable the pins on the device to use UART3
kkalsi 22:706708bc4c1a 21 LPC_PINCON->PINSEL1 |= (3 << 18); /* Pin P0.25 used as TXD0 (Com0) */
kkalsi 22:706708bc4c1a 22 LPC_PINCON->PINSEL1 |= (3 << 20); /* Pin P0.26 used as RXD0 (Com0) */
kkalsi 22:706708bc4c1a 23
kkalsi 22:706708bc4c1a 24 // Setup the PCLK for UART3
kkalsi 22:706708bc4c1a 25 LPC_SC->PCLKSEL1 &= ~(3 << 18); // Clean all to 0
kkalsi 22:706708bc4c1a 26 LPC_SC->PCLKSEL1 |= (1 << 18); // PCLK = CCLK
kkalsi 22:706708bc4c1a 27
kkalsi 22:706708bc4c1a 28 // Word select 8-bit character length and set DLAB
kkalsi 22:706708bc4c1a 29 LPC_UART3->LCR = 0x83; // 0000 0000 1000 0011
kkalsi 22:706708bc4c1a 30
vincentlabbe 25:16a041dd21db 31 //Baud rate calculation
kkalsi 22:706708bc4c1a 32 usFdiv = (SystemCoreClock / (16*9600));
kkalsi 22:706708bc4c1a 33 LPC_UART3->DLM = usFdiv / 256;
kkalsi 22:706708bc4c1a 34 LPC_UART3->DLL = usFdiv % 256;
kkalsi 22:706708bc4c1a 35
kkalsi 22:706708bc4c1a 36 // Enable and reset UART3 FIFOs.
kkalsi 22:706708bc4c1a 37 LPC_UART3->FCR = 0x7;
kkalsi 22:706708bc4c1a 38
kkalsi 22:706708bc4c1a 39 // Enable the interrupt
kkalsi 22:706708bc4c1a 40 // NVIC_EnableIRQ(UART3_IRQn);
kkalsi 22:706708bc4c1a 41
kkalsi 22:706708bc4c1a 42 // Init the UART3 RX interrupt
kkalsi 22:706708bc4c1a 43 // LPC_UART3->IER = 0x01;
kkalsi 22:706708bc4c1a 44
kkalsi 22:706708bc4c1a 45 // Clear DLAB
kkalsi 22:706708bc4c1a 46 LPC_UART3->LCR &= ~(1 << 7);
kkalsi 22:706708bc4c1a 47
kkalsi 22:706708bc4c1a 48 }
kkalsi 22:706708bc4c1a 49
kkalsi 22:706708bc4c1a 50 char UART3Transmit(int out)
kkalsi 22:706708bc4c1a 51 {
kkalsi 22:706708bc4c1a 52 LPC_UART3 -> THR = out;
kkalsi 22:706708bc4c1a 53 while(! (LPC_UART3->LSR & (0x01 << 0x06)));
kkalsi 22:706708bc4c1a 54
kkalsi 22:706708bc4c1a 55 return 1;
kkalsi 22:706708bc4c1a 56 }
kkalsi 22:706708bc4c1a 57
kkalsi 3:8494c3f7108d 58 int main() {
kkalsi 6:62e39c103d12 59
vincentlabbe 25:16a041dd21db 60 //UARTInit();
vincentlabbe 25:16a041dd21db 61
vincentlabbe 17:c463c5a434ec 62 float x, y, z ;
vincentlabbe 25:16a041dd21db 63
kkalsi 15:b4b2e73faefb 64 MMA8452Q acc(p9,p10,0x1d); // acceleration object
vincentlabbe 25:16a041dd21db 65 //i2c.frequency(100000);
vincentlabbe 25:16a041dd21db 66 //int cmd[0] = 0x0D;
vincentlabbe 25:16a041dd21db 67 //12c.write(addr,cmd,1,true);
vincentlabbe 25:16a041dd21db 68 //i2c.read(addr,cmd,1);
vincentlabbe 25:16a041dd21db 69
vincentlabbe 25:16a041dd21db 70 //Clear display SPI
vincentlabbe 25:16a041dd21db 71 //cs = 0;
vincentlabbe 25:16a041dd21db 72 //wait(0.1);
vincentlabbe 25:16a041dd21db 73 //spi.write(0x76); // Clear display
vincentlabbe 25:16a041dd21db 74 //cs = 1;
vincentlabbe 25:16a041dd21db 75 //wait(0.1);
vincentlabbe 25:16a041dd21db 76 //cs = 1;
vincentlabbe 25:16a041dd21db 77
vincentlabbe 25:16a041dd21db 78 //clear display UART
vincentlabbe 25:16a041dd21db 79 //UART3Transmit(0x76); // Clear display
vincentlabbe 25:16a041dd21db 80 // while (true) {
vincentlabbe 25:16a041dd21db 81 x = acc.getAccX() ;
vincentlabbe 17:c463c5a434ec 82 y = acc.getAccY() ;
vincentlabbe 17:c463c5a434ec 83 z = acc.getAccZ() ;
vincentlabbe 19:992f183385e8 84 printf("X[%.3f] Y[%.3f] Z[%.3f]\n",x, y, z) ;
kkalsi 9:f36f1506a840 85 wait(0.1);
vincentlabbe 13:64137db317ab 86
vincentlabbe 25:16a041dd21db 87 int X = x * 1000; //Pour enlever floating point et garder une précision
vincentlabbe 19:992f183385e8 88 int Y = y * 1000;
vincentlabbe 19:992f183385e8 89 int Z = z * 1000;
kkalsi 18:171cb8d2f243 90
vincentlabbe 25:16a041dd21db 91 int angle = (1000-(((2*X*X+2*Y*Y)*1000/(X*X+Y*Y+Z*Z)))); //Calcul vectoriel pour calculer l'angle à l'horizontal
kkalsi 18:171cb8d2f243 92
vincentlabbe 19:992f183385e8 93 pc.printf("avant acos = %d", angle);
kkalsi 18:171cb8d2f243 94
vincentlabbe 25:16a041dd21db 95 float ratioZaccel = angle/1000.0; //Remettre en floating point pour acos
vincentlabbe 25:16a041dd21db 96 int resultatRAD = 500*acos((ratioZaccel)); //Reponse en RAD
vincentlabbe 25:16a041dd21db 97
vincentlabbe 25:16a041dd21db 98 pc.printf("valeur rad new= %d", resultatRAD);
vincentlabbe 25:16a041dd21db 99 int degree = resultatRAD * 18000/31400; //Tranfo degree
kkalsi 18:171cb8d2f243 100 pc.printf("valeur deg new = %d", degree);
vincentlabbe 25:16a041dd21db 101 //int degreInt = degree;
vincentlabbe 25:16a041dd21db 102 pc.printf("valeur deg new = %d", degree);
vincentlabbe 25:16a041dd21db 103
vincentlabbe 25:16a041dd21db 104 // extracting digits
vincentlabbe 25:16a041dd21db 105 int digit;
vincentlabbe 16:0b58c14b639d 106 int digits[4] = {0,0,0,0};
kkalsi 15:b4b2e73faefb 107 int i = 0;
vincentlabbe 25:16a041dd21db 108 while(degree > 0) {
vincentlabbe 25:16a041dd21db 109 digit = degree % 10; //to get the right most digit
vincentlabbe 25:16a041dd21db 110 digits[i]=digit;
vincentlabbe 25:16a041dd21db 111 pc.printf("digit %d = %d, degree int: %d", i, digits[i], degree);
vincentlabbe 25:16a041dd21db 112 degree /= 10; //reduce the number by one digit
kkalsi 15:b4b2e73faefb 113 ++i;
kkalsi 15:b4b2e73faefb 114 }
kkalsi 15:b4b2e73faefb 115
kkalsi 23:262e3e171aaf 116 // Pour la communication UART
vincentlabbe 25:16a041dd21db 117
vincentlabbe 25:16a041dd21db 118 //UART3Transmit(0x77); // Decimal control command
vincentlabbe 25:16a041dd21db 119 //UART3Transmit(0x04);// Turn on decimal
vincentlabbe 25:16a041dd21db 120
vincentlabbe 25:16a041dd21db 121
vincentlabbe 25:16a041dd21db 122 //UART3Transmit(digits[3]);
vincentlabbe 25:16a041dd21db 123 //UART3Transmit(digits[2]);
vincentlabbe 25:16a041dd21db 124 //UART3Transmit(digits[1]);
vincentlabbe 25:16a041dd21db 125 //UART3Transmit(digits[0]);
vincentlabbe 25:16a041dd21db 126 //UART3Transmit(0xA5);
kkalsi 23:262e3e171aaf 127
kkalsi 23:262e3e171aaf 128 // Pour la communication SPI
vincentlabbe 25:16a041dd21db 129
vincentlabbe 17:c463c5a434ec 130 cs = 0;
vincentlabbe 25:16a041dd21db 131 /* spi.write(0x77); // Decimal control command
vincentlabbe 17:c463c5a434ec 132 cs = 1;
vincentlabbe 25:16a041dd21db 133 wait(0.01);
vincentlabbe 17:c463c5a434ec 134 cs = 0;
vincentlabbe 25:16a041dd21db 135 spi.write(0x04);// Turn on decimal
vincentlabbe 17:c463c5a434ec 136 cs = 1;
vincentlabbe 17:c463c5a434ec 137 wait(0.01);
kkalsi 10:386a3a12f3cf 138 cs = 0;
vincentlabbe 25:16a041dd21db 139 spi.write(digits[3]);
vincentlabbe 16:0b58c14b639d 140 cs = 1;
vincentlabbe 17:c463c5a434ec 141 wait(0.01);
vincentlabbe 16:0b58c14b639d 142 cs = 0;
vincentlabbe 25:16a041dd21db 143 spi.write(digits[2]);
vincentlabbe 16:0b58c14b639d 144 cs = 1;
vincentlabbe 17:c463c5a434ec 145 wait(0.01);
vincentlabbe 16:0b58c14b639d 146 cs = 0;
vincentlabbe 25:16a041dd21db 147 spi.write(digits[1]);
vincentlabbe 16:0b58c14b639d 148 cs = 1;
vincentlabbe 25:16a041dd21db 149 wait(0.01);
vincentlabbe 25:16a041dd21db 150 cs = 0;
vincentlabbe 25:16a041dd21db 151 spi.write(digits[0]);
vincentlabbe 25:16a041dd21db 152 cs = 1;
vincentlabbe 25:16a041dd21db 153 */
vincentlabbe 17:c463c5a434ec 154 wait(0.1);
vincentlabbe 25:16a041dd21db 155 spi.write(0x5);
vincentlabbe 25:16a041dd21db 156 cs = 1;
kkalsi 23:262e3e171aaf 157
vincentlabbe 25:16a041dd21db 158 // }
kkalsi 23:262e3e171aaf 159
vincentlabbe 25:16a041dd21db 160 }
kkalsi 21:74482f23c8fe 161
kkalsi 21:74482f23c8fe 162
kkalsi 21:74482f23c8fe 163
kkalsi 21:74482f23c8fe 164
kkalsi 3:8494c3f7108d 165 /* communication SPI
kkalsi 3:8494c3f7108d 166 Serial pc(USBTX, USBRX); // tx, rx
vincentlabbe 25:16a041dd21db 167 I2C i2c(p9,p10);
vincentlabbe 25:16a041dd21db 168
kkalsi 2:42408ce8f4ae 169 int main() {
vincentlabbe 25:16a041dd21db 170 i2c.frequency(100000);
vincentlabbe 25:16a041dd21db 171 char cmd[2] = {0,0};
vincentlabbe 25:16a041dd21db 172 int addr = 0x5A;
vincentlabbe 25:16a041dd21db 173 int data = 0xA4;
vincentlabbe 25:16a041dd21db 174 cmd[0] = addr;
vincentlabbe 25:16a041dd21db 175 cmd[1] = data;
vincentlabbe 25:16a041dd21db 176
vincentlabbe 25:16a041dd21db 177 while(1){
vincentlabbe 25:16a041dd21db 178 i2c.write(0x3A,cmd,2);
vincentlabbe 25:16a041dd21db 179 wait_ms(5);
kkalsi 2:42408ce8f4ae 180 }
vincentlabbe 25:16a041dd21db 181 }
vincentlabbe 25:16a041dd21db 182 */
kkalsi 2:42408ce8f4ae 183 /*
kkalsi 2:42408ce8f4ae 184 Serial pc(USBTX, USBRX); // tx, rx
kkalsi 22:706708bc4c1a 185 Serial mc(p9,p10);
kkalsi 2:42408ce8f4ae 186 int main() {
kkalsi 2:42408ce8f4ae 187
kkalsi 22:706708bc4c1a 188 int nombre;
kkalsi 2:42408ce8f4ae 189 pc.printf("Entrez un nombre de 4 chiffres : ");
kkalsi 2:42408ce8f4ae 190 pc.scanf("%d", &nombre);
kkalsi 2:42408ce8f4ae 191 pc.printf("Votre numero entrez est le : %d", nombre);
kkalsi 22:706708bc4c1a 192 //mc.printf(nombre);
kkalsi 22:706708bc4c1a 193 mc.putc(nombre);
kkalsi 2:42408ce8f4ae 194 }
kkalsi 2:42408ce8f4ae 195 */
simon 0:fb6bbc10ffa0 196
kkalsi 2:42408ce8f4ae 197
kkalsi 2:42408ce8f4ae 198 /*
kkalsi 2:42408ce8f4ae 199 DigitalOut myled(LED2);
simon 0:fb6bbc10ffa0 200
simon 0:fb6bbc10ffa0 201 int main() {
simon 0:fb6bbc10ffa0 202 while(1) {
simon 0:fb6bbc10ffa0 203 myled = 1;
simon 0:fb6bbc10ffa0 204 wait(0.2);
simon 0:fb6bbc10ffa0 205 myled = 0;
simon 0:fb6bbc10ffa0 206 wait(0.2);
simon 0:fb6bbc10ffa0 207 }
simon 0:fb6bbc10ffa0 208 }
kkalsi 2:42408ce8f4ae 209 */