Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of HelloWorld by
main.cpp@32:bcfe51898e7c, 2017-10-01 (annotated)
- Committer:
- kkalsi
- Date:
- Sun Oct 01 18:28:14 2017 +0000
- Revision:
- 32:bcfe51898e7c
- Parent:
- 30:5881c661b0bb
transmit
Who changed what in which revision?
| User | Revision | Line number | New 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 | }*/ | 
