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.
Dependencies: mbed-rtos mbed Zigbee_communication
main.cpp@9:a788217bbafc, 2017-02-14 (annotated)
- Committer:
- EmileArseneault
- Date:
- Tue Feb 14 16:28:57 2017 +0000
- Revision:
- 9:a788217bbafc
- Parent:
- 6:b54b9c76aaf2
- Child:
- 10:ad02e8725236
Commencement des capteurs
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| EmileArseneault | 2:72db13be6994 | 1 | // Emile Arseneault : arse1503 |
| EmileArseneault | 2:72db13be6994 | 2 | // Raphael Drouin : dror2204 |
| EmileArseneault | 2:72db13be6994 | 3 | |
| EmileArseneault | 2:72db13be6994 | 4 | // Router Node |
| EmileArseneault | 2:72db13be6994 | 5 | |
| ShaolinPoutine | 0:f36ba442dcb2 | 6 | #include "mbed.h" |
| ShaolinPoutine | 0:f36ba442dcb2 | 7 | #define FRAMEDELIMITER 0x7E |
| EmileArseneault | 9:a788217bbafc | 8 | #define RADTODEG 180/3.14159265358979 |
| ShaolinPoutine | 0:f36ba442dcb2 | 9 | #include "rtos.h" |
| ShaolinPoutine | 4:79eb621914e7 | 10 | #include "xbee.h" |
| ShaolinPoutine | 0:f36ba442dcb2 | 11 | |
| ShaolinPoutine | 0:f36ba442dcb2 | 12 | // 4269 |
| ShaolinPoutine | 4:79eb621914e7 | 13 | Mail<char, 250> mymail; |
| ShaolinPoutine | 4:79eb621914e7 | 14 | XBee xbee(p8, p13, p14, &mymail); |
| ShaolinPoutine | 4:79eb621914e7 | 15 | |
| ShaolinPoutine | 0:f36ba442dcb2 | 16 | Serial pc(USBTX, USBRX); |
| ShaolinPoutine | 0:f36ba442dcb2 | 17 | DigitalOut myled(LED1); |
| EmileArseneault | 9:a788217bbafc | 18 | DigitalOut myled2(LED2); |
| EmileArseneault | 9:a788217bbafc | 19 | DigitalIn bouton(p30); |
| EmileArseneault | 9:a788217bbafc | 20 | I2C accel(p28, p27); |
| EmileArseneault | 9:a788217bbafc | 21 | |
| EmileArseneault | 9:a788217bbafc | 22 | Thread *accelerometre_thread; |
| EmileArseneault | 9:a788217bbafc | 23 | Thread *bouton_thread; |
| ShaolinPoutine | 0:f36ba442dcb2 | 24 | |
| ShaolinPoutine | 0:f36ba442dcb2 | 25 | void ReadSerial() |
| ShaolinPoutine | 0:f36ba442dcb2 | 26 | { |
| ShaolinPoutine | 0:f36ba442dcb2 | 27 | // 00 13 A2 00 |
| ShaolinPoutine | 0:f36ba442dcb2 | 28 | // 40 3E 09 63 |
| ShaolinPoutine | 4:79eb621914e7 | 29 | xbee.SendATCommand('S', 'H'); |
| ShaolinPoutine | 4:79eb621914e7 | 30 | xbee.SendATCommand('S', 'L'); |
| ShaolinPoutine | 0:f36ba442dcb2 | 31 | } |
| ShaolinPoutine | 0:f36ba442dcb2 | 32 | |
| EmileArseneault | 2:72db13be6994 | 33 | void InitialisePANID(char PANIDMSB, char PANIDLSB) |
| EmileArseneault | 2:72db13be6994 | 34 | { |
| EmileArseneault | 2:72db13be6994 | 35 | char PanID[2] = {PANIDMSB, PANIDLSB}; |
| EmileArseneault | 2:72db13be6994 | 36 | |
| ShaolinPoutine | 4:79eb621914e7 | 37 | xbee.SendATCommand('I', 'D', &PanID[0], 2); |
| EmileArseneault | 2:72db13be6994 | 38 | } |
| EmileArseneault | 2:72db13be6994 | 39 | |
| ShaolinPoutine | 0:f36ba442dcb2 | 40 | void xbee_reader() |
| ShaolinPoutine | 0:f36ba442dcb2 | 41 | { |
| ShaolinPoutine | 0:f36ba442dcb2 | 42 | while(1) |
| ShaolinPoutine | 0:f36ba442dcb2 | 43 | { |
| ShaolinPoutine | 4:79eb621914e7 | 44 | xbee.InterpretMessage(); |
| ShaolinPoutine | 4:79eb621914e7 | 45 | wait(0.001); |
| ShaolinPoutine | 4:79eb621914e7 | 46 | } |
| ShaolinPoutine | 4:79eb621914e7 | 47 | } |
| ShaolinPoutine | 4:79eb621914e7 | 48 | |
| EmileArseneault | 9:a788217bbafc | 49 | void console_printer() |
| ShaolinPoutine | 4:79eb621914e7 | 50 | { |
| ShaolinPoutine | 4:79eb621914e7 | 51 | while (true) { |
| ShaolinPoutine | 4:79eb621914e7 | 52 | osEvent evt = mymail.get(); |
| ShaolinPoutine | 4:79eb621914e7 | 53 | if (evt.status == osEventMail) |
| ShaolinPoutine | 0:f36ba442dcb2 | 54 | { |
| ShaolinPoutine | 4:79eb621914e7 | 55 | char *c = (char*)evt.value.p; |
| ShaolinPoutine | 4:79eb621914e7 | 56 | pc.putc(*c); |
| ShaolinPoutine | 4:79eb621914e7 | 57 | mymail.free(c); |
| ShaolinPoutine | 0:f36ba442dcb2 | 58 | } |
| ShaolinPoutine | 0:f36ba442dcb2 | 59 | } |
| ShaolinPoutine | 0:f36ba442dcb2 | 60 | } |
| ShaolinPoutine | 0:f36ba442dcb2 | 61 | |
| EmileArseneault | 9:a788217bbafc | 62 | void AccelerometreSetup(int addr_accel) |
| EmileArseneault | 9:a788217bbafc | 63 | { |
| EmileArseneault | 9:a788217bbafc | 64 | char CTRL_REG1[2] = {0x2A, 0}; |
| EmileArseneault | 9:a788217bbafc | 65 | char XYZ_DATA_CFG[2] = {0x0E, 0}; |
| EmileArseneault | 9:a788217bbafc | 66 | |
| EmileArseneault | 9:a788217bbafc | 67 | // Read CTRL_REG1 to set it back with bit 1 = 0 to set in stanby mode |
| EmileArseneault | 9:a788217bbafc | 68 | // Register CTRL_REG1 : 0x2A |
| EmileArseneault | 9:a788217bbafc | 69 | accel.write(addr_accel, CTRL_REG1, 1, true); |
| EmileArseneault | 9:a788217bbafc | 70 | accel.read(addr_accel, &CTRL_REG1[1], 1); |
| EmileArseneault | 9:a788217bbafc | 71 | CTRL_REG1[1] = CTRL_REG1[1] & 0b11111110; |
| EmileArseneault | 9:a788217bbafc | 72 | accel.write(addr_accel, CTRL_REG1, 2); |
| EmileArseneault | 9:a788217bbafc | 73 | pc.printf("CTRL_REG1 STANBY : %i\r\n", CTRL_REG1[1] & 0b11111110); |
| EmileArseneault | 9:a788217bbafc | 74 | |
| EmileArseneault | 9:a788217bbafc | 75 | // Set in +-2g with FS bits |
| EmileArseneault | 9:a788217bbafc | 76 | // Register XYZ_DATA_CFG : 0x0E |
| EmileArseneault | 9:a788217bbafc | 77 | int FS_BITS_mask = 0b11111100; |
| EmileArseneault | 9:a788217bbafc | 78 | accel.write(addr_accel, XYZ_DATA_CFG, 1, true); |
| EmileArseneault | 9:a788217bbafc | 79 | accel.read(addr_accel, &XYZ_DATA_CFG[1], 1); |
| EmileArseneault | 9:a788217bbafc | 80 | XYZ_DATA_CFG[1] = XYZ_DATA_CFG[1] & FS_BITS_mask; |
| EmileArseneault | 9:a788217bbafc | 81 | accel.write(addr_accel, XYZ_DATA_CFG, 2); |
| EmileArseneault | 9:a788217bbafc | 82 | pc.printf("XYZ_DATA_CFG +-2g : %i\r\n", XYZ_DATA_CFG[1] & FS_BITS_mask); |
| EmileArseneault | 9:a788217bbafc | 83 | |
| EmileArseneault | 9:a788217bbafc | 84 | // Read CTRL_REG1 to set it back with bit 1 to set in active mode |
| EmileArseneault | 9:a788217bbafc | 85 | // Register CTRL_REG1 : 0x2A |
| EmileArseneault | 9:a788217bbafc | 86 | accel.write(addr_accel, CTRL_REG1, 1, true); |
| EmileArseneault | 9:a788217bbafc | 87 | accel.read(addr_accel, &CTRL_REG1[1], 1); |
| EmileArseneault | 9:a788217bbafc | 88 | CTRL_REG1[1] = CTRL_REG1[1] | 1; |
| EmileArseneault | 9:a788217bbafc | 89 | accel.write(addr_accel, CTRL_REG1, 2); |
| EmileArseneault | 9:a788217bbafc | 90 | pc.printf("CTRL_REG1 ACTIVE : %i\r\n", CTRL_REG1[1] | 1); |
| EmileArseneault | 9:a788217bbafc | 91 | } |
| EmileArseneault | 9:a788217bbafc | 92 | |
| EmileArseneault | 9:a788217bbafc | 93 | void accelerometre_reader() |
| EmileArseneault | 9:a788217bbafc | 94 | { |
| EmileArseneault | 9:a788217bbafc | 95 | while(1) |
| EmileArseneault | 9:a788217bbafc | 96 | { |
| EmileArseneault | 9:a788217bbafc | 97 | myled2 = 1; |
| EmileArseneault | 9:a788217bbafc | 98 | Thread::signal_wait(1, osWaitForever); |
| EmileArseneault | 9:a788217bbafc | 99 | |
| EmileArseneault | 9:a788217bbafc | 100 | int addr_accel = 0x1D<<1; |
| EmileArseneault | 9:a788217bbafc | 101 | char OUT[7] = {0x01, 0, 0, 0, 0, 0, 0}; |
| EmileArseneault | 9:a788217bbafc | 102 | |
| EmileArseneault | 9:a788217bbafc | 103 | int Z; |
| EmileArseneault | 9:a788217bbafc | 104 | char OUT_Z_MSB; |
| EmileArseneault | 9:a788217bbafc | 105 | char OUT_Z_LSB; |
| EmileArseneault | 9:a788217bbafc | 106 | int Angle; |
| EmileArseneault | 9:a788217bbafc | 107 | |
| EmileArseneault | 9:a788217bbafc | 108 | accel.write(addr_accel, OUT, 1, true); |
| EmileArseneault | 9:a788217bbafc | 109 | accel.read(addr_accel, &OUT[1], 6); |
| EmileArseneault | 9:a788217bbafc | 110 | |
| EmileArseneault | 9:a788217bbafc | 111 | OUT_Z_MSB = OUT[5]; |
| EmileArseneault | 9:a788217bbafc | 112 | OUT_Z_LSB = OUT[6]; |
| EmileArseneault | 9:a788217bbafc | 113 | |
| EmileArseneault | 9:a788217bbafc | 114 | Z = ((int16_t)(OUT_Z_MSB << 8) | OUT_Z_LSB) >> 4; |
| EmileArseneault | 9:a788217bbafc | 115 | |
| EmileArseneault | 9:a788217bbafc | 116 | Angle = (int)(acos(abs(Z)/1024.0)*RADTODEG*100); |
| EmileArseneault | 9:a788217bbafc | 117 | |
| EmileArseneault | 9:a788217bbafc | 118 | myled2 = 0; |
| EmileArseneault | 9:a788217bbafc | 119 | |
| EmileArseneault | 9:a788217bbafc | 120 | pc.printf("Angle : %d\r\n", Angle); |
| EmileArseneault | 9:a788217bbafc | 121 | } |
| EmileArseneault | 9:a788217bbafc | 122 | } |
| EmileArseneault | 9:a788217bbafc | 123 | |
| EmileArseneault | 9:a788217bbafc | 124 | void bouton_reader() |
| EmileArseneault | 9:a788217bbafc | 125 | { |
| EmileArseneault | 9:a788217bbafc | 126 | while(1) |
| EmileArseneault | 9:a788217bbafc | 127 | { |
| EmileArseneault | 9:a788217bbafc | 128 | Thread::signal_wait(1, osWaitForever); |
| EmileArseneault | 9:a788217bbafc | 129 | pc.printf("Bouton : %d\r\n", bouton == 1); |
| EmileArseneault | 9:a788217bbafc | 130 | } |
| EmileArseneault | 9:a788217bbafc | 131 | } |
| EmileArseneault | 9:a788217bbafc | 132 | |
| ShaolinPoutine | 0:f36ba442dcb2 | 133 | void tick() |
| ShaolinPoutine | 0:f36ba442dcb2 | 134 | { |
| EmileArseneault | 9:a788217bbafc | 135 | myled = !myled; |
| EmileArseneault | 9:a788217bbafc | 136 | (*accelerometre_thread).signal_set(1); |
| EmileArseneault | 9:a788217bbafc | 137 | (*bouton_thread).signal_set(1); |
| ShaolinPoutine | 0:f36ba442dcb2 | 138 | } |
| ShaolinPoutine | 0:f36ba442dcb2 | 139 | |
| EmileArseneault | 9:a788217bbafc | 140 | int main() |
| EmileArseneault | 9:a788217bbafc | 141 | { |
| EmileArseneault | 9:a788217bbafc | 142 | int addr_accel = 0x1D<<1; |
| EmileArseneault | 9:a788217bbafc | 143 | |
| ShaolinPoutine | 0:f36ba442dcb2 | 144 | Ticker ticker; |
| ShaolinPoutine | 0:f36ba442dcb2 | 145 | ticker.attach(&tick, 1); |
| EmileArseneault | 9:a788217bbafc | 146 | |
| EmileArseneault | 9:a788217bbafc | 147 | //Ticker accelerometre; |
| EmileArseneault | 9:a788217bbafc | 148 | //Ticker bouton; |
| EmileArseneault | 9:a788217bbafc | 149 | |
| ShaolinPoutine | 1:7b547c552df0 | 150 | pc.printf("\r\nI am router\r\n"); |
| ShaolinPoutine | 4:79eb621914e7 | 151 | |
| ShaolinPoutine | 4:79eb621914e7 | 152 | Thread thread(xbee_reader); |
| EmileArseneault | 9:a788217bbafc | 153 | Thread thread_printer(console_printer); |
| EmileArseneault | 9:a788217bbafc | 154 | Thread thread_accelerometre(accelerometre_reader); |
| EmileArseneault | 9:a788217bbafc | 155 | Thread thread_bouton(bouton_reader); |
| ShaolinPoutine | 0:f36ba442dcb2 | 156 | |
| EmileArseneault | 9:a788217bbafc | 157 | accelerometre_thread = &thread_accelerometre; |
| EmileArseneault | 9:a788217bbafc | 158 | bouton_thread = &thread_bouton; |
| EmileArseneault | 9:a788217bbafc | 159 | |
| EmileArseneault | 9:a788217bbafc | 160 | wait(2); |
| EmileArseneault | 9:a788217bbafc | 161 | AccelerometreSetup(addr_accel); |
| EmileArseneault | 9:a788217bbafc | 162 | //accelerometre.attach(&accelerometre_reader, 1); |
| EmileArseneault | 9:a788217bbafc | 163 | //bouton.attach(&bouton_reader, 1); |
| ShaolinPoutine | 0:f36ba442dcb2 | 164 | ReadSerial(); |
| EmileArseneault | 2:72db13be6994 | 165 | InitialisePANID(0x42, 0x69); |
| ShaolinPoutine | 0:f36ba442dcb2 | 166 | |
| ShaolinPoutine | 0:f36ba442dcb2 | 167 | while(1) { |
| EmileArseneault | 9:a788217bbafc | 168 | |
| ShaolinPoutine | 0:f36ba442dcb2 | 169 | } |
| ShaolinPoutine | 0:f36ba442dcb2 | 170 | } |