gbgfa
Dependencies: mbed-rtos mbed EthernetInterface WebSocketClient
Diff: main.cpp
- Revision:
- 2:63e05b3b6938
- Parent:
- 1:446da73e1118
- Child:
- 3:889e47988154
--- a/main.cpp Sun Feb 12 22:46:17 2017 +0000 +++ b/main.cpp Mon Feb 13 18:38:48 2017 +0000 @@ -1,22 +1,28 @@ #include "mbed.h" #include "rtos.h" +#include "EthernetInterface.h" LocalFileSystem local("local"); DigitalOut led1(LED1); +DigitalOut led4(LED4); + DigitalOut reset(p8); RawSerial xbee(p13, p14); RawSerial pc(USBTX, USBRX); -Thread* thread1; -Thread* thread2; -Thread* thread3; +Thread* receptionThread; +Thread* processingThread; +Thread* ledThread; +Thread* ethernetReceptionThread; + +TCPSocketConnection sock; char LED_Toggle[] = {0x7E, 0x00, 0x10, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x44, 0x30, 0x00, 0x25}; //Change index 13 & 14 & 18 & 19 -char AT_command[] = {0x7E, 0x00, 0x06, 0x09, 0x01, 0x49 , 0x44, 0x00, 0x00, 0x00}; // +DATA + CS (7 & 8) +char AT_ID[] = {0x7E, 0x00, 0x06, 0x09, 0x01, 0x49 , 0x44, 0x00, 0x00, 0x00}; // +DATA + CS (7 & 8) const char AT_WR[] = {0x7E, 0x00, 0x04, 0x09, 0x01, 0x57, 0x52, 0x4C}; const char AT_AC[] = {0x7E, 0x00, 0x04, 0x09, 0x01, 0x41, 0x43, 0x71}; @@ -43,7 +49,20 @@ return 0xFF - cs; } -void hotdog1(){ +int traitementAcc(char msb, char lsb){ + int val = msb > 127 ? 0xFFFFF000 | (msb << 4) : msb << 4; + + // Ajout des LSB + val += lsb >> 4; + + val = val > 2047 ? 2048 - val : val; + val = val > 1024 ? 1024 : val; + val = val < -1024 ? -1024 : val; + + return val; +} + +void reception(){ while(1) { message* msg = mPool.alloc(); @@ -51,7 +70,7 @@ if(msg->msg[0] == 0x7E){ msg->msg[1] = xbee.getc(); - msg->msg[2] = xbee.getc(); + msg->msg[2] = xbee.getc(); for (int i = 3;i < msg->msg[2] + 4;i++){ msg->msg[i] = xbee.getc(); @@ -63,7 +82,7 @@ } } -void traitement() { +void processing() { while(1) { message* msg = (message*)queue.get().value.p; @@ -83,13 +102,42 @@ pc.printf("New address: %02x %02x", addresses[addressCounter].ah, addresses[addressCounter].al); addressCounter++; } + + char data[7]; + //pc.printf("%02x ", msg->msg[15]); + for(int i = 15; i < msg->msg[2] + 3;i++){ + data[i - 15] = msg->msg[i]; + } + + switch(data[0]){ + case 0x00: + char response[] = "Etat du bouton: "; + if (data[1] == 0x00){ + response[16] = '0'; + } else if (data[1] == 0x01){ + response[16] = '1'; + } + sock.send_all(response, 17); + pc.printf("Sending to server: %s\r\n", response); + break; + case 0x01: + int x = traitementAcc(data[1], data[2]); + int y = traitementAcc(data[3], data[4]); + int z = traitementAcc(data[5], data[6]); + char out[128]; + sprintf(out, "Accelerometre [x: %d, y: %d, z: %d]", x,y,z); + + sock.send_all(out, 128); + pc.printf("Sending to server: %s\r\n", out); + break; + } + /* - pc.printf("%02x ", msg->msg[15]); - for(int i = 15; i < msg->msg[2] + 3;i++){ + for(int i = 0; i < msg->msg[2] + 4;i++){ pc.printf("%02x ", msg->msg[i]); } - pc.printf("\r\n"); - */ + pc.printf("\r\n");*/ + } mPool.free(msg); } @@ -105,18 +153,24 @@ LED_Toggle[14] = addresses[i].al; LED_Toggle[18] = high ? 0x05 : 0x04; LED_Toggle[19] = checksum(LED_Toggle, sizeof(LED_Toggle)); - high = !high; - led1 = !led1; for (int j = 0; j < sizeof(LED_Toggle);j++){ xbee.putc(LED_Toggle[j]); - } + } } + led1 = !led1; + high = !high; } } void LEDSignal(){ - thread3->signal_set(0x1); + ledThread->signal_set(0x1); +} + +void receiveEthernet(){ + char reception[256]; + sock.receive_all(reception, 256); + //pc.printf("Received from server: %s", reception); } int main() { @@ -139,18 +193,18 @@ buff[0]=(pan>>8)&0xff; buff[1]=(pan)&0xff; - AT_command[7] = buff[0]; - AT_command[8] = buff[1]; + AT_ID[7] = buff[0]; + AT_ID[8] = buff[1]; - pc.printf("PAN: %02x%02x", AT_command[7],AT_command[8]); + pc.printf("PAN: %02x%02x", AT_ID[7],AT_ID[8]); - char cs = checksum(AT_command, sizeof(AT_command)); + char cs = checksum(AT_ID, sizeof(AT_ID)); pc.printf("CS: %02x", cs); - AT_command[9] = cs; + AT_ID[9] = cs; - for(char i = 0;i<sizeof(AT_command);i++){ - xbee.putc(AT_command[i]); + for(char i = 0;i<sizeof(AT_ID);i++){ + xbee.putc(AT_ID[i]); } for(char i = 0;i<sizeof(AT_WR);i++){ @@ -159,26 +213,41 @@ for(char i = 0;i<sizeof(AT_AC);i++){ xbee.putc(AT_AC[i]); - } + } + + /* - Thread localThread1; - thread1 = &localThread1; - thread1->start(&hotdog1);*/ + EthernetInterface eth; + eth.init(); //Use DHCP + eth.connect(); + printf("IP Address is %s\r\n", eth.getIPAddress()); + + while(sock.connect(url, 8000)){}; + */ + + Thread localReceptionThread; + receptionThread = &localReceptionThread; + receptionThread->start(&reception); addresses[0].ah = 0x8e; addresses[0].al = 0x69; addressCounter++; Ticker horloge; - horloge.attach(&LEDSignal, 1.0); - /* - Thread localThread2; - thread2 = &localThread2; - thread2->start(&traitement);*/ + horloge.attach(&LEDSignal, 0.5); + + Thread localProcessingThread; + processingThread = &localProcessingThread; + processingThread->start(&processing); - Thread localThread3; - thread3 = &localThread3; - thread3->start(&flashLED); + Thread localLedThread; + ledThread = &localLedThread; + ledThread->start(&flashLED); + + Thread localEthernetReceptionThread; + ethernetReceptionThread = &localEthernetReceptionThread; + ethernetReceptionThread->start(&receiveEthernet); + while(1) { } }