APP3 / Mbed 2 deprecated Router_node

Dependencies:   mbed-rtos mbed Zigbee_communication

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?

UserRevisionLine numberNew 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 }