earthquake finder
Dependencies: C12832 EthernetInterface MQTT mbed-rtos mbed picojson
main.cpp
00001 /* Include mbed library */ 00002 #include "mbed.h" 00003 00004 /* Include LCD library */ 00005 #include "C12832.h" 00006 00007 /* include MQTT library */ 00008 #include "MQTTEthernet.h" 00009 #include "MQTTClient.h" 00010 00011 /* Include Json Library */ 00012 #include "picojson.h" 00013 00014 00015 /* Communication with the host (serial over USB) */ 00016 Serial host (USBTX, USBRX); 00017 00018 /* LED on main card */ 00019 DigitalOut gpo(D0); 00020 DigitalOut ledR(LED_RED); 00021 DigitalOut ledG(LED_GREEN); 00022 00023 00024 /* LED on shield card */ 00025 PwmOut red(D5); 00026 PwmOut green(D9); 00027 00028 /* LCD on the shield (128x32) */ 00029 C12832 shlcd (D11, D13, D12, D7, D10); 00030 00031 /* Joystics */ 00032 DigitalIn select(D4); 00033 00034 /* Speaker */ 00035 PwmOut speaker(D6); 00036 00037 static volatile int Check = 0; 00038 static int err = 0; 00039 00040 /* Put all led off */ 00041 void ledOff() 00042 { 00043 ledR = 1; 00044 ledG = 1; 00045 red.write(1.0f); 00046 green.write(1.0f); 00047 } 00048 00049 /* Show hostname and port on lcd */ 00050 void showHostPort(char *host, int port) 00051 { 00052 shlcd.cls(); 00053 shlcd.locate(40,2); 00054 shlcd.printf("Welcome"); 00055 shlcd.locate(5,10); 00056 shlcd.printf("Connecting to : "); 00057 shlcd.locate(5,18); 00058 shlcd.printf("%s:%d", host, port); 00059 wait(0.2f); 00060 } 00061 00062 /* Show error msg on lcd */ 00063 void showErrorMsg(int rc) 00064 { 00065 shlcd.cls(); 00066 shlcd.locate(5,2); 00067 shlcd.printf("An error occured,"); 00068 shlcd.locate(5,10); 00069 shlcd.printf("pls restart the application"); 00070 shlcd.locate(5,18); 00071 if (rc == 1) 00072 shlcd.printf("Connection fail to the host"); 00073 else if (rc == 2) 00074 shlcd.printf("Client: Invalid information"); 00075 else 00076 shlcd.printf("Fail to subscribe"); 00077 wait(4.0f); 00078 } 00079 00080 /* Show subscribe msg on lcd */ 00081 void showSubscribe(char *topic) 00082 { 00083 shlcd.cls(); 00084 shlcd.locate(40,2); 00085 shlcd.printf("Welcome"); 00086 shlcd.locate(5,10); 00087 shlcd.printf("Subscribe to : "); 00088 shlcd.locate(5,18); 00089 shlcd.printf("%s", topic); 00090 wait(1.0f); 00091 } 00092 00093 /* Show wait for data on lcd */ 00094 void showWaitData() 00095 { 00096 shlcd.cls(); 00097 shlcd.locate(40,2); 00098 shlcd.printf("Welcome"); 00099 shlcd.locate(15,10); 00100 shlcd.printf("Pls wait for data ..."); 00101 } 00102 00103 /* Put on/off the light and active the speaker. (Danger 1 = Higth danger, Danger 3 = Low danger) */ 00104 void danger1() 00105 { 00106 for (float i=2000.0; i<(float)10000.0; i+=(float)50.0) { 00107 speaker.period((float)1.0/i); 00108 speaker = 0.06; 00109 ledR = ledR ? 0 : 1; 00110 if (red.read() == 0) 00111 red.write(1.0f); 00112 else 00113 red.write(0.0f); 00114 wait(0.03); 00115 } 00116 speaker=0.0; 00117 ledR = 0; 00118 red.write(0.0f); 00119 } 00120 00121 /* Put on/off the light and active the speaker. (Danger 1 = Higth danger, Danger 3 = Low danger) */ 00122 void danger2() 00123 { 00124 for (float i=2000.0; i<(float)10000.0; i+=(float)75.0) { 00125 speaker.period((float)1.0/i); 00126 speaker = 0.06; 00127 ledR = ledR ? 0 : 1; 00128 if (green.read() == 0) 00129 green.write(1.0f); 00130 else 00131 green.write(0.0f); 00132 if (red.read() == 0) 00133 red.write(1.0f); 00134 else 00135 red.write(0.0f); 00136 wait(0.03); 00137 } 00138 speaker=0.0; 00139 ledG = 0; 00140 ledR = 0; 00141 red.write(0.0f); 00142 green.write(0.0f); 00143 } 00144 00145 /* Put on/off the light and active the speaker. (Danger 1 = Higth danger, Danger 3 = Low danger) */ 00146 void danger3() 00147 { 00148 for (float i=2000.0; i<(float)10000.0; i+=(float)100.0) { 00149 speaker.period((float)1.0/i); 00150 speaker = 0.06; 00151 ledG = ledG ? 0 : 1; 00152 if (green.read() == 0) 00153 green.write(1.0f); 00154 else 00155 green.write(0.0f); 00156 wait(0.03); 00157 } 00158 speaker=0.0; 00159 ledG = 0; 00160 green.write(0.0f); 00161 } 00162 00163 /* Get msg from mqtt server, parse the json, show data on lcd and call the function danger. */ 00164 void messageArrived(MQTT::MessageData& md) 00165 { 00166 MQTT::Message &message = md.message; 00167 picojson::value res; 00168 string json((char*)message.payload); 00169 const char *value = json.c_str(); 00170 00171 picojson::parse(res, value, value + strlen(value)); 00172 if (Check == (10 * (int)res.get("nb").get<double>())) { 00173 ledOff(); 00174 return ; 00175 } 00176 shlcd.cls(); 00177 shlcd.locate(-4,0); 00178 shlcd.printf("%s", res.get("l").get<string>().c_str()); 00179 shlcd.locate(0,8); 00180 shlcd.printf("%s", res.get("t").get<string>().c_str()); 00181 shlcd.locate(0,16); 00182 shlcd.printf("Distance: %s, M: %s", res.get("di").get<string>().c_str(), res.get("m").get<string>().c_str()); 00183 ledOff(); 00184 if ((int)res.get("da").get<double>() == 1) 00185 danger1(); 00186 else if ((int)res.get("da").get<double>() == 2) 00187 danger2(); 00188 else 00189 danger3(); 00190 Check = 10 * (int)res.get("nb").get<double>(); 00191 } 00192 00193 00194 int main() 00195 { 00196 char *topic = "ab981_a5_iot"; 00197 char *hostname = "test.mosquitto.org"; 00198 int port = 1883; 00199 00200 host.baud (38400); /* set baud rate */ 00201 ledOff(); 00202 showHostPort(hostname, port); 00203 MQTTEthernet ipstack = MQTTEthernet(); 00204 MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack); 00205 if (ipstack.connect(hostname, port) != 0) /* Connecting to server */ 00206 showErrorMsg(1); 00207 MQTTPacket_connectData data = MQTTPacket_connectData_initializer; 00208 data.MQTTVersion = 3; 00209 data.clientID.cstring = "mbed-a5"; 00210 data.keepAliveInterval = 20; 00211 data.cleansession = 1; 00212 if (client.connect(data) != 0) /* send data client */ 00213 showErrorMsg(2); 00214 showSubscribe(topic); 00215 if (client.subscribe(topic, MQTT::QOS2, messageArrived) != 0) /* subscribe to channel */ 00216 showErrorMsg(3); 00217 showWaitData(); 00218 while (!select || err != 1) { 00219 client.yield(100); 00220 } 00221 shlcd.cls(); 00222 shlcd.locate(40,8); 00223 shlcd.printf("Goodbye"); 00224 client.unsubscribe(topic); 00225 client.disconnect(); 00226 ipstack.disconnect(); 00227 }
Generated on Fri Jul 15 2022 18:20:25 by 1.7.2