test

Dependencies:   mbed MMA8452Q

Fork of HelloWorld by Simon Ford

Committer:
kkalsi
Date:
Sun Oct 01 18:28:14 2017 +0000
Revision:
32:bcfe51898e7c
Parent:
30:5881c661b0bb
transmit

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 30:5881c661b0bb 6 Serial xbee_routeur(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 32:bcfe51898e7c 9 DigitalIn btn(p15); //Bouton read
kkalsi 32:bcfe51898e7c 10 //MMA8452Q mma8452(p9,p10,0x1d);
kkalsi 30:5881c661b0bb 11
kkalsi 30:5881c661b0bb 12 LocalFileSystem local("local"); // Create the local filesystem under the name "local"
kkalsi 32:bcfe51898e7c 13 DigitalOut myled(LED1);
kkalsi 32:bcfe51898e7c 14 Ticker sample;
kkalsi 32:bcfe51898e7c 15 int currentStateButton;
kkalsi 32:bcfe51898e7c 16 int previousStateButton;
kkalsi 32:bcfe51898e7c 17 int validationStateButton;
kkalsi 30:5881c661b0bb 18
kkalsi 30:5881c661b0bb 19 uint16_t panId; // panId
kkalsi 30:5881c661b0bb 20 uint8_t panId_LSB;
kkalsi 30:5881c661b0bb 21 uint8_t panId_MSB;
kkalsi 30:5881c661b0bb 22
kkalsi 30:5881c661b0bb 23 char* url; // url
kkalsi 30:5881c661b0bb 24 char URL[10];
kkalsi 30:5881c661b0bb 25
kkalsi 30:5881c661b0bb 26 void seperatePanId(void);
kkalsi 30:5881c661b0bb 27 void ReadFile (void);
kkalsi 32:bcfe51898e7c 28 void envoyer_tramme(char commande[], uint8_t data[], uint8_t length_MSB, uint8_t length_LSB, uint8_t API_frame_name);
kkalsi 32:bcfe51898e7c 29 void transmisson(uint8_t data[], uint8_t length_MSB, uint8_t length_LSB, uint8_t API_frame_name);
kkalsi 32:bcfe51898e7c 30 void initialisation_xbee(void);
kkalsi 32:bcfe51898e7c 31 void readBtn(void);
kkalsi 27:0f602aca65f1 32
kkalsi 29:3acc071af432 33 int main() {
kkalsi 29:3acc071af432 34
kkalsi 30:5881c661b0bb 35 ReadFile();// when you run first time without this line, the setup file is on created
kkalsi 30:5881c661b0bb 36 wait(1);
kkalsi 30:5881c661b0bb 37 seperatePanId(); // séparé msb et lsb du panId
kkalsi 30:5881c661b0bb 38
kkalsi 32:bcfe51898e7c 39 /*
kkalsi 30:5881c661b0bb 40 pc.printf("panId lsb : %x\n\r",panId_LSB);
kkalsi 30:5881c661b0bb 41 pc.printf("panId msb : %x\n\r",panId_MSB);
kkalsi 30:5881c661b0bb 42 pc.printf("panId : %x\n\r",panId);
kkalsi 30:5881c661b0bb 43 pc.printf("url: %s\n\r",URL);
kkalsi 32:bcfe51898e7c 44 */
kkalsi 30:5881c661b0bb 45
kkalsi 32:bcfe51898e7c 46 initialisation_xbee();
kkalsi 32:bcfe51898e7c 47
kkalsi 32:bcfe51898e7c 48 char commande0[2] = {'I','D'};
kkalsi 32:bcfe51898e7c 49 uint8_t data0[2] = {panId_MSB, panId_LSB};
kkalsi 32:bcfe51898e7c 50 envoyer_tramme(commande0, data0, 0x00, 0x06, 0x09);
kkalsi 32:bcfe51898e7c 51
kkalsi 32:bcfe51898e7c 52 char commande1[2] = {'S','C'};
kkalsi 32:bcfe51898e7c 53 uint8_t data1[2] = {0x09};
kkalsi 32:bcfe51898e7c 54 envoyer_tramme(commande1, data1, 0x00, 0x05, 0x09);
kkalsi 30:5881c661b0bb 55
kkalsi 32:bcfe51898e7c 56 /*
kkalsi 32:bcfe51898e7c 57 char commande2[2] = {'W','R'};
kkalsi 32:bcfe51898e7c 58 uint8_t data2[10] = {};
kkalsi 32:bcfe51898e7c 59 envoyer_tramme(commande2, data2, 0x00, 0x04, 0x09);
kkalsi 32:bcfe51898e7c 60 */
kkalsi 32:bcfe51898e7c 61 /*
kkalsi 32:bcfe51898e7c 62 char commande3[2] = {'A','C'};
kkalsi 32:bcfe51898e7c 63 uint8_t data3[2] = {};
kkalsi 32:bcfe51898e7c 64 envoyer_tramme(commande3, data3, 0x00, 0x04, 0x09);
kkalsi 32:bcfe51898e7c 65 */
kkalsi 30:5881c661b0bb 66
kkalsi 32:bcfe51898e7c 67 sample.attach(&readBtn,0.05);
kkalsi 30:5881c661b0bb 68
kkalsi 30:5881c661b0bb 69 while(1)
kkalsi 30:5881c661b0bb 70 {
kkalsi 30:5881c661b0bb 71
kkalsi 32:bcfe51898e7c 72
kkalsi 32:bcfe51898e7c 73
kkalsi 32:bcfe51898e7c 74 //myled = 1;
kkalsi 30:5881c661b0bb 75 if(xbee_routeur.readable())
kkalsi 29:3acc071af432 76 {
kkalsi 30:5881c661b0bb 77 pc.putc(xbee_routeur.getc());
kkalsi 30:5881c661b0bb 78 }
kkalsi 30:5881c661b0bb 79
kkalsi 30:5881c661b0bb 80 if(pc.readable())
kkalsi 30:5881c661b0bb 81 {
kkalsi 30:5881c661b0bb 82 xbee_routeur.putc(pc.getc());
kkalsi 30:5881c661b0bb 83 }
kkalsi 32:bcfe51898e7c 84
kkalsi 32:bcfe51898e7c 85 }
kkalsi 32:bcfe51898e7c 86 }
kkalsi 32:bcfe51898e7c 87
kkalsi 32:bcfe51898e7c 88 void readBtn(void)
kkalsi 32:bcfe51898e7c 89 {
kkalsi 32:bcfe51898e7c 90 uint8_t data4[2];
kkalsi 32:bcfe51898e7c 91 currentStateButton = btn.read(); // lecture courante numérique button
kkalsi 30:5881c661b0bb 92
kkalsi 32:bcfe51898e7c 93 if(previousStateButton != currentStateButton) // détection de changement d'état pour bouton
kkalsi 32:bcfe51898e7c 94 {
kkalsi 32:bcfe51898e7c 95 wait_ms(50);
kkalsi 32:bcfe51898e7c 96
kkalsi 32:bcfe51898e7c 97 validationStateButton = btn.read(); // nouvelle lecture apres stabilisation button
kkalsi 32:bcfe51898e7c 98
kkalsi 32:bcfe51898e7c 99 if(currentStateButton == validationStateButton)
kkalsi 32:bcfe51898e7c 100 {
kkalsi 32:bcfe51898e7c 101 if(previousStateButton != currentStateButton)
kkalsi 32:bcfe51898e7c 102 {
kkalsi 32:bcfe51898e7c 103 if(currentStateButton == 1)
kkalsi 32:bcfe51898e7c 104 {
kkalsi 32:bcfe51898e7c 105 data4[0] = 0x01;
kkalsi 32:bcfe51898e7c 106 }
kkalsi 32:bcfe51898e7c 107 else
kkalsi 32:bcfe51898e7c 108 {
kkalsi 32:bcfe51898e7c 109 data4[0] = 0x00;
kkalsi 32:bcfe51898e7c 110 }
kkalsi 32:bcfe51898e7c 111 transmisson(data4, 0x00, 0x0F, 0x10);
kkalsi 32:bcfe51898e7c 112 }
kkalsi 32:bcfe51898e7c 113 }
kkalsi 32:bcfe51898e7c 114 }
kkalsi 32:bcfe51898e7c 115 previousStateButton = validationStateButton; // mise a jour de l'état précédente button 1
kkalsi 32:bcfe51898e7c 116 }
kkalsi 32:bcfe51898e7c 117
kkalsi 32:bcfe51898e7c 118 void initialisation_xbee(void)
kkalsi 32:bcfe51898e7c 119 {
kkalsi 32:bcfe51898e7c 120 xbee_routeur.baud(9600); //set baud rate
kkalsi 32:bcfe51898e7c 121 rst1 = 0; // xbee reset
kkalsi 32:bcfe51898e7c 122 wait_ms(400);
kkalsi 32:bcfe51898e7c 123 rst1 = 1;
kkalsi 32:bcfe51898e7c 124 xbee_routeur.printf("+++");
kkalsi 32:bcfe51898e7c 125 wait_ms(500);
kkalsi 32:bcfe51898e7c 126 }
kkalsi 32:bcfe51898e7c 127
kkalsi 32:bcfe51898e7c 128 void transmisson(uint8_t data[], uint8_t length_MSB, uint8_t length_LSB, uint8_t API_frame_name)
kkalsi 32:bcfe51898e7c 129 {
kkalsi 32:bcfe51898e7c 130 int sum = 0;
kkalsi 32:bcfe51898e7c 131
kkalsi 32:bcfe51898e7c 132 xbee_routeur.putc(0x7E); // start delimiter
kkalsi 32:bcfe51898e7c 133 xbee_routeur.putc(length_MSB); // MSB length
kkalsi 32:bcfe51898e7c 134 xbee_routeur.putc(length_LSB); // LSB length
kkalsi 32:bcfe51898e7c 135 xbee_routeur.putc(API_frame_name); // API frame name
kkalsi 32:bcfe51898e7c 136 xbee_routeur.putc(0x01); // Frame Id
kkalsi 32:bcfe51898e7c 137 xbee_routeur.putc(0x00); // 64-bit address (broadcast)
kkalsi 32:bcfe51898e7c 138 xbee_routeur.putc(0x00); //
kkalsi 32:bcfe51898e7c 139 xbee_routeur.putc(0x00); //
kkalsi 32:bcfe51898e7c 140 xbee_routeur.putc(0x00); //
kkalsi 32:bcfe51898e7c 141 xbee_routeur.putc(0x00); //
kkalsi 32:bcfe51898e7c 142 xbee_routeur.putc(0x00); //
kkalsi 32:bcfe51898e7c 143 xbee_routeur.putc(0x00); //
kkalsi 32:bcfe51898e7c 144 xbee_routeur.putc(0x00); //
kkalsi 32:bcfe51898e7c 145 xbee_routeur.putc(0xFF); // 16-bit address (broadcast)
kkalsi 32:bcfe51898e7c 146 xbee_routeur.putc(0xFE); // 16-bit address (broadcast)
kkalsi 32:bcfe51898e7c 147 xbee_routeur.putc(0x00); // Broadcast radius
kkalsi 32:bcfe51898e7c 148 xbee_routeur.putc(0x00); // Options
kkalsi 32:bcfe51898e7c 149
kkalsi 32:bcfe51898e7c 150 uint16_t length = length_MSB;
kkalsi 32:bcfe51898e7c 151 length = (length << 8) + length_LSB;
kkalsi 32:bcfe51898e7c 152 //pc.printf("length : %x\n\r",length);
kkalsi 32:bcfe51898e7c 153
kkalsi 32:bcfe51898e7c 154 for (int i = 0 ; i < length - 14; i++)
kkalsi 32:bcfe51898e7c 155 {
kkalsi 32:bcfe51898e7c 156 xbee_routeur.putc(data[i]); // API frame name
kkalsi 32:bcfe51898e7c 157 //pc.printf("data %d : %x\n\r",i,data[i]);
kkalsi 32:bcfe51898e7c 158 sum = sum + data[i];
kkalsi 30:5881c661b0bb 159 }
kkalsi 30:5881c661b0bb 160
kkalsi 32:bcfe51898e7c 161 sum = sum + API_frame_name + 0x01 + 0xFF +0xFE;
kkalsi 32:bcfe51898e7c 162 char checksum = (0xFF - (sum & 0xFF));
kkalsi 32:bcfe51898e7c 163 //pc.printf("checksum : %x\n\r",checksum);
kkalsi 32:bcfe51898e7c 164 xbee_routeur.putc(checksum); // checksum
kkalsi 32:bcfe51898e7c 165 }
kkalsi 32:bcfe51898e7c 166
kkalsi 32:bcfe51898e7c 167
kkalsi 32:bcfe51898e7c 168 void envoyer_tramme(char commande[], uint8_t data[], uint8_t length_MSB, uint8_t length_LSB, uint8_t API_frame_name)
kkalsi 32:bcfe51898e7c 169 {
kkalsi 32:bcfe51898e7c 170 int sum = 0;
kkalsi 32:bcfe51898e7c 171
kkalsi 32:bcfe51898e7c 172 xbee_routeur.putc(0x7E); // start delimiter
kkalsi 32:bcfe51898e7c 173 xbee_routeur.putc(length_MSB); // MSB length
kkalsi 32:bcfe51898e7c 174 xbee_routeur.putc(length_LSB); // LSB length
kkalsi 32:bcfe51898e7c 175 xbee_routeur.putc(API_frame_name); // API frame name
kkalsi 32:bcfe51898e7c 176 xbee_routeur.putc(0x01); // Frame Id
kkalsi 32:bcfe51898e7c 177 xbee_routeur.putc(commande[0]); // Commande lettre 1
kkalsi 32:bcfe51898e7c 178 xbee_routeur.putc(commande[1]); // Commande lettre 2
kkalsi 32:bcfe51898e7c 179
kkalsi 32:bcfe51898e7c 180 uint16_t length = length_MSB;
kkalsi 32:bcfe51898e7c 181 length = (length << 8) + length_LSB;
kkalsi 32:bcfe51898e7c 182 //pc.printf("length : %x\n\r",length);
kkalsi 32:bcfe51898e7c 183
kkalsi 32:bcfe51898e7c 184 for (int i = 0 ; i < length - 4; i++)
kkalsi 32:bcfe51898e7c 185 {
kkalsi 32:bcfe51898e7c 186 xbee_routeur.putc(data[i]); // API frame name
kkalsi 32:bcfe51898e7c 187 //pc.printf("data %d : %x\n\r",i,data[i]);
kkalsi 32:bcfe51898e7c 188 sum = sum + data[i];
kkalsi 32:bcfe51898e7c 189 }
kkalsi 32:bcfe51898e7c 190
kkalsi 32:bcfe51898e7c 191 sum = sum + API_frame_name + 0x01 + commande[0]+ commande[1];
kkalsi 32:bcfe51898e7c 192 char checksum = (0xFF - (sum & 0xFF));
kkalsi 32:bcfe51898e7c 193 //pc.printf("checksum : %x\n\r",checksum);
kkalsi 32:bcfe51898e7c 194 xbee_routeur.putc(checksum); // checksum
kkalsi 30:5881c661b0bb 195 }
kkalsi 30:5881c661b0bb 196
kkalsi 30:5881c661b0bb 197 void seperatePanId(void)
kkalsi 30:5881c661b0bb 198 {
kkalsi 30:5881c661b0bb 199 panId_LSB = (panId & 0x00FF);
kkalsi 30:5881c661b0bb 200 panId_MSB = ((panId >> 8) & 0x00FF);
kkalsi 30:5881c661b0bb 201 }
kkalsi 27:0f602aca65f1 202
kkalsi 30:5881c661b0bb 203 void ReadFile (void)
kkalsi 30:5881c661b0bb 204 {
kkalsi 30:5881c661b0bb 205 FILE *set = fopen("/local/config.txt", "r"); // Open "setup.txt" on the local file system for read
kkalsi 30:5881c661b0bb 206 fscanf(set,"%x",&panId); // read offset
kkalsi 30:5881c661b0bb 207 fscanf(set,"%s %f",URL,&url); // read gain
kkalsi 30:5881c661b0bb 208 fclose(set);
kkalsi 30:5881c661b0bb 209 }
kkalsi 27:0f602aca65f1 210
kkalsi 32:bcfe51898e7c 211
kkalsi 32:bcfe51898e7c 212
kkalsi 32:bcfe51898e7c 213
kkalsi 32:bcfe51898e7c 214
kkalsi 32:bcfe51898e7c 215
kkalsi 32:bcfe51898e7c 216
kkalsi 32:bcfe51898e7c 217
kkalsi 32:bcfe51898e7c 218
kkalsi 32:bcfe51898e7c 219
kkalsi 32:bcfe51898e7c 220
kkalsi 32:bcfe51898e7c 221
kkalsi 32:bcfe51898e7c 222
kkalsi 27:0f602aca65f1 223
kkalsi 22:706708bc4c1a 224
kkalsi 32:bcfe51898e7c 225
kkalsi 32:bcfe51898e7c 226
kkalsi 32:bcfe51898e7c 227
kkalsi 32:bcfe51898e7c 228
kkalsi 32:bcfe51898e7c 229
kkalsi 32:bcfe51898e7c 230
kkalsi 32:bcfe51898e7c 231
kkalsi 32:bcfe51898e7c 232
kkalsi 32:bcfe51898e7c 233
kkalsi 32:bcfe51898e7c 234
kkalsi 32:bcfe51898e7c 235
kkalsi 32:bcfe51898e7c 236
kkalsi 32:bcfe51898e7c 237
kkalsi 22:706708bc4c1a 238
kkalsi 26:523ac79471d8 239 // SPI COMMUNICATION
kkalsi 26:523ac79471d8 240 /*
kkalsi 3:8494c3f7108d 241 int main() {
vincentlabbe 25:16a041dd21db 242
vincentlabbe 17:c463c5a434ec 243 float x, y, z ;
kkalsi 15:b4b2e73faefb 244 MMA8452Q acc(p9,p10,0x1d); // acceleration object
vincentlabbe 25:16a041dd21db 245
kkalsi 26:523ac79471d8 246 cs = 0; //Clear display SPI
kkalsi 26:523ac79471d8 247 wait(0.1);
kkalsi 26:523ac79471d8 248 spi.write(0x76); // Clear display
kkalsi 26:523ac79471d8 249 cs = 1;
kkalsi 26:523ac79471d8 250 wait(0.1);
kkalsi 26:523ac79471d8 251 cs = 1;
vincentlabbe 25:16a041dd21db 252
kkalsi 26:523ac79471d8 253 while (true) {
vincentlabbe 25:16a041dd21db 254 x = acc.getAccX() ;
vincentlabbe 17:c463c5a434ec 255 y = acc.getAccY() ;
vincentlabbe 17:c463c5a434ec 256 z = acc.getAccZ() ;
vincentlabbe 19:992f183385e8 257 printf("X[%.3f] Y[%.3f] Z[%.3f]\n",x, y, z) ;
kkalsi 9:f36f1506a840 258 wait(0.1);
vincentlabbe 13:64137db317ab 259
vincentlabbe 25:16a041dd21db 260 int X = x * 1000; //Pour enlever floating point et garder une précision
vincentlabbe 19:992f183385e8 261 int Y = y * 1000;
vincentlabbe 19:992f183385e8 262 int Z = z * 1000;
kkalsi 18:171cb8d2f243 263
vincentlabbe 25:16a041dd21db 264 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 265
vincentlabbe 19:992f183385e8 266 pc.printf("avant acos = %d", angle);
kkalsi 18:171cb8d2f243 267
vincentlabbe 25:16a041dd21db 268 float ratioZaccel = angle/1000.0; //Remettre en floating point pour acos
vincentlabbe 25:16a041dd21db 269 int resultatRAD = 500*acos((ratioZaccel)); //Reponse en RAD
vincentlabbe 25:16a041dd21db 270
vincentlabbe 25:16a041dd21db 271 pc.printf("valeur rad new= %d", resultatRAD);
vincentlabbe 25:16a041dd21db 272 int degree = resultatRAD * 18000/31400; //Tranfo degree
kkalsi 18:171cb8d2f243 273 pc.printf("valeur deg new = %d", degree);
vincentlabbe 25:16a041dd21db 274 pc.printf("valeur deg new = %d", degree);
vincentlabbe 25:16a041dd21db 275
vincentlabbe 25:16a041dd21db 276 // extracting digits
vincentlabbe 25:16a041dd21db 277 int digit;
vincentlabbe 16:0b58c14b639d 278 int digits[4] = {0,0,0,0};
kkalsi 15:b4b2e73faefb 279 int i = 0;
vincentlabbe 25:16a041dd21db 280 while(degree > 0) {
vincentlabbe 25:16a041dd21db 281 digit = degree % 10; //to get the right most digit
vincentlabbe 25:16a041dd21db 282 digits[i]=digit;
vincentlabbe 25:16a041dd21db 283 pc.printf("digit %d = %d, degree int: %d", i, digits[i], degree);
vincentlabbe 25:16a041dd21db 284 degree /= 10; //reduce the number by one digit
kkalsi 15:b4b2e73faefb 285 ++i;
kkalsi 15:b4b2e73faefb 286 }
kkalsi 15:b4b2e73faefb 287
kkalsi 26:523ac79471d8 288 spi.write(0x77); // Decimal control command // Pour la communication SPI
vincentlabbe 17:c463c5a434ec 289 cs = 1;
vincentlabbe 25:16a041dd21db 290 wait(0.01);
vincentlabbe 17:c463c5a434ec 291 cs = 0;
vincentlabbe 25:16a041dd21db 292 spi.write(0x04);// Turn on decimal
vincentlabbe 17:c463c5a434ec 293 cs = 1;
vincentlabbe 17:c463c5a434ec 294 wait(0.01);
kkalsi 10:386a3a12f3cf 295 cs = 0;
vincentlabbe 25:16a041dd21db 296 spi.write(digits[3]);
vincentlabbe 16:0b58c14b639d 297 cs = 1;
vincentlabbe 17:c463c5a434ec 298 wait(0.01);
vincentlabbe 16:0b58c14b639d 299 cs = 0;
vincentlabbe 25:16a041dd21db 300 spi.write(digits[2]);
vincentlabbe 16:0b58c14b639d 301 cs = 1;
vincentlabbe 17:c463c5a434ec 302 wait(0.01);
vincentlabbe 16:0b58c14b639d 303 cs = 0;
vincentlabbe 25:16a041dd21db 304 spi.write(digits[1]);
vincentlabbe 16:0b58c14b639d 305 cs = 1;
vincentlabbe 25:16a041dd21db 306 wait(0.01);
vincentlabbe 25:16a041dd21db 307 cs = 0;
vincentlabbe 25:16a041dd21db 308 spi.write(digits[0]);
vincentlabbe 25:16a041dd21db 309 cs = 1;
vincentlabbe 25:16a041dd21db 310 */
kkalsi 26:523ac79471d8 311 /* Test
kkalsi 26:523ac79471d8 312 cs = 0;
vincentlabbe 17:c463c5a434ec 313 wait(0.1);
vincentlabbe 25:16a041dd21db 314 spi.write(0x5);
vincentlabbe 25:16a041dd21db 315 cs = 1;
kkalsi 26:523ac79471d8 316 */
vincentlabbe 25:16a041dd21db 317 // }
kkalsi 26:523ac79471d8 318 //}
kkalsi 21:74482f23c8fe 319
kkalsi 21:74482f23c8fe 320
kkalsi 21:74482f23c8fe 321
kkalsi 26:523ac79471d8 322 // UART COMMUNICATION
kkalsi 26:523ac79471d8 323 /*
kkalsi 26:523ac79471d8 324 void UARTInit()
kkalsi 26:523ac79471d8 325 {
kkalsi 26:523ac79471d8 326 uint16_t usFdiv;
kkalsi 26:523ac79471d8 327
kkalsi 26:523ac79471d8 328 LPC_SC->PCONP |= (1 << 25); // Power up the UART3 it's disabled on powerup.
kkalsi 26:523ac79471d8 329
kkalsi 26:523ac79471d8 330 LPC_PINCON->PINSEL1 |= (3 << 18); // Pin P0.25 used as TXD0 (Com0) // Enable the pins on the device to use UART3
kkalsi 26:523ac79471d8 331 LPC_PINCON->PINSEL1 |= (3 << 20); // Pin P0.26 used as RXD0 (Com0)
kkalsi 26:523ac79471d8 332
kkalsi 26:523ac79471d8 333 LPC_SC->PCLKSEL1 &= ~(3 << 18); // Clean all to 0 // Setup the PCLK for UART3
kkalsi 26:523ac79471d8 334 LPC_SC->PCLKSEL1 |= (1 << 18); // PCLK = CCLK
kkalsi 21:74482f23c8fe 335
kkalsi 26:523ac79471d8 336 LPC_UART3->LCR = 0x83; // 0000 0000 1000 0011 // Word select 8-bit character length and set DLAB
kkalsi 26:523ac79471d8 337
kkalsi 26:523ac79471d8 338 usFdiv = (SystemCoreClock / (16*9600)); //Baud rate calculation
kkalsi 26:523ac79471d8 339 LPC_UART3->DLM = usFdiv / 256;
kkalsi 26:523ac79471d8 340 LPC_UART3->DLL = usFdiv % 256;
kkalsi 26:523ac79471d8 341
kkalsi 26:523ac79471d8 342 LPC_UART3->FCR = 0x7; // Enable and reset UART3 FIFOs.
kkalsi 26:523ac79471d8 343
kkalsi 26:523ac79471d8 344 LPC_UART3->LCR &= ~(1 << 7); // Clear DLAB
kkalsi 26:523ac79471d8 345 }
kkalsi 26:523ac79471d8 346
kkalsi 26:523ac79471d8 347 char UART3Transmit(int out)
kkalsi 26:523ac79471d8 348 {
kkalsi 26:523ac79471d8 349 LPC_UART3 -> THR = out;
kkalsi 26:523ac79471d8 350 while(! (LPC_UART3->LSR & (0x01 << 0x06)));
kkalsi 26:523ac79471d8 351
kkalsi 26:523ac79471d8 352 return 1;
kkalsi 26:523ac79471d8 353 }
kkalsi 26:523ac79471d8 354
kkalsi 26:523ac79471d8 355 int main() {
kkalsi 26:523ac79471d8 356
kkalsi 26:523ac79471d8 357 UARTInit();
kkalsi 26:523ac79471d8 358
kkalsi 26:523ac79471d8 359 float x, y, z ;
kkalsi 26:523ac79471d8 360
kkalsi 26:523ac79471d8 361 MMA8452Q acc(p9,p10,0x1d); // acceleration object
kkalsi 26:523ac79471d8 362
kkalsi 26:523ac79471d8 363 UART3Transmit(0x76); // Clear display UART
kkalsi 26:523ac79471d8 364 while (true) {
kkalsi 26:523ac79471d8 365
kkalsi 26:523ac79471d8 366 x = acc.getAccX() ;
kkalsi 26:523ac79471d8 367 y = acc.getAccY() ;
kkalsi 26:523ac79471d8 368 z = acc.getAccZ() ;
kkalsi 26:523ac79471d8 369 printf("X[%.3f] Y[%.3f] Z[%.3f]\n",x, y, z) ;
kkalsi 26:523ac79471d8 370 wait(0.1);
kkalsi 26:523ac79471d8 371
kkalsi 26:523ac79471d8 372 int X = x * 1000; //Pour enlever floating point et garder une précision
kkalsi 26:523ac79471d8 373 int Y = y * 1000;
kkalsi 26:523ac79471d8 374 int Z = z * 1000;
kkalsi 26:523ac79471d8 375
kkalsi 26:523ac79471d8 376 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 377
kkalsi 26:523ac79471d8 378 pc.printf("avant acos = %d", angle);
kkalsi 26:523ac79471d8 379
kkalsi 26:523ac79471d8 380 float ratioZaccel = angle/1000.0; //Remettre en floating point pour acos
kkalsi 26:523ac79471d8 381 int resultatRAD = 500*acos((ratioZaccel)); //Reponse en RAD
kkalsi 26:523ac79471d8 382
kkalsi 26:523ac79471d8 383 pc.printf("valeur rad new= %d", resultatRAD);
kkalsi 26:523ac79471d8 384 int degree = resultatRAD * 18000/31400; //Tranfo degree
kkalsi 26:523ac79471d8 385 pc.printf("valeur deg new = %d", degree);
kkalsi 26:523ac79471d8 386
kkalsi 26:523ac79471d8 387 pc.printf("valeur deg new = %d", degree);
kkalsi 26:523ac79471d8 388
kkalsi 26:523ac79471d8 389
kkalsi 26:523ac79471d8 390 int digit; // extracting digits
kkalsi 26:523ac79471d8 391 int digits[4] = {0,0,0,0};
kkalsi 26:523ac79471d8 392 int i = 0;
kkalsi 26:523ac79471d8 393 while(degree > 0) {
kkalsi 26:523ac79471d8 394 digit = degree % 10; //to get the right most digit
kkalsi 26:523ac79471d8 395 digits[i]=digit;
kkalsi 26:523ac79471d8 396 pc.printf("digit %d = %d, degree int: %d", i, digits[i], degree);
kkalsi 26:523ac79471d8 397 degree /= 10; //reduce the number by one digit
kkalsi 26:523ac79471d8 398 ++i;
kkalsi 26:523ac79471d8 399 }
kkalsi 26:523ac79471d8 400
kkalsi 26:523ac79471d8 401 UART3Transmit(0x77); // Decimal control command // Pour la communication UART
kkalsi 26:523ac79471d8 402 UART3Transmit(0x04);// Turn on decimal
kkalsi 26:523ac79471d8 403
kkalsi 26:523ac79471d8 404 UART3Transmit(digits[3]);
kkalsi 26:523ac79471d8 405 UART3Transmit(digits[2]);
kkalsi 26:523ac79471d8 406 UART3Transmit(digits[1]);
kkalsi 26:523ac79471d8 407 UART3Transmit(digits[0]); //UART3Transmit(0xA5);
kkalsi 26:523ac79471d8 408 }
kkalsi 26:523ac79471d8 409 }
kkalsi 26:523ac79471d8 410 */
kkalsi 26:523ac79471d8 411
kkalsi 26:523ac79471d8 412
kkalsi 26:523ac79471d8 413 /* // communication I2C
kkalsi 3:8494c3f7108d 414 Serial pc(USBTX, USBRX); // tx, rx
vincentlabbe 25:16a041dd21db 415 I2C i2c(p9,p10);
vincentlabbe 25:16a041dd21db 416
kkalsi 2:42408ce8f4ae 417 int main() {
vincentlabbe 25:16a041dd21db 418 i2c.frequency(100000);
vincentlabbe 25:16a041dd21db 419 char cmd[2] = {0,0};
vincentlabbe 25:16a041dd21db 420 int addr = 0x5A;
vincentlabbe 25:16a041dd21db 421 int data = 0xA4;
vincentlabbe 25:16a041dd21db 422 cmd[0] = addr;
vincentlabbe 25:16a041dd21db 423 cmd[1] = data;
vincentlabbe 25:16a041dd21db 424
vincentlabbe 25:16a041dd21db 425 while(1){
vincentlabbe 25:16a041dd21db 426 i2c.write(0x3A,cmd,2);
vincentlabbe 25:16a041dd21db 427 wait_ms(5);
kkalsi 2:42408ce8f4ae 428 }
vincentlabbe 25:16a041dd21db 429 }
vincentlabbe 25:16a041dd21db 430 */
kkalsi 26:523ac79471d8 431 // I2C write
kkalsi 26:523ac79471d8 432 //i2c.frequency(100000);
kkalsi 26:523ac79471d8 433 //int cmd[0] = 0x0D;
kkalsi 26:523ac79471d8 434 //12c.write(addr,cmd,1,true);
kkalsi 26:523ac79471d8 435 //i2c.read(addr,cmd,1);
kkalsi 26:523ac79471d8 436
kkalsi 26:523ac79471d8 437 /* // communication UART
kkalsi 2:42408ce8f4ae 438 Serial pc(USBTX, USBRX); // tx, rx
kkalsi 22:706708bc4c1a 439 Serial mc(p9,p10);
kkalsi 2:42408ce8f4ae 440 int main() {
kkalsi 2:42408ce8f4ae 441
kkalsi 22:706708bc4c1a 442 int nombre;
kkalsi 2:42408ce8f4ae 443 pc.printf("Entrez un nombre de 4 chiffres : ");
kkalsi 2:42408ce8f4ae 444 pc.scanf("%d", &nombre);
kkalsi 2:42408ce8f4ae 445 pc.printf("Votre numero entrez est le : %d", nombre);
kkalsi 22:706708bc4c1a 446 //mc.printf(nombre);
kkalsi 22:706708bc4c1a 447 mc.putc(nombre);
kkalsi 2:42408ce8f4ae 448 }
kkalsi 2:42408ce8f4ae 449 */
simon 0:fb6bbc10ffa0 450
kkalsi 2:42408ce8f4ae 451 /*
kkalsi 26:523ac79471d8 452 DigitalOut myled(LED3);
simon 0:fb6bbc10ffa0 453
simon 0:fb6bbc10ffa0 454 int main() {
simon 0:fb6bbc10ffa0 455 while(1) {
simon 0:fb6bbc10ffa0 456 myled = 1;
simon 0:fb6bbc10ffa0 457 wait(0.2);
simon 0:fb6bbc10ffa0 458 myled = 0;
simon 0:fb6bbc10ffa0 459 wait(0.2);
simon 0:fb6bbc10ffa0 460 }
simon 0:fb6bbc10ffa0 461 }
kkalsi 28:f56de0b0764e 462 */
kkalsi 28:f56de0b0764e 463
kkalsi 28:f56de0b0764e 464 // I2C write
kkalsi 28:f56de0b0764e 465 /*
kkalsi 28:f56de0b0764e 466 I2C i2c( p28, p26 ); // sda, scl
kkalsi 28:f56de0b0764e 467
kkalsi 28:f56de0b0764e 468 int main() {
kkalsi 28:f56de0b0764e 469 char data[3];
kkalsi 28:f56de0b0764e 470
kkalsi 28:f56de0b0764e 471 data[0] = 0x16;
kkalsi 28:f56de0b0764e 472 data[1] = 0x55;
kkalsi 28:f56de0b0764e 473 data[2] = 0x55;
kkalsi 28:f56de0b0764e 474
kkalsi 28:f56de0b0764e 475 i2c.write( 0xC0, data, 3 ); //0xC0 is slave adress
kkalsi 28:f56de0b0764e 476 }*/
kkalsi 28:f56de0b0764e 477
kkalsi 28:f56de0b0764e 478 // I2C Read
kkalsi 28:f56de0b0764e 479 /*
kkalsi 28:f56de0b0764e 480 short read_sensor_lower_8bit( void )
kkalsi 28:f56de0b0764e 481 {
kkalsi 28:f56de0b0764e 482 char v;
kkalsi 28:f56de0b0764e 483 char cmd;
kkalsi 28:f56de0b0764e 484
kkalsi 28:f56de0b0764e 485 cmd = 0x05;
kkalsi 28:f56de0b0764e 486
kkalsi 28:f56de0b0764e 487 i2c.write( 0x88, &cmd, 1 );
kkalsi 28:f56de0b0764e 488 i2c.read( 0x88, &v, 1 );
kkalsi 28:f56de0b0764e 489
kkalsi 28:f56de0b0764e 490 return( v );
kkalsi 28:f56de0b0764e 491 }
kkalsi 28:f56de0b0764e 492 */
kkalsi 28:f56de0b0764e 493
kkalsi 28:f56de0b0764e 494 /*
kkalsi 28:f56de0b0764e 495 int main() {
kkalsi 28:f56de0b0764e 496 set_time(1256729737); // Set RTC time to Wed, 28 Oct 2009 11:35:37
kkalsi 28:f56de0b0764e 497 }*/
kkalsi 28:f56de0b0764e 498
kkalsi 28:f56de0b0764e 499 /*
kkalsi 28:f56de0b0764e 500 int main() {
kkalsi 28:f56de0b0764e 501 while(1) {
kkalsi 28:f56de0b0764e 502 time_t seconds = time(NULL);
kkalsi 28:f56de0b0764e 503
kkalsi 28:f56de0b0764e 504 printf("Time as seconds since January 1, 1970 = %d\n", seconds);
kkalsi 28:f56de0b0764e 505
kkalsi 28:f56de0b0764e 506 printf("Time as a basic string = %s", ctime(&seconds));
kkalsi 28:f56de0b0764e 507
kkalsi 28:f56de0b0764e 508 char buffer[32];
kkalsi 28:f56de0b0764e 509 strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds));
kkalsi 28:f56de0b0764e 510 printf("Time as a custom formatted string = %s", buffer);
kkalsi 28:f56de0b0764e 511
kkalsi 28:f56de0b0764e 512 wait(1);
kkalsi 28:f56de0b0764e 513 }
kkalsi 28:f56de0b0764e 514 }*/
kkalsi 28:f56de0b0764e 515 /*
kkalsi 28:f56de0b0764e 516 int main() {
kkalsi 28:f56de0b0764e 517
kkalsi 28:f56de0b0764e 518 // get the current time from the terminal
kkalsi 28:f56de0b0764e 519 struct tm t;
kkalsi 28:f56de0b0764e 520 printf("Enter current date and time:\n");
kkalsi 28:f56de0b0764e 521 printf("YYYY MM DD HH MM SS[enter]\n");
kkalsi 28:f56de0b0764e 522 scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday
kkalsi 28:f56de0b0764e 523 , &t.tm_hour, &t.tm_min, &t.tm_sec);
kkalsi 28:f56de0b0764e 524
kkalsi 28:f56de0b0764e 525 // adjust for tm structure required values
kkalsi 28:f56de0b0764e 526 t.tm_year = t.tm_year - 1900;
kkalsi 28:f56de0b0764e 527 t.tm_mon = t.tm_mon - 1;
kkalsi 28:f56de0b0764e 528
kkalsi 28:f56de0b0764e 529 // set the time
kkalsi 28:f56de0b0764e 530 set_time(mktime(&t));
kkalsi 28:f56de0b0764e 531
kkalsi 28:f56de0b0764e 532 // display the time
kkalsi 28:f56de0b0764e 533 while(1) {
kkalsi 28:f56de0b0764e 534 time_t seconds = time(NULL);
kkalsi 28:f56de0b0764e 535 printf("Time as a basic string = %s", ctime(&seconds));
kkalsi 28:f56de0b0764e 536 wait(1);
kkalsi 28:f56de0b0764e 537 }
kkalsi 28:f56de0b0764e 538 }*/