This software example demonstrates the downlink capabilities of the SIGFOX network.
Dependencies: QW_Sensors mbed
Fork of HelloWorld - QW Development kit by
Diff: main.cpp
- Revision:
- 0:49858c4c3500
- Child:
- 1:897a1b3f0955
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Oct 30 14:10:26 2015 +0000 @@ -0,0 +1,84 @@ +#include "mbed.h" + +DigitalOut LED_0 (PB_6); +DigitalOut LED_1 (PA_7); +DigitalOut LED_2 (PA_6); +DigitalOut LED_3 (PA_5); +InterruptIn SW1(PB_10); +InterruptIn SW2(PA_8); + +Ticker hartbeat; + +typedef struct{ + bool busy; + char button; +} TX_BUTTON; + +TX_BUTTON Button_tx; + +void beat() { + LED_0 = !LED_0; +} + +//Virtual serial port over USB +Serial pc(USBTX, USBRX); +Serial modem(PA_9, PA_10); + +void sw1interrupt(){ + pc.printf("Button 1 pressed, sending sigfox message (command is AT$SF=42 55 54 54 4f 4e 20 31 00 00 00 00,2,0)\n"); + modem.printf("AT$SF=42 55 54 54 4f 4e 20 31 00 00 00 00,2,0\n"); + LED_1 = 0; + wait(0.25); + // Flush the echo of the command: + while(modem.readable()) modem.getc(); + Button_tx.busy = true; + Button_tx.button = 1; +} + +void sw2interrupt(){ + pc.printf("Button 2 pressed, sending sigfox message (command is AT$SF=42 55 54 54 4f 4e 20 32 00 00 00 00,2,0)\n"); + modem.printf("AT$SF=42 55 54 54 4f 4e 20 32 00 00 00 00,2,0\n"); + LED_2 = 0; + wait(0.25); + // Flush the echo of the command: + while(modem.readable()) modem.getc(); + Button_tx.busy = true; + Button_tx.button = 2; +} + +int main() { + + LED_0 = 1; + LED_1 = 1; + LED_2 = 1; + LED_3 = 1; + hartbeat.attach(&beat, 0.5); + Button_tx.busy = false; + Button_tx.button = 0; + SW2.fall(&sw1interrupt); + SW1.fall(&sw2interrupt); + char responsebuffer[2]; + char c; + while(1) { + if(pc.readable()) { + modem.putc(pc.getc()); + } + + if(modem.readable()) { + c = modem.getc(); + responsebuffer[0] = responsebuffer[1]; + responsebuffer[1] = c; + if(Button_tx.busy) + { + if(responsebuffer[0] == 'O' && responsebuffer[1] == 'K' ) + { + // Everything went fine, turn off the LED + Button_tx.busy = false; + if(Button_tx.button == 1) LED_1 = 1; + if(Button_tx.button == 2) LED_2 = 1; + } + } + pc.putc(c); + } + } +}