This software example demonstrates the downlink capabilities of the SIGFOX network.

Dependencies:   QW_Sensors mbed

Fork of HelloWorld - QW Development kit by Quicksand micro-electronics

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);
+        }
+    }
+}