earthquake finder

Dependencies:   C12832 EthernetInterface MQTT mbed-rtos mbed picojson

Files at this revision

API Documentation at this revision

Comitter:
co838_ab981
Date:
Mon May 02 14:59:41 2016 +0000
Commit message:
earthquake finder

Changed in this revision

C12832.lib Show annotated file Show diff for this revision Revisions of this file
EthernetInterface.lib Show annotated file Show diff for this revision Revisions of this file
MQTT.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
picojson.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/C12832.lib	Mon May 02 14:59:41 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/askksa12543/code/C12832/#990d5eec2ef6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EthernetInterface.lib	Mon May 02 14:59:41 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/EthernetInterface/#4d7bff17a592
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MQTT.lib	Mon May 02 14:59:41 2016 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/co838_ab981/code/MQTT/#76953d776a52
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon May 02 14:59:41 2016 +0000
@@ -0,0 +1,227 @@
+/* Include mbed library */
+#include "mbed.h"
+
+/* Include LCD library */
+#include "C12832.h"
+
+/* include MQTT library */
+#include "MQTTEthernet.h"
+#include "MQTTClient.h"
+
+/* Include Json Library */
+#include "picojson.h"
+
+
+/* Communication with the host (serial over USB) */
+Serial host (USBTX, USBRX);   
+
+/* LED on main card */
+DigitalOut gpo(D0);
+DigitalOut ledR(LED_RED);
+DigitalOut ledG(LED_GREEN);
+
+
+/* LED on shield card */
+PwmOut red(D5);
+PwmOut green(D9);
+
+/* LCD on the shield (128x32) */
+C12832 shlcd (D11, D13, D12, D7, D10);
+
+/* Joystics */
+DigitalIn select(D4);
+
+/* Speaker */
+PwmOut speaker(D6);
+
+static volatile int Check = 0;
+static int err = 0;
+
+/* Put all led off */
+void ledOff()
+{
+    ledR = 1;
+    ledG = 1;  
+    red.write(1.0f);
+    green.write(1.0f);
+}
+
+/* Show hostname and port on lcd */
+void showHostPort(char *host, int port)
+{
+    shlcd.cls();
+    shlcd.locate(40,2);
+    shlcd.printf("Welcome");
+    shlcd.locate(5,10);
+    shlcd.printf("Connecting to : ");
+    shlcd.locate(5,18);
+    shlcd.printf("%s:%d", host, port);
+    wait(0.2f);
+}
+
+/* Show error msg on lcd */
+void showErrorMsg(int rc)
+{
+    shlcd.cls();
+    shlcd.locate(5,2);
+    shlcd.printf("An error occured,");
+    shlcd.locate(5,10);
+    shlcd.printf("pls restart the application");
+    shlcd.locate(5,18);
+    if (rc == 1)
+        shlcd.printf("Connection fail to the host");
+    else if (rc == 2)
+        shlcd.printf("Client: Invalid information");
+    else
+        shlcd.printf("Fail to subscribe");
+    wait(4.0f);
+}
+
+/* Show subscribe msg on lcd */
+void showSubscribe(char *topic)
+{
+    shlcd.cls();
+    shlcd.locate(40,2);
+    shlcd.printf("Welcome");
+    shlcd.locate(5,10);
+    shlcd.printf("Subscribe to : ");
+    shlcd.locate(5,18);
+    shlcd.printf("%s", topic);
+    wait(1.0f);
+}
+
+/* Show wait for data on lcd */
+void showWaitData()
+{
+    shlcd.cls();
+    shlcd.locate(40,2);
+    shlcd.printf("Welcome");
+    shlcd.locate(15,10);
+    shlcd.printf("Pls wait for data ...");
+}
+
+/* Put on/off the light and active the speaker. (Danger 1 = Higth danger, Danger 3 = Low danger) */
+void danger1()
+{
+    for (float i=2000.0; i<(float)10000.0; i+=(float)50.0) {
+        speaker.period((float)1.0/i);
+        speaker = 0.06;
+        ledR = ledR ? 0 : 1;
+        if (red.read() == 0)
+            red.write(1.0f);
+        else
+            red.write(0.0f);
+        wait(0.03);
+    }
+    speaker=0.0;
+    ledR = 0;
+    red.write(0.0f);
+}
+
+/* Put on/off the light and active the speaker. (Danger 1 = Higth danger, Danger 3 = Low danger) */
+void danger2()
+{
+    for (float i=2000.0; i<(float)10000.0; i+=(float)75.0) {
+        speaker.period((float)1.0/i);
+        speaker = 0.06;
+        ledR = ledR ? 0 : 1;
+        if (green.read() == 0)
+            green.write(1.0f);
+        else
+            green.write(0.0f);
+        if (red.read() == 0)
+            red.write(1.0f);
+        else
+            red.write(0.0f);
+        wait(0.03);
+    }
+    speaker=0.0;
+    ledG = 0;
+    ledR = 0;
+    red.write(0.0f);
+    green.write(0.0f);
+} 
+
+/* Put on/off the light and active the speaker. (Danger 1 = Higth danger, Danger 3 = Low danger) */
+void danger3()
+{
+    for (float i=2000.0; i<(float)10000.0; i+=(float)100.0) {
+        speaker.period((float)1.0/i);
+        speaker = 0.06;
+        ledG = ledG ? 0 : 1;
+        if (green.read() == 0)
+            green.write(1.0f);
+        else
+            green.write(0.0f);
+        wait(0.03);
+    }
+    speaker=0.0;
+    ledG = 0;
+    green.write(0.0f);
+} 
+
+/* Get msg from mqtt server, parse the json, show data on lcd and call the function danger. */
+void messageArrived(MQTT::MessageData& md)
+{
+    MQTT::Message &message = md.message;
+    picojson::value res;
+    string json((char*)message.payload);
+    const char *value = json.c_str();
+    
+    picojson::parse(res, value, value + strlen(value));
+    if (Check == (10 * (int)res.get("nb").get<double>())) {
+        ledOff();
+        return ;
+    }
+    shlcd.cls();
+    shlcd.locate(-4,0);
+    shlcd.printf("%s", res.get("l").get<string>().c_str());
+    shlcd.locate(0,8);
+    shlcd.printf("%s", res.get("t").get<string>().c_str());
+    shlcd.locate(0,16);
+    shlcd.printf("Distance: %s, M: %s", res.get("di").get<string>().c_str(), res.get("m").get<string>().c_str()); 
+    ledOff();
+    if ((int)res.get("da").get<double>() == 1)
+        danger1();
+    else if ((int)res.get("da").get<double>() == 2)
+        danger2();
+    else
+        danger3();
+    Check = 10 * (int)res.get("nb").get<double>();
+}
+
+
+int main()
+{
+    char *topic = "ab981_a5_iot";
+    char *hostname = "test.mosquitto.org";
+    int port = 1883;
+
+    host.baud (38400);                              /* set baud rate */
+    ledOff();
+    showHostPort(hostname, port);
+    MQTTEthernet ipstack = MQTTEthernet();
+    MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
+    if (ipstack.connect(hostname, port) != 0)  /* Connecting to server */
+        showErrorMsg(1);
+    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
+    data.MQTTVersion = 3;
+    data.clientID.cstring = "mbed-a5";
+    data.keepAliveInterval = 20;
+    data.cleansession = 1;     
+    if (client.connect(data) != 0)     /* send data client */
+        showErrorMsg(2);
+    showSubscribe(topic);
+    if (client.subscribe(topic, MQTT::QOS2, messageArrived) != 0)  /* subscribe to channel */
+        showErrorMsg(3);
+    showWaitData();
+    while (!select || err != 1) {
+        client.yield(100);
+    }
+    shlcd.cls();
+    shlcd.locate(40,8);
+    shlcd.printf("Goodbye");
+    client.unsubscribe(topic);
+    client.disconnect();
+    ipstack.disconnect();
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Mon May 02 14:59:41 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-rtos/#ac4f3830f9ff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon May 02 14:59:41 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/082adc85693f
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/picojson.lib	Mon May 02 14:59:41 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mimil/code/picojson/#2bb500b021e2