test

Dependencies:   mbed MMA8452Q

Fork of HelloWorld by Simon Ford

Committer:
kkalsi
Date:
Fri Sep 08 04:13:54 2017 +0000
Revision:
27:0f602aca65f1
Parent:
26:523ac79471d8
Child:
28:f56de0b0764e
last with examples

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
kkalsi 27:0f602aca65f1 7 //SPI spi(p11,p12,p13);
kkalsi 27:0f602aca65f1 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 27:0f602aca65f1 12 //int main() {
kkalsi 27:0f602aca65f1 13 // }
kkalsi 27:0f602aca65f1 14
kkalsi 27:0f602aca65f1 15
kkalsi 27:0f602aca65f1 16
kkalsi 27:0f602aca65f1 17 // on utilise l'afficheur 7 SEG en mode SPI pour la mise au point
kkalsi 27:0f602aca65f1 18 SPI spi(p5, p6, p7); // mosi, miso, sclk
kkalsi 27:0f602aca65f1 19 DigitalOut cs(p8);
kkalsi 27:0f602aca65f1 20
kkalsi 27:0f602aca65f1 21 AnalogOut signal(p18);
kkalsi 27:0f602aca65f1 22 AnalogIn ain(p20);
kkalsi 27:0f602aca65f1 23 BusOut myleds(LED1, LED2, LED3, LED4); // for display 4 leds in hex format
kkalsi 27:0f602aca65f1 24 unsigned short value;
kkalsi 27:0f602aca65f1 25 Ticker display;
kkalsi 27:0f602aca65f1 26
kkalsi 27:0f602aca65f1 27 short table[16] = { 0x00, // 0 0 - 1/16
kkalsi 27:0f602aca65f1 28 0x00, // 1 1/16 - 1/8
kkalsi 27:0f602aca65f1 29 0x01, // 2 1/8 - 3/16
kkalsi 27:0f602aca65f1 30 0x01, // 3 3/16 - 1/4
kkalsi 27:0f602aca65f1 31 0x01, // 4 1/4 - 5/16
kkalsi 27:0f602aca65f1 32 0x01, // 5 5/16 - 3/8
kkalsi 27:0f602aca65f1 33 0x03, // 6 3/8 - 7/16
kkalsi 27:0f602aca65f1 34 0x03, // 7 7/16 - 1/2
kkalsi 27:0f602aca65f1 35 0x03, // 8 1/2 - 9/16
kkalsi 27:0f602aca65f1 36 0x03, // 9 9/16 - 5/8
kkalsi 27:0f602aca65f1 37 0x07, // a 5/8 - 11/16
kkalsi 27:0f602aca65f1 38 0x07, // b 11/16 - 3/4
kkalsi 27:0f602aca65f1 39 0x07, // c 3/4 - 13/16
kkalsi 27:0f602aca65f1 40 0x07, // d 13/16 - 7/8
kkalsi 27:0f602aca65f1 41 0x0f, // e 7/8 - 15/16
kkalsi 27:0f602aca65f1 42 0x0f}; // f 15/16 - 1
kkalsi 27:0f602aca65f1 43
kkalsi 27:0f602aca65f1 44 void disp() {
kkalsi 27:0f602aca65f1 45 short i;
kkalsi 27:0f602aca65f1 46 value = ain.read_u16(); // read input
kkalsi 27:0f602aca65f1 47 i = (value >> 12) & 0x000f; // transform to hex
kkalsi 27:0f602aca65f1 48
kkalsi 27:0f602aca65f1 49 cs = 0; // affichage 7 SEG via SPI
kkalsi 27:0f602aca65f1 50 wait_us(5);
kkalsi 27:0f602aca65f1 51 spi.write(i);
kkalsi 27:0f602aca65f1 52 wait_us(5);
kkalsi 27:0f602aca65f1 53 cs = 1;
kkalsi 27:0f602aca65f1 54
kkalsi 27:0f602aca65f1 55 myleds = table[i]; // affichage sur les LEDs
kkalsi 27:0f602aca65f1 56 }
kkalsi 27:0f602aca65f1 57
kkalsi 26:523ac79471d8 58 int main() {
kkalsi 27:0f602aca65f1 59 spi.format(8,0); // initialisation du port SPI pour l'afficheur
kkalsi 27:0f602aca65f1 60 spi.frequency(100000);
kkalsi 27:0f602aca65f1 61
kkalsi 27:0f602aca65f1 62 cs = 0;
kkalsi 27:0f602aca65f1 63 wait_us(5);
kkalsi 27:0f602aca65f1 64 spi.write(0x76); //clear
kkalsi 27:0f602aca65f1 65 wait_us(5);
kkalsi 27:0f602aca65f1 66 cs = 1;
kkalsi 27:0f602aca65f1 67
kkalsi 27:0f602aca65f1 68 display.attach(&disp, 0.1); // connexion de la fonction périodique aux 1/10 de seconde // roule constamment
kkalsi 27:0f602aca65f1 69 while (1){
kkalsi 27:0f602aca65f1 70
kkalsi 26:523ac79471d8 71 }
kkalsi 27:0f602aca65f1 72
kkalsi 27:0f602aca65f1 73 }
kkalsi 27:0f602aca65f1 74
kkalsi 22:706708bc4c1a 75
kkalsi 22:706708bc4c1a 76
kkalsi 22:706708bc4c1a 77
kkalsi 22:706708bc4c1a 78
kkalsi 26:523ac79471d8 79 // SPI COMMUNICATION
kkalsi 26:523ac79471d8 80 /*
kkalsi 3:8494c3f7108d 81 int main() {
vincentlabbe 25:16a041dd21db 82
vincentlabbe 17:c463c5a434ec 83 float x, y, z ;
kkalsi 15:b4b2e73faefb 84 MMA8452Q acc(p9,p10,0x1d); // acceleration object
vincentlabbe 25:16a041dd21db 85
kkalsi 26:523ac79471d8 86 cs = 0; //Clear display SPI
kkalsi 26:523ac79471d8 87 wait(0.1);
kkalsi 26:523ac79471d8 88 spi.write(0x76); // Clear display
kkalsi 26:523ac79471d8 89 cs = 1;
kkalsi 26:523ac79471d8 90 wait(0.1);
kkalsi 26:523ac79471d8 91 cs = 1;
vincentlabbe 25:16a041dd21db 92
kkalsi 26:523ac79471d8 93 while (true) {
vincentlabbe 25:16a041dd21db 94 x = acc.getAccX() ;
vincentlabbe 17:c463c5a434ec 95 y = acc.getAccY() ;
vincentlabbe 17:c463c5a434ec 96 z = acc.getAccZ() ;
vincentlabbe 19:992f183385e8 97 printf("X[%.3f] Y[%.3f] Z[%.3f]\n",x, y, z) ;
kkalsi 9:f36f1506a840 98 wait(0.1);
vincentlabbe 13:64137db317ab 99
vincentlabbe 25:16a041dd21db 100 int X = x * 1000; //Pour enlever floating point et garder une précision
vincentlabbe 19:992f183385e8 101 int Y = y * 1000;
vincentlabbe 19:992f183385e8 102 int Z = z * 1000;
kkalsi 18:171cb8d2f243 103
vincentlabbe 25:16a041dd21db 104 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 105
vincentlabbe 19:992f183385e8 106 pc.printf("avant acos = %d", angle);
kkalsi 18:171cb8d2f243 107
vincentlabbe 25:16a041dd21db 108 float ratioZaccel = angle/1000.0; //Remettre en floating point pour acos
vincentlabbe 25:16a041dd21db 109 int resultatRAD = 500*acos((ratioZaccel)); //Reponse en RAD
vincentlabbe 25:16a041dd21db 110
vincentlabbe 25:16a041dd21db 111 pc.printf("valeur rad new= %d", resultatRAD);
vincentlabbe 25:16a041dd21db 112 int degree = resultatRAD * 18000/31400; //Tranfo degree
kkalsi 18:171cb8d2f243 113 pc.printf("valeur deg new = %d", degree);
vincentlabbe 25:16a041dd21db 114 pc.printf("valeur deg new = %d", degree);
vincentlabbe 25:16a041dd21db 115
vincentlabbe 25:16a041dd21db 116 // extracting digits
vincentlabbe 25:16a041dd21db 117 int digit;
vincentlabbe 16:0b58c14b639d 118 int digits[4] = {0,0,0,0};
kkalsi 15:b4b2e73faefb 119 int i = 0;
vincentlabbe 25:16a041dd21db 120 while(degree > 0) {
vincentlabbe 25:16a041dd21db 121 digit = degree % 10; //to get the right most digit
vincentlabbe 25:16a041dd21db 122 digits[i]=digit;
vincentlabbe 25:16a041dd21db 123 pc.printf("digit %d = %d, degree int: %d", i, digits[i], degree);
vincentlabbe 25:16a041dd21db 124 degree /= 10; //reduce the number by one digit
kkalsi 15:b4b2e73faefb 125 ++i;
kkalsi 15:b4b2e73faefb 126 }
kkalsi 15:b4b2e73faefb 127
kkalsi 26:523ac79471d8 128 spi.write(0x77); // Decimal control command // Pour la communication SPI
vincentlabbe 17:c463c5a434ec 129 cs = 1;
vincentlabbe 25:16a041dd21db 130 wait(0.01);
vincentlabbe 17:c463c5a434ec 131 cs = 0;
vincentlabbe 25:16a041dd21db 132 spi.write(0x04);// Turn on decimal
vincentlabbe 17:c463c5a434ec 133 cs = 1;
vincentlabbe 17:c463c5a434ec 134 wait(0.01);
kkalsi 10:386a3a12f3cf 135 cs = 0;
vincentlabbe 25:16a041dd21db 136 spi.write(digits[3]);
vincentlabbe 16:0b58c14b639d 137 cs = 1;
vincentlabbe 17:c463c5a434ec 138 wait(0.01);
vincentlabbe 16:0b58c14b639d 139 cs = 0;
vincentlabbe 25:16a041dd21db 140 spi.write(digits[2]);
vincentlabbe 16:0b58c14b639d 141 cs = 1;
vincentlabbe 17:c463c5a434ec 142 wait(0.01);
vincentlabbe 16:0b58c14b639d 143 cs = 0;
vincentlabbe 25:16a041dd21db 144 spi.write(digits[1]);
vincentlabbe 16:0b58c14b639d 145 cs = 1;
vincentlabbe 25:16a041dd21db 146 wait(0.01);
vincentlabbe 25:16a041dd21db 147 cs = 0;
vincentlabbe 25:16a041dd21db 148 spi.write(digits[0]);
vincentlabbe 25:16a041dd21db 149 cs = 1;
vincentlabbe 25:16a041dd21db 150 */
kkalsi 26:523ac79471d8 151 /* Test
kkalsi 26:523ac79471d8 152 cs = 0;
vincentlabbe 17:c463c5a434ec 153 wait(0.1);
vincentlabbe 25:16a041dd21db 154 spi.write(0x5);
vincentlabbe 25:16a041dd21db 155 cs = 1;
kkalsi 26:523ac79471d8 156 */
vincentlabbe 25:16a041dd21db 157 // }
kkalsi 26:523ac79471d8 158 //}
kkalsi 21:74482f23c8fe 159
kkalsi 21:74482f23c8fe 160
kkalsi 21:74482f23c8fe 161
kkalsi 26:523ac79471d8 162 // UART COMMUNICATION
kkalsi 26:523ac79471d8 163 /*
kkalsi 26:523ac79471d8 164 void UARTInit()
kkalsi 26:523ac79471d8 165 {
kkalsi 26:523ac79471d8 166 uint16_t usFdiv;
kkalsi 26:523ac79471d8 167
kkalsi 26:523ac79471d8 168 LPC_SC->PCONP |= (1 << 25); // Power up the UART3 it's disabled on powerup.
kkalsi 26:523ac79471d8 169
kkalsi 26:523ac79471d8 170 LPC_PINCON->PINSEL1 |= (3 << 18); // Pin P0.25 used as TXD0 (Com0) // Enable the pins on the device to use UART3
kkalsi 26:523ac79471d8 171 LPC_PINCON->PINSEL1 |= (3 << 20); // Pin P0.26 used as RXD0 (Com0)
kkalsi 26:523ac79471d8 172
kkalsi 26:523ac79471d8 173 LPC_SC->PCLKSEL1 &= ~(3 << 18); // Clean all to 0 // Setup the PCLK for UART3
kkalsi 26:523ac79471d8 174 LPC_SC->PCLKSEL1 |= (1 << 18); // PCLK = CCLK
kkalsi 21:74482f23c8fe 175
kkalsi 26:523ac79471d8 176 LPC_UART3->LCR = 0x83; // 0000 0000 1000 0011 // Word select 8-bit character length and set DLAB
kkalsi 26:523ac79471d8 177
kkalsi 26:523ac79471d8 178 usFdiv = (SystemCoreClock / (16*9600)); //Baud rate calculation
kkalsi 26:523ac79471d8 179 LPC_UART3->DLM = usFdiv / 256;
kkalsi 26:523ac79471d8 180 LPC_UART3->DLL = usFdiv % 256;
kkalsi 26:523ac79471d8 181
kkalsi 26:523ac79471d8 182 LPC_UART3->FCR = 0x7; // Enable and reset UART3 FIFOs.
kkalsi 26:523ac79471d8 183
kkalsi 26:523ac79471d8 184 LPC_UART3->LCR &= ~(1 << 7); // Clear DLAB
kkalsi 26:523ac79471d8 185 }
kkalsi 26:523ac79471d8 186
kkalsi 26:523ac79471d8 187 char UART3Transmit(int out)
kkalsi 26:523ac79471d8 188 {
kkalsi 26:523ac79471d8 189 LPC_UART3 -> THR = out;
kkalsi 26:523ac79471d8 190 while(! (LPC_UART3->LSR & (0x01 << 0x06)));
kkalsi 26:523ac79471d8 191
kkalsi 26:523ac79471d8 192 return 1;
kkalsi 26:523ac79471d8 193 }
kkalsi 26:523ac79471d8 194
kkalsi 26:523ac79471d8 195 int main() {
kkalsi 26:523ac79471d8 196
kkalsi 26:523ac79471d8 197 UARTInit();
kkalsi 26:523ac79471d8 198
kkalsi 26:523ac79471d8 199 float x, y, z ;
kkalsi 26:523ac79471d8 200
kkalsi 26:523ac79471d8 201 MMA8452Q acc(p9,p10,0x1d); // acceleration object
kkalsi 26:523ac79471d8 202
kkalsi 26:523ac79471d8 203 UART3Transmit(0x76); // Clear display UART
kkalsi 26:523ac79471d8 204 while (true) {
kkalsi 26:523ac79471d8 205
kkalsi 26:523ac79471d8 206 x = acc.getAccX() ;
kkalsi 26:523ac79471d8 207 y = acc.getAccY() ;
kkalsi 26:523ac79471d8 208 z = acc.getAccZ() ;
kkalsi 26:523ac79471d8 209 printf("X[%.3f] Y[%.3f] Z[%.3f]\n",x, y, z) ;
kkalsi 26:523ac79471d8 210 wait(0.1);
kkalsi 26:523ac79471d8 211
kkalsi 26:523ac79471d8 212 int X = x * 1000; //Pour enlever floating point et garder une précision
kkalsi 26:523ac79471d8 213 int Y = y * 1000;
kkalsi 26:523ac79471d8 214 int Z = z * 1000;
kkalsi 26:523ac79471d8 215
kkalsi 26:523ac79471d8 216 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 217
kkalsi 26:523ac79471d8 218 pc.printf("avant acos = %d", angle);
kkalsi 26:523ac79471d8 219
kkalsi 26:523ac79471d8 220 float ratioZaccel = angle/1000.0; //Remettre en floating point pour acos
kkalsi 26:523ac79471d8 221 int resultatRAD = 500*acos((ratioZaccel)); //Reponse en RAD
kkalsi 26:523ac79471d8 222
kkalsi 26:523ac79471d8 223 pc.printf("valeur rad new= %d", resultatRAD);
kkalsi 26:523ac79471d8 224 int degree = resultatRAD * 18000/31400; //Tranfo degree
kkalsi 26:523ac79471d8 225 pc.printf("valeur deg new = %d", degree);
kkalsi 26:523ac79471d8 226
kkalsi 26:523ac79471d8 227 pc.printf("valeur deg new = %d", degree);
kkalsi 26:523ac79471d8 228
kkalsi 26:523ac79471d8 229
kkalsi 26:523ac79471d8 230 int digit; // extracting digits
kkalsi 26:523ac79471d8 231 int digits[4] = {0,0,0,0};
kkalsi 26:523ac79471d8 232 int i = 0;
kkalsi 26:523ac79471d8 233 while(degree > 0) {
kkalsi 26:523ac79471d8 234 digit = degree % 10; //to get the right most digit
kkalsi 26:523ac79471d8 235 digits[i]=digit;
kkalsi 26:523ac79471d8 236 pc.printf("digit %d = %d, degree int: %d", i, digits[i], degree);
kkalsi 26:523ac79471d8 237 degree /= 10; //reduce the number by one digit
kkalsi 26:523ac79471d8 238 ++i;
kkalsi 26:523ac79471d8 239 }
kkalsi 26:523ac79471d8 240
kkalsi 26:523ac79471d8 241 UART3Transmit(0x77); // Decimal control command // Pour la communication UART
kkalsi 26:523ac79471d8 242 UART3Transmit(0x04);// Turn on decimal
kkalsi 26:523ac79471d8 243
kkalsi 26:523ac79471d8 244 UART3Transmit(digits[3]);
kkalsi 26:523ac79471d8 245 UART3Transmit(digits[2]);
kkalsi 26:523ac79471d8 246 UART3Transmit(digits[1]);
kkalsi 26:523ac79471d8 247 UART3Transmit(digits[0]); //UART3Transmit(0xA5);
kkalsi 26:523ac79471d8 248 }
kkalsi 26:523ac79471d8 249 }
kkalsi 26:523ac79471d8 250 */
kkalsi 26:523ac79471d8 251
kkalsi 26:523ac79471d8 252
kkalsi 26:523ac79471d8 253 /* // communication I2C
kkalsi 3:8494c3f7108d 254 Serial pc(USBTX, USBRX); // tx, rx
vincentlabbe 25:16a041dd21db 255 I2C i2c(p9,p10);
vincentlabbe 25:16a041dd21db 256
kkalsi 2:42408ce8f4ae 257 int main() {
vincentlabbe 25:16a041dd21db 258 i2c.frequency(100000);
vincentlabbe 25:16a041dd21db 259 char cmd[2] = {0,0};
vincentlabbe 25:16a041dd21db 260 int addr = 0x5A;
vincentlabbe 25:16a041dd21db 261 int data = 0xA4;
vincentlabbe 25:16a041dd21db 262 cmd[0] = addr;
vincentlabbe 25:16a041dd21db 263 cmd[1] = data;
vincentlabbe 25:16a041dd21db 264
vincentlabbe 25:16a041dd21db 265 while(1){
vincentlabbe 25:16a041dd21db 266 i2c.write(0x3A,cmd,2);
vincentlabbe 25:16a041dd21db 267 wait_ms(5);
kkalsi 2:42408ce8f4ae 268 }
vincentlabbe 25:16a041dd21db 269 }
vincentlabbe 25:16a041dd21db 270 */
kkalsi 26:523ac79471d8 271 // I2C write
kkalsi 26:523ac79471d8 272 //i2c.frequency(100000);
kkalsi 26:523ac79471d8 273 //int cmd[0] = 0x0D;
kkalsi 26:523ac79471d8 274 //12c.write(addr,cmd,1,true);
kkalsi 26:523ac79471d8 275 //i2c.read(addr,cmd,1);
kkalsi 26:523ac79471d8 276
kkalsi 26:523ac79471d8 277 /* // communication UART
kkalsi 2:42408ce8f4ae 278 Serial pc(USBTX, USBRX); // tx, rx
kkalsi 22:706708bc4c1a 279 Serial mc(p9,p10);
kkalsi 2:42408ce8f4ae 280 int main() {
kkalsi 2:42408ce8f4ae 281
kkalsi 22:706708bc4c1a 282 int nombre;
kkalsi 2:42408ce8f4ae 283 pc.printf("Entrez un nombre de 4 chiffres : ");
kkalsi 2:42408ce8f4ae 284 pc.scanf("%d", &nombre);
kkalsi 2:42408ce8f4ae 285 pc.printf("Votre numero entrez est le : %d", nombre);
kkalsi 22:706708bc4c1a 286 //mc.printf(nombre);
kkalsi 22:706708bc4c1a 287 mc.putc(nombre);
kkalsi 2:42408ce8f4ae 288 }
kkalsi 2:42408ce8f4ae 289 */
simon 0:fb6bbc10ffa0 290
kkalsi 2:42408ce8f4ae 291 /*
kkalsi 26:523ac79471d8 292 DigitalOut myled(LED3);
simon 0:fb6bbc10ffa0 293
simon 0:fb6bbc10ffa0 294 int main() {
simon 0:fb6bbc10ffa0 295 while(1) {
simon 0:fb6bbc10ffa0 296 myled = 1;
simon 0:fb6bbc10ffa0 297 wait(0.2);
simon 0:fb6bbc10ffa0 298 myled = 0;
simon 0:fb6bbc10ffa0 299 wait(0.2);
simon 0:fb6bbc10ffa0 300 }
simon 0:fb6bbc10ffa0 301 }
kkalsi 2:42408ce8f4ae 302 */