test

Dependencies:   mbed MMA8452Q

Fork of HelloWorld by Simon Ford

Committer:
kkalsi
Date:
Fri Sep 08 01:54:02 2017 +0000
Revision:
26:523ac79471d8
Parent:
25:16a041dd21db
Child:
27:0f602aca65f1
LAST

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