test

Dependencies:   mbed MMA8452Q

Fork of HelloWorld by Simon Ford

Committer:
kkalsi
Date:
Fri Sep 29 16:34:22 2017 +0000
Revision:
29:3acc071af432
Parent:
28:f56de0b0764e
Child:
30:5881c661b0bb
app3 added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vincentlabbe 25:16a041dd21db 1 /**** Vincent Labbé - labv2507 *****/
kkalsi 29:3acc071af432 2 /**** Karan Kalsi - kalk2701 *****/
kkalsi 6:62e39c103d12 3 #include "mbed.h"
kkalsi 23:262e3e171aaf 4 #include "MMA8452Q.h"
kkalsi 7:32229ffff57e 5
kkalsi 29:3acc071af432 6 Serial xbee1(p13,p14);
kkalsi 23:262e3e171aaf 7 Serial pc(USBTX, USBRX); // tx, rx
kkalsi 29:3acc071af432 8 DigitalOut rst1(p8); //Digital reset for the XBee, 200ns for reset
kkalsi 27:0f602aca65f1 9
kkalsi 29:3acc071af432 10 int main() {
kkalsi 29:3acc071af432 11
kkalsi 29:3acc071af432 12 rst1 = 0; //Set reset pin to 0
kkalsi 29:3acc071af432 13 wait_ms(400);//Wait at least one millisecond
kkalsi 29:3acc071af432 14 rst1 = 1;//Set reset pin to 1
kkalsi 29:3acc071af432 15 //wait_ms(400);//Wait another millisecond
kkalsi 29:3acc071af432 16 int Y;
kkalsi 29:3acc071af432 17
kkalsi 29:3acc071af432 18 while (1) //Neverending Loop
kkalsi 29:3acc071af432 19 {
kkalsi 29:3acc071af432 20
kkalsi 29:3acc071af432 21 //uart vers pc
kkalsi 29:3acc071af432 22
kkalsi 29:3acc071af432 23 if(xbee1.readable())
kkalsi 29:3acc071af432 24 {
kkalsi 29:3acc071af432 25 pc.putc(xbee1.getc());
kkalsi 29:3acc071af432 26 }
kkalsi 27:0f602aca65f1 27
kkalsi 29:3acc071af432 28 if(pc.readable())
kkalsi 29:3acc071af432 29 {
kkalsi 29:3acc071af432 30 xbee1.putc(pc.getc());
kkalsi 29:3acc071af432 31 }
kkalsi 27:0f602aca65f1 32
kkalsi 26:523ac79471d8 33 }
kkalsi 29:3acc071af432 34 }
kkalsi 27:0f602aca65f1 35
kkalsi 22:706708bc4c1a 36
kkalsi 22:706708bc4c1a 37
kkalsi 22:706708bc4c1a 38
kkalsi 22:706708bc4c1a 39
kkalsi 26:523ac79471d8 40 // SPI COMMUNICATION
kkalsi 26:523ac79471d8 41 /*
kkalsi 3:8494c3f7108d 42 int main() {
vincentlabbe 25:16a041dd21db 43
vincentlabbe 17:c463c5a434ec 44 float x, y, z ;
kkalsi 15:b4b2e73faefb 45 MMA8452Q acc(p9,p10,0x1d); // acceleration object
vincentlabbe 25:16a041dd21db 46
kkalsi 26:523ac79471d8 47 cs = 0; //Clear display SPI
kkalsi 26:523ac79471d8 48 wait(0.1);
kkalsi 26:523ac79471d8 49 spi.write(0x76); // Clear display
kkalsi 26:523ac79471d8 50 cs = 1;
kkalsi 26:523ac79471d8 51 wait(0.1);
kkalsi 26:523ac79471d8 52 cs = 1;
vincentlabbe 25:16a041dd21db 53
kkalsi 26:523ac79471d8 54 while (true) {
vincentlabbe 25:16a041dd21db 55 x = acc.getAccX() ;
vincentlabbe 17:c463c5a434ec 56 y = acc.getAccY() ;
vincentlabbe 17:c463c5a434ec 57 z = acc.getAccZ() ;
vincentlabbe 19:992f183385e8 58 printf("X[%.3f] Y[%.3f] Z[%.3f]\n",x, y, z) ;
kkalsi 9:f36f1506a840 59 wait(0.1);
vincentlabbe 13:64137db317ab 60
vincentlabbe 25:16a041dd21db 61 int X = x * 1000; //Pour enlever floating point et garder une précision
vincentlabbe 19:992f183385e8 62 int Y = y * 1000;
vincentlabbe 19:992f183385e8 63 int Z = z * 1000;
kkalsi 18:171cb8d2f243 64
vincentlabbe 25:16a041dd21db 65 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 66
vincentlabbe 19:992f183385e8 67 pc.printf("avant acos = %d", angle);
kkalsi 18:171cb8d2f243 68
vincentlabbe 25:16a041dd21db 69 float ratioZaccel = angle/1000.0; //Remettre en floating point pour acos
vincentlabbe 25:16a041dd21db 70 int resultatRAD = 500*acos((ratioZaccel)); //Reponse en RAD
vincentlabbe 25:16a041dd21db 71
vincentlabbe 25:16a041dd21db 72 pc.printf("valeur rad new= %d", resultatRAD);
vincentlabbe 25:16a041dd21db 73 int degree = resultatRAD * 18000/31400; //Tranfo degree
kkalsi 18:171cb8d2f243 74 pc.printf("valeur deg new = %d", degree);
vincentlabbe 25:16a041dd21db 75 pc.printf("valeur deg new = %d", degree);
vincentlabbe 25:16a041dd21db 76
vincentlabbe 25:16a041dd21db 77 // extracting digits
vincentlabbe 25:16a041dd21db 78 int digit;
vincentlabbe 16:0b58c14b639d 79 int digits[4] = {0,0,0,0};
kkalsi 15:b4b2e73faefb 80 int i = 0;
vincentlabbe 25:16a041dd21db 81 while(degree > 0) {
vincentlabbe 25:16a041dd21db 82 digit = degree % 10; //to get the right most digit
vincentlabbe 25:16a041dd21db 83 digits[i]=digit;
vincentlabbe 25:16a041dd21db 84 pc.printf("digit %d = %d, degree int: %d", i, digits[i], degree);
vincentlabbe 25:16a041dd21db 85 degree /= 10; //reduce the number by one digit
kkalsi 15:b4b2e73faefb 86 ++i;
kkalsi 15:b4b2e73faefb 87 }
kkalsi 15:b4b2e73faefb 88
kkalsi 26:523ac79471d8 89 spi.write(0x77); // Decimal control command // Pour la communication SPI
vincentlabbe 17:c463c5a434ec 90 cs = 1;
vincentlabbe 25:16a041dd21db 91 wait(0.01);
vincentlabbe 17:c463c5a434ec 92 cs = 0;
vincentlabbe 25:16a041dd21db 93 spi.write(0x04);// Turn on decimal
vincentlabbe 17:c463c5a434ec 94 cs = 1;
vincentlabbe 17:c463c5a434ec 95 wait(0.01);
kkalsi 10:386a3a12f3cf 96 cs = 0;
vincentlabbe 25:16a041dd21db 97 spi.write(digits[3]);
vincentlabbe 16:0b58c14b639d 98 cs = 1;
vincentlabbe 17:c463c5a434ec 99 wait(0.01);
vincentlabbe 16:0b58c14b639d 100 cs = 0;
vincentlabbe 25:16a041dd21db 101 spi.write(digits[2]);
vincentlabbe 16:0b58c14b639d 102 cs = 1;
vincentlabbe 17:c463c5a434ec 103 wait(0.01);
vincentlabbe 16:0b58c14b639d 104 cs = 0;
vincentlabbe 25:16a041dd21db 105 spi.write(digits[1]);
vincentlabbe 16:0b58c14b639d 106 cs = 1;
vincentlabbe 25:16a041dd21db 107 wait(0.01);
vincentlabbe 25:16a041dd21db 108 cs = 0;
vincentlabbe 25:16a041dd21db 109 spi.write(digits[0]);
vincentlabbe 25:16a041dd21db 110 cs = 1;
vincentlabbe 25:16a041dd21db 111 */
kkalsi 26:523ac79471d8 112 /* Test
kkalsi 26:523ac79471d8 113 cs = 0;
vincentlabbe 17:c463c5a434ec 114 wait(0.1);
vincentlabbe 25:16a041dd21db 115 spi.write(0x5);
vincentlabbe 25:16a041dd21db 116 cs = 1;
kkalsi 26:523ac79471d8 117 */
vincentlabbe 25:16a041dd21db 118 // }
kkalsi 26:523ac79471d8 119 //}
kkalsi 21:74482f23c8fe 120
kkalsi 21:74482f23c8fe 121
kkalsi 21:74482f23c8fe 122
kkalsi 26:523ac79471d8 123 // UART COMMUNICATION
kkalsi 26:523ac79471d8 124 /*
kkalsi 26:523ac79471d8 125 void UARTInit()
kkalsi 26:523ac79471d8 126 {
kkalsi 26:523ac79471d8 127 uint16_t usFdiv;
kkalsi 26:523ac79471d8 128
kkalsi 26:523ac79471d8 129 LPC_SC->PCONP |= (1 << 25); // Power up the UART3 it's disabled on powerup.
kkalsi 26:523ac79471d8 130
kkalsi 26:523ac79471d8 131 LPC_PINCON->PINSEL1 |= (3 << 18); // Pin P0.25 used as TXD0 (Com0) // Enable the pins on the device to use UART3
kkalsi 26:523ac79471d8 132 LPC_PINCON->PINSEL1 |= (3 << 20); // Pin P0.26 used as RXD0 (Com0)
kkalsi 26:523ac79471d8 133
kkalsi 26:523ac79471d8 134 LPC_SC->PCLKSEL1 &= ~(3 << 18); // Clean all to 0 // Setup the PCLK for UART3
kkalsi 26:523ac79471d8 135 LPC_SC->PCLKSEL1 |= (1 << 18); // PCLK = CCLK
kkalsi 21:74482f23c8fe 136
kkalsi 26:523ac79471d8 137 LPC_UART3->LCR = 0x83; // 0000 0000 1000 0011 // Word select 8-bit character length and set DLAB
kkalsi 26:523ac79471d8 138
kkalsi 26:523ac79471d8 139 usFdiv = (SystemCoreClock / (16*9600)); //Baud rate calculation
kkalsi 26:523ac79471d8 140 LPC_UART3->DLM = usFdiv / 256;
kkalsi 26:523ac79471d8 141 LPC_UART3->DLL = usFdiv % 256;
kkalsi 26:523ac79471d8 142
kkalsi 26:523ac79471d8 143 LPC_UART3->FCR = 0x7; // Enable and reset UART3 FIFOs.
kkalsi 26:523ac79471d8 144
kkalsi 26:523ac79471d8 145 LPC_UART3->LCR &= ~(1 << 7); // Clear DLAB
kkalsi 26:523ac79471d8 146 }
kkalsi 26:523ac79471d8 147
kkalsi 26:523ac79471d8 148 char UART3Transmit(int out)
kkalsi 26:523ac79471d8 149 {
kkalsi 26:523ac79471d8 150 LPC_UART3 -> THR = out;
kkalsi 26:523ac79471d8 151 while(! (LPC_UART3->LSR & (0x01 << 0x06)));
kkalsi 26:523ac79471d8 152
kkalsi 26:523ac79471d8 153 return 1;
kkalsi 26:523ac79471d8 154 }
kkalsi 26:523ac79471d8 155
kkalsi 26:523ac79471d8 156 int main() {
kkalsi 26:523ac79471d8 157
kkalsi 26:523ac79471d8 158 UARTInit();
kkalsi 26:523ac79471d8 159
kkalsi 26:523ac79471d8 160 float x, y, z ;
kkalsi 26:523ac79471d8 161
kkalsi 26:523ac79471d8 162 MMA8452Q acc(p9,p10,0x1d); // acceleration object
kkalsi 26:523ac79471d8 163
kkalsi 26:523ac79471d8 164 UART3Transmit(0x76); // Clear display UART
kkalsi 26:523ac79471d8 165 while (true) {
kkalsi 26:523ac79471d8 166
kkalsi 26:523ac79471d8 167 x = acc.getAccX() ;
kkalsi 26:523ac79471d8 168 y = acc.getAccY() ;
kkalsi 26:523ac79471d8 169 z = acc.getAccZ() ;
kkalsi 26:523ac79471d8 170 printf("X[%.3f] Y[%.3f] Z[%.3f]\n",x, y, z) ;
kkalsi 26:523ac79471d8 171 wait(0.1);
kkalsi 26:523ac79471d8 172
kkalsi 26:523ac79471d8 173 int X = x * 1000; //Pour enlever floating point et garder une précision
kkalsi 26:523ac79471d8 174 int Y = y * 1000;
kkalsi 26:523ac79471d8 175 int Z = z * 1000;
kkalsi 26:523ac79471d8 176
kkalsi 26:523ac79471d8 177 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 178
kkalsi 26:523ac79471d8 179 pc.printf("avant acos = %d", angle);
kkalsi 26:523ac79471d8 180
kkalsi 26:523ac79471d8 181 float ratioZaccel = angle/1000.0; //Remettre en floating point pour acos
kkalsi 26:523ac79471d8 182 int resultatRAD = 500*acos((ratioZaccel)); //Reponse en RAD
kkalsi 26:523ac79471d8 183
kkalsi 26:523ac79471d8 184 pc.printf("valeur rad new= %d", resultatRAD);
kkalsi 26:523ac79471d8 185 int degree = resultatRAD * 18000/31400; //Tranfo degree
kkalsi 26:523ac79471d8 186 pc.printf("valeur deg new = %d", degree);
kkalsi 26:523ac79471d8 187
kkalsi 26:523ac79471d8 188 pc.printf("valeur deg new = %d", degree);
kkalsi 26:523ac79471d8 189
kkalsi 26:523ac79471d8 190
kkalsi 26:523ac79471d8 191 int digit; // extracting digits
kkalsi 26:523ac79471d8 192 int digits[4] = {0,0,0,0};
kkalsi 26:523ac79471d8 193 int i = 0;
kkalsi 26:523ac79471d8 194 while(degree > 0) {
kkalsi 26:523ac79471d8 195 digit = degree % 10; //to get the right most digit
kkalsi 26:523ac79471d8 196 digits[i]=digit;
kkalsi 26:523ac79471d8 197 pc.printf("digit %d = %d, degree int: %d", i, digits[i], degree);
kkalsi 26:523ac79471d8 198 degree /= 10; //reduce the number by one digit
kkalsi 26:523ac79471d8 199 ++i;
kkalsi 26:523ac79471d8 200 }
kkalsi 26:523ac79471d8 201
kkalsi 26:523ac79471d8 202 UART3Transmit(0x77); // Decimal control command // Pour la communication UART
kkalsi 26:523ac79471d8 203 UART3Transmit(0x04);// Turn on decimal
kkalsi 26:523ac79471d8 204
kkalsi 26:523ac79471d8 205 UART3Transmit(digits[3]);
kkalsi 26:523ac79471d8 206 UART3Transmit(digits[2]);
kkalsi 26:523ac79471d8 207 UART3Transmit(digits[1]);
kkalsi 26:523ac79471d8 208 UART3Transmit(digits[0]); //UART3Transmit(0xA5);
kkalsi 26:523ac79471d8 209 }
kkalsi 26:523ac79471d8 210 }
kkalsi 26:523ac79471d8 211 */
kkalsi 26:523ac79471d8 212
kkalsi 26:523ac79471d8 213
kkalsi 26:523ac79471d8 214 /* // communication I2C
kkalsi 3:8494c3f7108d 215 Serial pc(USBTX, USBRX); // tx, rx
vincentlabbe 25:16a041dd21db 216 I2C i2c(p9,p10);
vincentlabbe 25:16a041dd21db 217
kkalsi 2:42408ce8f4ae 218 int main() {
vincentlabbe 25:16a041dd21db 219 i2c.frequency(100000);
vincentlabbe 25:16a041dd21db 220 char cmd[2] = {0,0};
vincentlabbe 25:16a041dd21db 221 int addr = 0x5A;
vincentlabbe 25:16a041dd21db 222 int data = 0xA4;
vincentlabbe 25:16a041dd21db 223 cmd[0] = addr;
vincentlabbe 25:16a041dd21db 224 cmd[1] = data;
vincentlabbe 25:16a041dd21db 225
vincentlabbe 25:16a041dd21db 226 while(1){
vincentlabbe 25:16a041dd21db 227 i2c.write(0x3A,cmd,2);
vincentlabbe 25:16a041dd21db 228 wait_ms(5);
kkalsi 2:42408ce8f4ae 229 }
vincentlabbe 25:16a041dd21db 230 }
vincentlabbe 25:16a041dd21db 231 */
kkalsi 26:523ac79471d8 232 // I2C write
kkalsi 26:523ac79471d8 233 //i2c.frequency(100000);
kkalsi 26:523ac79471d8 234 //int cmd[0] = 0x0D;
kkalsi 26:523ac79471d8 235 //12c.write(addr,cmd,1,true);
kkalsi 26:523ac79471d8 236 //i2c.read(addr,cmd,1);
kkalsi 26:523ac79471d8 237
kkalsi 26:523ac79471d8 238 /* // communication UART
kkalsi 2:42408ce8f4ae 239 Serial pc(USBTX, USBRX); // tx, rx
kkalsi 22:706708bc4c1a 240 Serial mc(p9,p10);
kkalsi 2:42408ce8f4ae 241 int main() {
kkalsi 2:42408ce8f4ae 242
kkalsi 22:706708bc4c1a 243 int nombre;
kkalsi 2:42408ce8f4ae 244 pc.printf("Entrez un nombre de 4 chiffres : ");
kkalsi 2:42408ce8f4ae 245 pc.scanf("%d", &nombre);
kkalsi 2:42408ce8f4ae 246 pc.printf("Votre numero entrez est le : %d", nombre);
kkalsi 22:706708bc4c1a 247 //mc.printf(nombre);
kkalsi 22:706708bc4c1a 248 mc.putc(nombre);
kkalsi 2:42408ce8f4ae 249 }
kkalsi 2:42408ce8f4ae 250 */
simon 0:fb6bbc10ffa0 251
kkalsi 2:42408ce8f4ae 252 /*
kkalsi 26:523ac79471d8 253 DigitalOut myled(LED3);
simon 0:fb6bbc10ffa0 254
simon 0:fb6bbc10ffa0 255 int main() {
simon 0:fb6bbc10ffa0 256 while(1) {
simon 0:fb6bbc10ffa0 257 myled = 1;
simon 0:fb6bbc10ffa0 258 wait(0.2);
simon 0:fb6bbc10ffa0 259 myled = 0;
simon 0:fb6bbc10ffa0 260 wait(0.2);
simon 0:fb6bbc10ffa0 261 }
simon 0:fb6bbc10ffa0 262 }
kkalsi 28:f56de0b0764e 263 */
kkalsi 28:f56de0b0764e 264
kkalsi 28:f56de0b0764e 265 // I2C write
kkalsi 28:f56de0b0764e 266 /*
kkalsi 28:f56de0b0764e 267 I2C i2c( p28, p26 ); // sda, scl
kkalsi 28:f56de0b0764e 268
kkalsi 28:f56de0b0764e 269 int main() {
kkalsi 28:f56de0b0764e 270 char data[3];
kkalsi 28:f56de0b0764e 271
kkalsi 28:f56de0b0764e 272 data[0] = 0x16;
kkalsi 28:f56de0b0764e 273 data[1] = 0x55;
kkalsi 28:f56de0b0764e 274 data[2] = 0x55;
kkalsi 28:f56de0b0764e 275
kkalsi 28:f56de0b0764e 276 i2c.write( 0xC0, data, 3 ); //0xC0 is slave adress
kkalsi 28:f56de0b0764e 277 }*/
kkalsi 28:f56de0b0764e 278
kkalsi 28:f56de0b0764e 279 // I2C Read
kkalsi 28:f56de0b0764e 280 /*
kkalsi 28:f56de0b0764e 281 short read_sensor_lower_8bit( void )
kkalsi 28:f56de0b0764e 282 {
kkalsi 28:f56de0b0764e 283 char v;
kkalsi 28:f56de0b0764e 284 char cmd;
kkalsi 28:f56de0b0764e 285
kkalsi 28:f56de0b0764e 286 cmd = 0x05;
kkalsi 28:f56de0b0764e 287
kkalsi 28:f56de0b0764e 288 i2c.write( 0x88, &cmd, 1 );
kkalsi 28:f56de0b0764e 289 i2c.read( 0x88, &v, 1 );
kkalsi 28:f56de0b0764e 290
kkalsi 28:f56de0b0764e 291 return( v );
kkalsi 28:f56de0b0764e 292 }
kkalsi 28:f56de0b0764e 293 */
kkalsi 28:f56de0b0764e 294
kkalsi 28:f56de0b0764e 295 /*
kkalsi 28:f56de0b0764e 296 int main() {
kkalsi 28:f56de0b0764e 297 set_time(1256729737); // Set RTC time to Wed, 28 Oct 2009 11:35:37
kkalsi 28:f56de0b0764e 298 }*/
kkalsi 28:f56de0b0764e 299
kkalsi 28:f56de0b0764e 300 /*
kkalsi 28:f56de0b0764e 301 int main() {
kkalsi 28:f56de0b0764e 302 while(1) {
kkalsi 28:f56de0b0764e 303 time_t seconds = time(NULL);
kkalsi 28:f56de0b0764e 304
kkalsi 28:f56de0b0764e 305 printf("Time as seconds since January 1, 1970 = %d\n", seconds);
kkalsi 28:f56de0b0764e 306
kkalsi 28:f56de0b0764e 307 printf("Time as a basic string = %s", ctime(&seconds));
kkalsi 28:f56de0b0764e 308
kkalsi 28:f56de0b0764e 309 char buffer[32];
kkalsi 28:f56de0b0764e 310 strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds));
kkalsi 28:f56de0b0764e 311 printf("Time as a custom formatted string = %s", buffer);
kkalsi 28:f56de0b0764e 312
kkalsi 28:f56de0b0764e 313 wait(1);
kkalsi 28:f56de0b0764e 314 }
kkalsi 28:f56de0b0764e 315 }*/
kkalsi 28:f56de0b0764e 316 /*
kkalsi 28:f56de0b0764e 317 int main() {
kkalsi 28:f56de0b0764e 318
kkalsi 28:f56de0b0764e 319 // get the current time from the terminal
kkalsi 28:f56de0b0764e 320 struct tm t;
kkalsi 28:f56de0b0764e 321 printf("Enter current date and time:\n");
kkalsi 28:f56de0b0764e 322 printf("YYYY MM DD HH MM SS[enter]\n");
kkalsi 28:f56de0b0764e 323 scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday
kkalsi 28:f56de0b0764e 324 , &t.tm_hour, &t.tm_min, &t.tm_sec);
kkalsi 28:f56de0b0764e 325
kkalsi 28:f56de0b0764e 326 // adjust for tm structure required values
kkalsi 28:f56de0b0764e 327 t.tm_year = t.tm_year - 1900;
kkalsi 28:f56de0b0764e 328 t.tm_mon = t.tm_mon - 1;
kkalsi 28:f56de0b0764e 329
kkalsi 28:f56de0b0764e 330 // set the time
kkalsi 28:f56de0b0764e 331 set_time(mktime(&t));
kkalsi 28:f56de0b0764e 332
kkalsi 28:f56de0b0764e 333 // display the time
kkalsi 28:f56de0b0764e 334 while(1) {
kkalsi 28:f56de0b0764e 335 time_t seconds = time(NULL);
kkalsi 28:f56de0b0764e 336 printf("Time as a basic string = %s", ctime(&seconds));
kkalsi 28:f56de0b0764e 337 wait(1);
kkalsi 28:f56de0b0764e 338 }
kkalsi 28:f56de0b0764e 339 }*/