Remote I/O Sensor bus with AT&T flow and M2X cloud

Dependencies:   DHT11 FXOS8700CQ MODSERIAL mbed

Fork of Avnet_ATT_Cellular_IOT by Avnet

Committer:
agaikwad
Date:
Tue Apr 17 21:29:20 2018 +0000
Revision:
82:4e608375910a
Parent:
77:c65eae5b9958
Remote I/O Sensor bus with AT&T flow and M2X cloud

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fkellermavnet 68:6e311c747045 1 /* ===================================================================
fkellermavnet 68:6e311c747045 2 Copyright © 2016, AVNET Inc.
fkellermavnet 68:6e311c747045 3
fkellermavnet 68:6e311c747045 4 Licensed under the Apache License, Version 2.0 (the "License");
fkellermavnet 68:6e311c747045 5 you may not use this file except in compliance with the License.
fkellermavnet 68:6e311c747045 6 You may obtain a copy of the License at
fkellermavnet 68:6e311c747045 7
fkellermavnet 68:6e311c747045 8 http://www.apache.org/licenses/LICENSE-2.0
fkellermavnet 68:6e311c747045 9
fkellermavnet 68:6e311c747045 10 Unless required by applicable law or agreed to in writing,
fkellermavnet 68:6e311c747045 11 software distributed under the License is distributed on an
fkellermavnet 68:6e311c747045 12 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
fkellermavnet 68:6e311c747045 13 either express or implied. See the License for the specific
fkellermavnet 68:6e311c747045 14 language governing permissions and limitations under the License.
fkellermavnet 68:6e311c747045 15
fkellermavnet 68:6e311c747045 16 ======================================================================== */
fkellermavnet 68:6e311c747045 17
stefanrousseau 55:3abf9e3f42e6 18 #include "mbed.h"
JMF 0:9d5134074d84 19 #include <cctype>
JMF 0:9d5134074d84 20 #include <string>
JMF 2:0e2ef866af95 21 #include "config_me.h"
stefanrousseau 4:f83bedd9cab4 22 #include "sensors.h"
stefanrousseau 61:f6b93129f954 23 #include "cell_modem.h"
stefanrousseau 11:e6602513730f 24 #include "hardware.h"
agaikwad 82:4e608375910a 25 #include "DHT.h"
agaikwad 82:4e608375910a 26 #include<stdio.h>
agaikwad 82:4e608375910a 27 #include<math.h>
agaikwad 82:4e608375910a 28
stefanrousseau 11:e6602513730f 29
stefanrousseau 61:f6b93129f954 30 I2C i2c(PTC11, PTC10); //SDA, SCL -- define the I2C pins being used
stefanrousseau 56:cb42ff383dab 31 MODSERIAL pc(USBTX, USBRX, 256, 256); // tx, rx with default tx, rx buffer sizes
stefanrousseau 63:90d7c69993cd 32 MODSERIAL mdm(PTD3, PTD2, 4096, 4096);
stefanrousseau 16:17c5916f2d12 33 DigitalOut led_green(LED_GREEN);
stefanrousseau 16:17c5916f2d12 34 DigitalOut led_red(LED_RED);
stefanrousseau 16:17c5916f2d12 35 DigitalOut led_blue(LED_BLUE);
JMF 0:9d5134074d84 36
agaikwad 82:4e608375910a 37 //UART Code
agaikwad 82:4e608375910a 38 Serial device(PTB11,PTB10); // tx, rx
agaikwad 82:4e608375910a 39 char temp[10];
agaikwad 82:4e608375910a 40 char humid[10];
agaikwad 82:4e608375910a 41 char data[100];
agaikwad 82:4e608375910a 42 void reverse(char *str, int len);
agaikwad 82:4e608375910a 43 int intToStr(int x, char str[], int d);
agaikwad 82:4e608375910a 44 void ftoa(float n, char *res, int afterpoint);
agaikwad 82:4e608375910a 45
agaikwad 82:4e608375910a 46
JMF 0:9d5134074d84 47
stefanrousseau 3:26b3cc155f39 48 //********************************************************************************************************************************************
stefanrousseau 12:7c94ec5069dc 49 //* Create string with sensor readings that can be sent to flow as an HTTP get
stefanrousseau 3:26b3cc155f39 50 //********************************************************************************************************************************************
stefanrousseau 12:7c94ec5069dc 51 K64F_Sensors_t SENSOR_DATA =
stefanrousseau 3:26b3cc155f39 52 {
stefanrousseau 12:7c94ec5069dc 53 .Temperature = "0",
stefanrousseau 12:7c94ec5069dc 54 .Humidity = "0",
stefanrousseau 12:7c94ec5069dc 55 .AccelX = "0",
stefanrousseau 12:7c94ec5069dc 56 .AccelY = "0",
stefanrousseau 12:7c94ec5069dc 57 .AccelZ = "0",
stefanrousseau 12:7c94ec5069dc 58 .MagnetometerX = "0",
stefanrousseau 12:7c94ec5069dc 59 .MagnetometerY = "0",
stefanrousseau 12:7c94ec5069dc 60 .MagnetometerZ = "0",
stefanrousseau 12:7c94ec5069dc 61 .AmbientLightVis = "0",
stefanrousseau 12:7c94ec5069dc 62 .AmbientLightIr = "0",
stefanrousseau 12:7c94ec5069dc 63 .UVindex = "0",
stefanrousseau 12:7c94ec5069dc 64 .Proximity = "0",
stefanrousseau 12:7c94ec5069dc 65 .Temperature_Si7020 = "0",
stefanrousseau 55:3abf9e3f42e6 66 .Humidity_Si7020 = "0",
stefanrousseau 55:3abf9e3f42e6 67 .Virtual_Sensor1 = "0",
stefanrousseau 55:3abf9e3f42e6 68 .Virtual_Sensor2 = "0",
stefanrousseau 55:3abf9e3f42e6 69 .Virtual_Sensor3 = "0",
stefanrousseau 55:3abf9e3f42e6 70 .Virtual_Sensor4 = "0",
stefanrousseau 55:3abf9e3f42e6 71 .Virtual_Sensor5 = "0",
stefanrousseau 55:3abf9e3f42e6 72 .Virtual_Sensor6 = "0",
stefanrousseau 55:3abf9e3f42e6 73 .Virtual_Sensor7 = "0",
stefanrousseau 71:45a5e426df81 74 .Virtual_Sensor8 = "0",
stefanrousseau 72:b500e1507b5f 75 .GPS_Satellites = "0",
stefanrousseau 71:45a5e426df81 76 .GPS_Latitude = "0",
stefanrousseau 71:45a5e426df81 77 .GPS_Longitude = "0",
stefanrousseau 71:45a5e426df81 78 .GPS_Altitude = "0",
stefanrousseau 71:45a5e426df81 79 .GPS_Speed = "0",
stefanrousseau 71:45a5e426df81 80 .GPS_Course = "0"
stefanrousseau 3:26b3cc155f39 81 };
stefanrousseau 12:7c94ec5069dc 82
fkellermavnet 77:c65eae5b9958 83 void display_app_firmware_version(void)
fkellermavnet 77:c65eae5b9958 84 {
fkellermavnet 77:c65eae5b9958 85 PUTS("\r\n\r\nApp Firmware: Release 1.0 - built: "__DATE__" "__TIME__"\r\n\r\n");
fkellermavnet 77:c65eae5b9958 86 }
fkellermavnet 77:c65eae5b9958 87
stefanrousseau 3:26b3cc155f39 88 void GenerateModemString(char * modem_string)
stefanrousseau 3:26b3cc155f39 89 {
stefanrousseau 12:7c94ec5069dc 90 switch(iSensorsToReport)
stefanrousseau 12:7c94ec5069dc 91 {
stefanrousseau 12:7c94ec5069dc 92 case TEMP_HUMIDITY_ONLY:
stefanrousseau 12:7c94ec5069dc 93 {
agaikwad 82:4e608375910a 94 sprintf(modem_string, "GET %s%s?serial=%s&temp=%s&humidity=%s&ammeter=%s&voltmeter=%s&light=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, SENSOR_DATA.Ammeter, SENSOR_DATA.Voltmeter, SENSOR_DATA.Light, FLOW_URL_TYPE, MY_SERVER_URL);
stefanrousseau 12:7c94ec5069dc 95 break;
stefanrousseau 12:7c94ec5069dc 96 }
stefanrousseau 12:7c94ec5069dc 97 case TEMP_HUMIDITY_ACCELEROMETER:
stefanrousseau 12:7c94ec5069dc 98 {
stefanrousseau 12:7c94ec5069dc 99 sprintf(modem_string, "GET %s%s?serial=%s&temp=%s&humidity=%s&accelX=%s&accelY=%s&accelZ=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, SENSOR_DATA.AccelX,SENSOR_DATA.AccelY,SENSOR_DATA.AccelZ, FLOW_URL_TYPE, MY_SERVER_URL);
stefanrousseau 12:7c94ec5069dc 100 break;
stefanrousseau 12:7c94ec5069dc 101 }
stefanrousseau 70:24d5800f27be 102 case TEMP_HUMIDITY_ACCELEROMETER_GPS:
stefanrousseau 70:24d5800f27be 103 {
stefanrousseau 72:b500e1507b5f 104 sprintf(modem_string, "GET %s%s?serial=%s&temp=%s&humidity=%s&accelX=%s&accelY=%s&accelZ=%s&gps_satellites=%s&latitude=%s&longitude=%s&altitude=%s&speed=%s&course=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, SENSOR_DATA.AccelX,SENSOR_DATA.AccelY,SENSOR_DATA.AccelZ,SENSOR_DATA.GPS_Satellites,SENSOR_DATA.GPS_Latitude,SENSOR_DATA.GPS_Longitude,SENSOR_DATA.GPS_Altitude,SENSOR_DATA.GPS_Speed,SENSOR_DATA.GPS_Course, FLOW_URL_TYPE, MY_SERVER_URL);
stefanrousseau 70:24d5800f27be 105 break;
stefanrousseau 70:24d5800f27be 106 }
stefanrousseau 12:7c94ec5069dc 107 case TEMP_HUMIDITY_ACCELEROMETER_PMODSENSORS:
stefanrousseau 12:7c94ec5069dc 108 {
stefanrousseau 12:7c94ec5069dc 109 sprintf(modem_string, "GET %s%s?serial=%s&temp=%s&humidity=%s&accelX=%s&accelY=%s&accelZ=%s&proximity=%s&light_uv=%s&light_vis=%s&light_ir=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, SENSOR_DATA.AccelX,SENSOR_DATA.AccelY,SENSOR_DATA.AccelZ, SENSOR_DATA.Proximity, SENSOR_DATA.UVindex, SENSOR_DATA.AmbientLightVis, SENSOR_DATA.AmbientLightIr, FLOW_URL_TYPE, MY_SERVER_URL);
stefanrousseau 12:7c94ec5069dc 110 break;
stefanrousseau 12:7c94ec5069dc 111 }
stefanrousseau 55:3abf9e3f42e6 112 case TEMP_HUMIDITY_ACCELEROMETER_PMODSENSORS_VIRTUALSENSORS:
stefanrousseau 55:3abf9e3f42e6 113 {
stefanrousseau 55:3abf9e3f42e6 114 sprintf(modem_string, "GET %s%s?serial=%s&temp=%s&humidity=%s&accelX=%s&accelY=%s&accelZ=%s&proximity=%s&light_uv=%s&light_vis=%s&light_ir=%s&virt_sens1=%s&virt_sens2=%s&virt_sens3=%s&virt_sens4=%s&virt_sens5=%s&virt_sens6=%s&virt_sens7=%s&virt_sens8=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, SENSOR_DATA.AccelX,SENSOR_DATA.AccelY,SENSOR_DATA.AccelZ, SENSOR_DATA.Proximity, SENSOR_DATA.UVindex, SENSOR_DATA.AmbientLightVis, SENSOR_DATA.AmbientLightIr, SENSOR_DATA.Virtual_Sensor1, SENSOR_DATA.Virtual_Sensor2, SENSOR_DATA.Virtual_Sensor3, SENSOR_DATA.Virtual_Sensor4, SENSOR_DATA.Virtual_Sensor5, SENSOR_DATA.Virtual_Sensor6, SENSOR_DATA.Virtual_Sensor7, SENSOR_DATA.Virtual_Sensor8, FLOW_URL_TYPE, MY_SERVER_URL);
stefanrousseau 55:3abf9e3f42e6 115 break;
stefanrousseau 55:3abf9e3f42e6 116 }
stefanrousseau 12:7c94ec5069dc 117 default:
stefanrousseau 12:7c94ec5069dc 118 {
stefanrousseau 12:7c94ec5069dc 119 sprintf(modem_string, "Invalid sensor selected\r\n\r\n");
stefanrousseau 12:7c94ec5069dc 120 break;
stefanrousseau 12:7c94ec5069dc 121 }
stefanrousseau 16:17c5916f2d12 122 } //switch(iSensorsToReport)
stefanrousseau 3:26b3cc155f39 123 } //GenerateModemString
stefanrousseau 3:26b3cc155f39 124
stefanrousseau 3:26b3cc155f39 125
stefanrousseau 3:26b3cc155f39 126 //Periodic timer
stefanrousseau 3:26b3cc155f39 127 Ticker OneMsTicker;
stefanrousseau 3:26b3cc155f39 128 volatile bool bTimerExpiredFlag = false;
stefanrousseau 3:26b3cc155f39 129 int OneMsTicks = 0;
stefanrousseau 3:26b3cc155f39 130 int iTimer1Interval_ms = 1000;
stefanrousseau 3:26b3cc155f39 131 //********************************************************************************************************************************************
stefanrousseau 3:26b3cc155f39 132 //* Periodic 1ms timer tick
stefanrousseau 3:26b3cc155f39 133 //********************************************************************************************************************************************
stefanrousseau 3:26b3cc155f39 134 void OneMsFunction()
stefanrousseau 3:26b3cc155f39 135 {
stefanrousseau 3:26b3cc155f39 136 OneMsTicks++;
stefanrousseau 3:26b3cc155f39 137 if ((OneMsTicks % iTimer1Interval_ms) == 0)
stefanrousseau 3:26b3cc155f39 138 {
stefanrousseau 3:26b3cc155f39 139 bTimerExpiredFlag = true;
stefanrousseau 3:26b3cc155f39 140 }
stefanrousseau 3:26b3cc155f39 141 } //OneMsFunction()
stefanrousseau 3:26b3cc155f39 142
stefanrousseau 16:17c5916f2d12 143 //********************************************************************************************************************************************
stefanrousseau 16:17c5916f2d12 144 //* Set the RGB LED's Color
stefanrousseau 16:17c5916f2d12 145 //* LED Color 0=Off to 7=White. 3 bits represent BGR (bit0=Red, bit1=Green, bit2=Blue)
stefanrousseau 16:17c5916f2d12 146 //********************************************************************************************************************************************
stefanrousseau 16:17c5916f2d12 147 void SetLedColor(unsigned char ucColor)
stefanrousseau 16:17c5916f2d12 148 {
stefanrousseau 16:17c5916f2d12 149 //Note that when an LED is on, you write a 0 to it:
stefanrousseau 16:17c5916f2d12 150 led_red = !(ucColor & 0x1); //bit 0
stefanrousseau 16:17c5916f2d12 151 led_green = !(ucColor & 0x2); //bit 1
stefanrousseau 16:17c5916f2d12 152 led_blue = !(ucColor & 0x4); //bit 2
stefanrousseau 16:17c5916f2d12 153 } //SetLedColor()
stefanrousseau 16:17c5916f2d12 154
stefanrousseau 16:17c5916f2d12 155 //********************************************************************************************************************************************
stefanrousseau 61:f6b93129f954 156 //* Process the JSON response. In this example we are only extracting a LED color.
stefanrousseau 16:17c5916f2d12 157 //********************************************************************************************************************************************
stefanrousseau 16:17c5916f2d12 158 bool parse_JSON(char* json_string)
stefanrousseau 16:17c5916f2d12 159 {
stefanrousseau 16:17c5916f2d12 160 char* beginquote;
stefanrousseau 16:17c5916f2d12 161 char token[] = "\"LED\":\"";
stefanrousseau 16:17c5916f2d12 162 beginquote = strstr(json_string, token );
stefanrousseau 16:17c5916f2d12 163 if ((beginquote != 0))
stefanrousseau 16:17c5916f2d12 164 {
stefanrousseau 16:17c5916f2d12 165 char cLedColor = beginquote[strlen(token)];
stefanrousseau 64:09004cd610df 166 PRINTF(GRN "LED Found : %c" DEF "\r\n", cLedColor);
stefanrousseau 16:17c5916f2d12 167 switch(cLedColor)
stefanrousseau 16:17c5916f2d12 168 {
stefanrousseau 16:17c5916f2d12 169 case 'O':
stefanrousseau 16:17c5916f2d12 170 { //Off
stefanrousseau 16:17c5916f2d12 171 SetLedColor(0);
stefanrousseau 16:17c5916f2d12 172 break;
stefanrousseau 16:17c5916f2d12 173 }
stefanrousseau 16:17c5916f2d12 174 case 'R':
stefanrousseau 16:17c5916f2d12 175 { //Red
stefanrousseau 16:17c5916f2d12 176 SetLedColor(1);
stefanrousseau 16:17c5916f2d12 177 break;
stefanrousseau 16:17c5916f2d12 178 }
stefanrousseau 16:17c5916f2d12 179 case 'G':
stefanrousseau 16:17c5916f2d12 180 { //Green
stefanrousseau 16:17c5916f2d12 181 SetLedColor(2);
stefanrousseau 16:17c5916f2d12 182 break;
stefanrousseau 16:17c5916f2d12 183 }
stefanrousseau 16:17c5916f2d12 184 case 'Y':
stefanrousseau 16:17c5916f2d12 185 { //Yellow
stefanrousseau 16:17c5916f2d12 186 SetLedColor(3);
stefanrousseau 16:17c5916f2d12 187 break;
stefanrousseau 16:17c5916f2d12 188 }
stefanrousseau 16:17c5916f2d12 189 case 'B':
stefanrousseau 16:17c5916f2d12 190 { //Blue
stefanrousseau 16:17c5916f2d12 191 SetLedColor(4);
stefanrousseau 16:17c5916f2d12 192 break;
stefanrousseau 16:17c5916f2d12 193 }
stefanrousseau 16:17c5916f2d12 194 case 'M':
stefanrousseau 16:17c5916f2d12 195 { //Magenta
stefanrousseau 16:17c5916f2d12 196 SetLedColor(5);
stefanrousseau 16:17c5916f2d12 197 break;
stefanrousseau 16:17c5916f2d12 198 }
stefanrousseau 16:17c5916f2d12 199 case 'T':
stefanrousseau 16:17c5916f2d12 200 { //Turquoise
stefanrousseau 16:17c5916f2d12 201 SetLedColor(6);
stefanrousseau 16:17c5916f2d12 202 break;
stefanrousseau 16:17c5916f2d12 203 }
stefanrousseau 16:17c5916f2d12 204 case 'W':
stefanrousseau 16:17c5916f2d12 205 { //White
stefanrousseau 16:17c5916f2d12 206 SetLedColor(7);
stefanrousseau 16:17c5916f2d12 207 break;
stefanrousseau 16:17c5916f2d12 208 }
stefanrousseau 16:17c5916f2d12 209 default:
stefanrousseau 16:17c5916f2d12 210 {
stefanrousseau 16:17c5916f2d12 211 break;
stefanrousseau 16:17c5916f2d12 212 }
stefanrousseau 16:17c5916f2d12 213 } //switch(cLedColor)
stefanrousseau 16:17c5916f2d12 214 return true;
stefanrousseau 16:17c5916f2d12 215 }
stefanrousseau 16:17c5916f2d12 216 else
stefanrousseau 16:17c5916f2d12 217 {
stefanrousseau 16:17c5916f2d12 218 return false;
stefanrousseau 16:17c5916f2d12 219 }
stefanrousseau 16:17c5916f2d12 220 } //parse_JSON
stefanrousseau 16:17c5916f2d12 221
JMF 0:9d5134074d84 222 int main() {
stefanrousseau 61:f6b93129f954 223 static unsigned ledOnce = 0;
stefanrousseau 72:b500e1507b5f 224 //delay so that the debug terminal can open after power-on reset:
fkellermavnet 77:c65eae5b9958 225 wait (5.0);
stefanrousseau 61:f6b93129f954 226 pc.baud(115200);
fkellermavnet 77:c65eae5b9958 227
fkellermavnet 77:c65eae5b9958 228 display_app_firmware_version();
fkellermavnet 77:c65eae5b9958 229
stefanrousseau 64:09004cd610df 230 PRINTF(GRN "Hello World from the Cellular IoT Kit!\r\n\r\n");
JMF 0:9d5134074d84 231
stefanrousseau 61:f6b93129f954 232 //Initialize the I2C sensors that are present
stefanrousseau 11:e6602513730f 233 sensors_init();
stefanrousseau 12:7c94ec5069dc 234 read_sensors();
stefanrousseau 11:e6602513730f 235
stefanrousseau 61:f6b93129f954 236 // Set LED to RED until init finishes
stefanrousseau 61:f6b93129f954 237 SetLedColor(0x1); //Red
JMF 0:9d5134074d84 238 // Initialize the modem
stefanrousseau 64:09004cd610df 239 PRINTF("\r\n");
stefanrousseau 61:f6b93129f954 240 cell_modem_init();
fkellermavnet 77:c65eae5b9958 241 display_wnc_firmware_rev();
fkellermavnet 77:c65eae5b9958 242
stefanrousseau 61:f6b93129f954 243 // Set LED BLUE for partial init
stefanrousseau 61:f6b93129f954 244 SetLedColor(0x4); //Blue
JMF 0:9d5134074d84 245
stefanrousseau 3:26b3cc155f39 246 //Create a 1ms timer tick function:
stefanrousseau 61:f6b93129f954 247 iTimer1Interval_ms = SENSOR_UPDATE_INTERVAL_MS;
stefanrousseau 3:26b3cc155f39 248 OneMsTicker.attach(OneMsFunction, 0.001f) ;
fkellermavnet 26:8d6e7e7cdcae 249
JMF 2:0e2ef866af95 250 // Send and receive data perpetually
JMF 2:0e2ef866af95 251 while(1) {
agaikwad 82:4e608375910a 252
agaikwad 82:4e608375910a 253
stefanrousseau 55:3abf9e3f42e6 254 #ifdef USE_VIRTUAL_SENSORS
stefanrousseau 55:3abf9e3f42e6 255 ProcessUsbInterface();
stefanrousseau 55:3abf9e3f42e6 256 #endif
agaikwad 82:4e608375910a 257
stefanrousseau 3:26b3cc155f39 258 if (bTimerExpiredFlag)
stefanrousseau 3:26b3cc155f39 259 {
stefanrousseau 3:26b3cc155f39 260 bTimerExpiredFlag = false;
stefanrousseau 4:f83bedd9cab4 261 read_sensors(); //read available external sensors from a PMOD and the on-board motion sensor
agaikwad 82:4e608375910a 262
agaikwad 82:4e608375910a 263 //UART code
agaikwad 82:4e608375910a 264 sprintf(data,"%s&%s&%s&%s&%s",SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, SENSOR_DATA.Light, SENSOR_DATA.Voltmeter, SENSOR_DATA.Ammeter);
stefanrousseau 3:26b3cc155f39 265 char modem_string[512];
agaikwad 82:4e608375910a 266 PRINTF("%s", data);
agaikwad 82:4e608375910a 267 device.printf("%s", data);
agaikwad 82:4e608375910a 268 //UART Code end
agaikwad 82:4e608375910a 269
stefanrousseau 3:26b3cc155f39 270 GenerateModemString(&modem_string[0]);
stefanrousseau 61:f6b93129f954 271 char myJsonResponse[512];
stefanrousseau 61:f6b93129f954 272 if (cell_modem_Sendreceive(&modem_string[0], &myJsonResponse[0]))
fkellermavnet 20:27a4f27254d0 273 {
stefanrousseau 41:9b14c40eebf6 274 if (!ledOnce)
stefanrousseau 41:9b14c40eebf6 275 {
stefanrousseau 41:9b14c40eebf6 276 ledOnce = 1;
stefanrousseau 61:f6b93129f954 277 SetLedColor(0x2); //Green
stefanrousseau 41:9b14c40eebf6 278 }
stefanrousseau 61:f6b93129f954 279 parse_JSON(&myJsonResponse[0]);
stefanrousseau 16:17c5916f2d12 280 }
stefanrousseau 3:26b3cc155f39 281 } //bTimerExpiredFlag
stefanrousseau 3:26b3cc155f39 282 } //forever loop
JMF 0:9d5134074d84 283 }
agaikwad 82:4e608375910a 284