Firmware Test of Tilt Sense using BMI160
Dependencies: mbed TI_ADS1220 ESP8266
Fork of GeoDynamics by
main.cpp@5:96fff32333e8, 2016-10-20 (annotated)
- Committer:
- firewalk
- Date:
- Thu Oct 20 04:27:46 2016 +0000
- Revision:
- 5:96fff32333e8
- Parent:
- 4:c79a3c86ab36
Complete Firmware of Geodynamic Seismograph
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
firewalk | 5:96fff32333e8 | 1 | //GeoDynamics Seismograph |
firewalk | 5:96fff32333e8 | 2 | //Celso B. Varella Neto |
firewalk | 5:96fff32333e8 | 3 | //----------------------------------------------------------------------------- |
firewalk | 0:aa129e8d6912 | 4 | #include "mbed.h" |
firewalk | 5:96fff32333e8 | 5 | #include "ESP8266.h" |
firewalk | 5:96fff32333e8 | 6 | #include "ADS1220.h" |
firewalk | 0:aa129e8d6912 | 7 | |
firewalk | 4:c79a3c86ab36 | 8 | /*Timer*/ |
firewalk | 4:c79a3c86ab36 | 9 | Timer t; |
firewalk | 0:aa129e8d6912 | 10 | |
firewalk | 0:aa129e8d6912 | 11 | /* defines the axis for acc */ |
firewalk | 0:aa129e8d6912 | 12 | #define ACC_NOOF_AXIS 3 |
firewalk | 1:268fc98970bb | 13 | #define GYR_NOOF_AXIS 2 |
firewalk | 0:aa129e8d6912 | 14 | |
firewalk | 0:aa129e8d6912 | 15 | /* bmi160 slave address */ |
firewalk | 0:aa129e8d6912 | 16 | #define BMI160_ADDR ((0x68)<<1) |
firewalk | 0:aa129e8d6912 | 17 | |
firewalk | 5:96fff32333e8 | 18 | /*Value to Transform Rad to Deg*/ |
firewalk | 1:268fc98970bb | 19 | #define RAD_DEG 57.29577951 |
firewalk | 4:c79a3c86ab36 | 20 | |
firewalk | 5:96fff32333e8 | 21 | #define PGA 1 // Programmable Gain = 1 |
firewalk | 5:96fff32333e8 | 22 | #define VREFE 5.0 // External reference of 5.00V |
firewalk | 5:96fff32333e8 | 23 | #define VFSR VREFE/PGA |
firewalk | 5:96fff32333e8 | 24 | #define FSR (((long int)1<<23)) |
firewalk | 5:96fff32333e8 | 25 | #define LSB_Size (VFSR/FSR) |
firewalk | 5:96fff32333e8 | 26 | |
firewalk | 5:96fff32333e8 | 27 | #define IP "184.106.153.149" // thingspeak.com IP Address |
firewalk | 5:96fff32333e8 | 28 | |
firewalk | 5:96fff32333e8 | 29 | /*Serial-USB LPCXpresso4337*/ |
firewalk | 0:aa129e8d6912 | 30 | Serial pc(USBTX, USBRX); // tx, rx |
firewalk | 0:aa129e8d6912 | 31 | |
firewalk | 5:96fff32333e8 | 32 | /*I2C pin connected to BMI160*/ |
firewalk | 0:aa129e8d6912 | 33 | I2C i2c(P2_3, P2_4); |
firewalk | 0:aa129e8d6912 | 34 | |
firewalk | 5:96fff32333e8 | 35 | /*Serial pin connected to ESP8266*/ |
firewalk | 5:96fff32333e8 | 36 | ESP8266 wifi(P2_10, P2_11, 115200); // baud rate for wifi |
firewalk | 5:96fff32333e8 | 37 | char snd[255],rcv[1000]; |
firewalk | 0:aa129e8d6912 | 38 | |
firewalk | 5:96fff32333e8 | 39 | /*SPI pin connected to ADS120*/ |
firewalk | 5:96fff32333e8 | 40 | ADS1220 ads1220_com(D11, D12, D13); |
firewalk | 5:96fff32333e8 | 41 | DigitalIn DRDY(D9); |
firewalk | 5:96fff32333e8 | 42 | |
firewalk | 5:96fff32333e8 | 43 | |
firewalk | 5:96fff32333e8 | 44 | |
firewalk | 5:96fff32333e8 | 45 | /* variable to store IMU BMI160 samples and manipulate */ |
firewalk | 0:aa129e8d6912 | 46 | int16_t acc_sample_buffer[ACC_NOOF_AXIS] = {0x5555, 0x5555, 0x5555}; |
firewalk | 1:268fc98970bb | 47 | int16_t gyr_sample_buffer[GYR_NOOF_AXIS] = {0x5555, 0x5555}; |
firewalk | 0:aa129e8d6912 | 48 | |
firewalk | 0:aa129e8d6912 | 49 | double acc_result_buffer[ACC_NOOF_AXIS] = {0x5555, 0x5555, 0x5555}; |
firewalk | 1:268fc98970bb | 50 | double gyr_result_buffer[GYR_NOOF_AXIS] = {0x5555, 0x5555}; |
firewalk | 1:268fc98970bb | 51 | |
firewalk | 1:268fc98970bb | 52 | double accel_ang_x, accel_ang_y; |
firewalk | 1:268fc98970bb | 53 | double tiltx, tilty; |
firewalk | 1:268fc98970bb | 54 | double tiltx_prev, tilty_prev; |
firewalk | 0:aa129e8d6912 | 55 | |
firewalk | 0:aa129e8d6912 | 56 | char i2c_reg_buffer[2] = {0}; |
firewalk | 5:96fff32333e8 | 57 | |
firewalk | 5:96fff32333e8 | 58 | /*variables to store ADS1220 samples and manipulate*/ |
firewalk | 5:96fff32333e8 | 59 | void showvolt(float volts); |
firewalk | 5:96fff32333e8 | 60 | signed long t1Data, t2Data; |
firewalk | 5:96fff32333e8 | 61 | float Vout, volt, ch1[2000], ch2[2000]; |
firewalk | 5:96fff32333e8 | 62 | char AIN1 = 57, AIN2 = 56; |
firewalk | 5:96fff32333e8 | 63 | int chn, i; |
firewalk | 5:96fff32333e8 | 64 | |
firewalk | 5:96fff32333e8 | 65 | /*Functions*/ |
firewalk | 5:96fff32333e8 | 66 | float code2volt(float c); //Convert ADC numeric 24bit to Volts |
firewalk | 5:96fff32333e8 | 67 | int find_maximum(float a[]); //Find Largest Value in Array |
firewalk | 5:96fff32333e8 | 68 | void wifi_send(void); //Send data to ThingSpeak using WIFI ESP8266 |
firewalk | 0:aa129e8d6912 | 69 | |
firewalk | 0:aa129e8d6912 | 70 | int main() { |
firewalk | 5:96fff32333e8 | 71 | |
firewalk | 5:96fff32333e8 | 72 | pc.printf("GEODYNAMICS SEISMOGRAPH - EMBARCADOS CONTEST\n\r"); |
firewalk | 5:96fff32333e8 | 73 | pc.printf("Configuring IMU BMI160...\n\r"); |
firewalk | 0:aa129e8d6912 | 74 | wait_ms(250); |
firewalk | 0:aa129e8d6912 | 75 | |
firewalk | 0:aa129e8d6912 | 76 | /*Config Freq. I2C Bus*/ |
firewalk | 0:aa129e8d6912 | 77 | i2c.frequency(20000); |
firewalk | 0:aa129e8d6912 | 78 | |
firewalk | 0:aa129e8d6912 | 79 | /*Reset BMI160*/ |
firewalk | 0:aa129e8d6912 | 80 | i2c_reg_buffer[0] = 0x7E; |
firewalk | 0:aa129e8d6912 | 81 | i2c_reg_buffer[1] = 0xB6; |
firewalk | 0:aa129e8d6912 | 82 | i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false); |
firewalk | 0:aa129e8d6912 | 83 | wait_ms(200); |
firewalk | 5:96fff32333e8 | 84 | pc.printf("BMI160 Reseted\n\r"); |
firewalk | 0:aa129e8d6912 | 85 | |
firewalk | 0:aa129e8d6912 | 86 | /*Habilita o Acelerometro*/ |
firewalk | 0:aa129e8d6912 | 87 | i2c_reg_buffer[0] = 0x7E; |
firewalk | 0:aa129e8d6912 | 88 | i2c_reg_buffer[1] = 0x11; //PMU Normal |
firewalk | 0:aa129e8d6912 | 89 | i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false); |
firewalk | 5:96fff32333e8 | 90 | pc.printf("Acc Enable\n\r"); |
firewalk | 0:aa129e8d6912 | 91 | |
firewalk | 0:aa129e8d6912 | 92 | /*Habilita o Giroscopio*/ |
firewalk | 0:aa129e8d6912 | 93 | i2c_reg_buffer[0] = 0x7E; |
firewalk | 0:aa129e8d6912 | 94 | i2c_reg_buffer[1] = 0x15; //PMU Normal |
firewalk | 0:aa129e8d6912 | 95 | i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false); |
firewalk | 5:96fff32333e8 | 96 | pc.printf("Gyr Enable\n\r"); |
firewalk | 0:aa129e8d6912 | 97 | |
firewalk | 2:986e8a434da3 | 98 | /*Config o Data Rate ACC em 1600Hz*/ |
firewalk | 0:aa129e8d6912 | 99 | i2c_reg_buffer[0] = 0x40; |
firewalk | 2:986e8a434da3 | 100 | i2c_reg_buffer[1] = 0x2C; |
firewalk | 0:aa129e8d6912 | 101 | i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false); |
firewalk | 5:96fff32333e8 | 102 | pc.printf("ACC Data Rate Configured to 1600Hz\n\r"); |
firewalk | 0:aa129e8d6912 | 103 | |
firewalk | 2:986e8a434da3 | 104 | /*Config o Data Rate GYR em 1600Hz*/ |
firewalk | 0:aa129e8d6912 | 105 | i2c_reg_buffer[0] = 0x42; |
firewalk | 2:986e8a434da3 | 106 | i2c_reg_buffer[1] = 0x2C; |
firewalk | 0:aa129e8d6912 | 107 | i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false); |
firewalk | 5:96fff32333e8 | 108 | pc.printf("GYR Data Rate Configured to 1600Hz\n\r"); |
firewalk | 2:986e8a434da3 | 109 | |
firewalk | 2:986e8a434da3 | 110 | /*Config o Range GYR em 250º/s*/ |
firewalk | 2:986e8a434da3 | 111 | i2c_reg_buffer[0] = 0x43; |
firewalk | 2:986e8a434da3 | 112 | i2c_reg_buffer[1] = 0x03; |
firewalk | 2:986e8a434da3 | 113 | i2c.write(BMI160_ADDR, i2c_reg_buffer, sizeof(i2c_reg_buffer), false); |
firewalk | 5:96fff32333e8 | 114 | pc.printf("GYR Range Configured to 250deg/s\n\r"); |
firewalk | 0:aa129e8d6912 | 115 | |
firewalk | 0:aa129e8d6912 | 116 | wait_ms(2000); |
firewalk | 5:96fff32333e8 | 117 | pc.printf("BMI160 Configured\n\r"); |
firewalk | 5:96fff32333e8 | 118 | |
firewalk | 5:96fff32333e8 | 119 | pc.printf("ADS1220 Initializing\n\r"); |
firewalk | 5:96fff32333e8 | 120 | ads1220_com.Config(); |
firewalk | 5:96fff32333e8 | 121 | //Configure ADS1220 to Single Shot, Turbo Mode & 2000sps |
firewalk | 5:96fff32333e8 | 122 | pc.printf("ADS1220 Configured and Initialized\n\r"); |
firewalk | 0:aa129e8d6912 | 123 | |
firewalk | 5:96fff32333e8 | 124 | pc.printf("Configuring ESP8266\n\r"); |
firewalk | 5:96fff32333e8 | 125 | pc.printf("SET mode to AP\r\n"); |
firewalk | 5:96fff32333e8 | 126 | wifi.SetMode(1); // set ESP mode to 1 |
firewalk | 5:96fff32333e8 | 127 | wifi.RcvReply(rcv, 1000); //receive a response from ESP |
firewalk | 5:96fff32333e8 | 128 | pc.printf("%s",rcv); //Print the response onscreen |
firewalk | 5:96fff32333e8 | 129 | pc.printf("Conneting to AP\r\n"); |
firewalk | 5:96fff32333e8 | 130 | wifi.Join("cbv", "26141916"); // Your wifi username & Password |
firewalk | 5:96fff32333e8 | 131 | wifi.RcvReply(rcv, 1000); //receive a response from ESP |
firewalk | 5:96fff32333e8 | 132 | pc.printf("%s", rcv); //Print the response onscreen |
firewalk | 5:96fff32333e8 | 133 | wait(8); //waits for response from ESP |
firewalk | 5:96fff32333e8 | 134 | pc.printf("Getting IP\r\n"); //get IP addresss from the connected AP |
firewalk | 5:96fff32333e8 | 135 | wifi.GetIP(rcv); //receive an IP address from the AP |
firewalk | 5:96fff32333e8 | 136 | pc.printf("%s", rcv); |
firewalk | 5:96fff32333e8 | 137 | wait(5); // Delay 5 sec to give the pir time to get snapshut of the surrounding |
firewalk | 5:96fff32333e8 | 138 | pc.printf("ESP8266 Configured\r\n"); |
firewalk | 5:96fff32333e8 | 139 | |
firewalk | 5:96fff32333e8 | 140 | wait(2); |
firewalk | 5:96fff32333e8 | 141 | |
firewalk | 5:96fff32333e8 | 142 | t.start(); |
firewalk | 0:aa129e8d6912 | 143 | |
firewalk | 0:aa129e8d6912 | 144 | while(1) { |
firewalk | 0:aa129e8d6912 | 145 | |
firewalk | 5:96fff32333e8 | 146 | /*Read Register from Accelerometer*/ |
firewalk | 0:aa129e8d6912 | 147 | i2c_reg_buffer[0] = 0x12; |
firewalk | 0:aa129e8d6912 | 148 | i2c.write(BMI160_ADDR, i2c_reg_buffer, 1, true); |
firewalk | 0:aa129e8d6912 | 149 | i2c.read(BMI160_ADDR, (char *)&acc_sample_buffer, sizeof(acc_sample_buffer), false); |
firewalk | 0:aa129e8d6912 | 150 | |
firewalk | 5:96fff32333e8 | 151 | /*Read Register from Gyroscope*/ |
firewalk | 0:aa129e8d6912 | 152 | i2c_reg_buffer[0] = 0x0C; |
firewalk | 0:aa129e8d6912 | 153 | i2c.write(BMI160_ADDR, i2c_reg_buffer, 1, true); |
firewalk | 0:aa129e8d6912 | 154 | i2c.read(BMI160_ADDR, (char *)&gyr_sample_buffer, sizeof(gyr_sample_buffer), false); |
firewalk | 0:aa129e8d6912 | 155 | |
firewalk | 5:96fff32333e8 | 156 | /*Adjust Raw Data from Accelerometer to G Units*/ |
firewalk | 1:268fc98970bb | 157 | acc_result_buffer[0] = (acc_sample_buffer[0]/16384.0); |
firewalk | 1:268fc98970bb | 158 | acc_result_buffer[1] = (acc_sample_buffer[1]/16384.0); |
firewalk | 1:268fc98970bb | 159 | acc_result_buffer[2] = (acc_sample_buffer[2]/16384.0); |
firewalk | 0:aa129e8d6912 | 160 | |
firewalk | 5:96fff32333e8 | 161 | /*Adjust Raw Data from Gyroscope to deg/s Units */ |
firewalk | 2:986e8a434da3 | 162 | gyr_result_buffer[0] = (gyr_sample_buffer[0]/131.2); |
firewalk | 2:986e8a434da3 | 163 | gyr_result_buffer[1] = (gyr_sample_buffer[1]/131.2); |
firewalk | 1:268fc98970bb | 164 | |
firewalk | 5:96fff32333e8 | 165 | /*Compute Dip Angle from Accelerometer Data*/ |
firewalk | 1:268fc98970bb | 166 | accel_ang_x=atan(acc_result_buffer[0]/sqrt(pow(acc_result_buffer[1],2) + pow(acc_result_buffer[2],2)))*RAD_DEG; |
firewalk | 1:268fc98970bb | 167 | accel_ang_y=atan(acc_result_buffer[1]/sqrt(pow(acc_result_buffer[0],2) + pow(acc_result_buffer[2],2)))*RAD_DEG; |
firewalk | 1:268fc98970bb | 168 | |
firewalk | 5:96fff32333e8 | 169 | /*Stop Timer*/ |
firewalk | 4:c79a3c86ab36 | 170 | t.stop(); |
firewalk | 4:c79a3c86ab36 | 171 | |
firewalk | 5:96fff32333e8 | 172 | /*Compute Rotation Angle from Gyroscope and Fusion Data using Complementary Filter*/ |
firewalk | 5:96fff32333e8 | 173 | tiltx = (0.0280*(tiltx_prev+(gyr_result_buffer[0]*t.read())))+(0.9719*(accel_ang_x)); |
firewalk | 5:96fff32333e8 | 174 | tilty = (0.0280*(tilty_prev+(gyr_result_buffer[1]*t.read())))+(0.9719*(accel_ang_y)); |
firewalk | 4:c79a3c86ab36 | 175 | |
firewalk | 5:96fff32333e8 | 176 | /*Debug to find Loop Time*/ |
firewalk | 5:96fff32333e8 | 177 | //pc.printf("Tempo Loop %f \r\n",t.read()); |
firewalk | 4:c79a3c86ab36 | 178 | |
firewalk | 5:96fff32333e8 | 179 | /*Reset Timer*/ |
firewalk | 4:c79a3c86ab36 | 180 | t.reset(); |
firewalk | 5:96fff32333e8 | 181 | /*Start Timer*/ |
firewalk | 4:c79a3c86ab36 | 182 | t.start(); |
firewalk | 1:268fc98970bb | 183 | |
firewalk | 1:268fc98970bb | 184 | tiltx_prev = tiltx; |
firewalk | 5:96fff32333e8 | 185 | tilty_prev = tilty; |
firewalk | 0:aa129e8d6912 | 186 | |
firewalk | 5:96fff32333e8 | 187 | i = 0; |
firewalk | 5:96fff32333e8 | 188 | while(i != 2000) { |
firewalk | 5:96fff32333e8 | 189 | //Read Analog Data |
firewalk | 5:96fff32333e8 | 190 | ads1220_com.set_MUX(AIN1); //Configure to Sample Channel 1 |
firewalk | 5:96fff32333e8 | 191 | ads1220_com.SendStartCommand(); //Start Aquisition |
firewalk | 5:96fff32333e8 | 192 | while (DRDY != 0){} // Wait data on Buffer |
firewalk | 5:96fff32333e8 | 193 | t1Data = ads1220_com.ReadData(); //Read Data Sampled on Channel 1 |
firewalk | 5:96fff32333e8 | 194 | |
firewalk | 5:96fff32333e8 | 195 | ads1220_com.set_MUX(AIN2); //Configure to Sample Channel 2 |
firewalk | 5:96fff32333e8 | 196 | ads1220_com.SendStartCommand(); //Start Aquisition |
firewalk | 5:96fff32333e8 | 197 | while (DRDY != 0){} // Wait data on Buffer |
firewalk | 5:96fff32333e8 | 198 | t2Data = ads1220_com.ReadData(); //Read Data Sampled on Channel 2 |
firewalk | 5:96fff32333e8 | 199 | |
firewalk | 5:96fff32333e8 | 200 | |
firewalk | 5:96fff32333e8 | 201 | ch1[i] = code2volt(t1Data); //Convert ADC Ch1 data to Volts |
firewalk | 5:96fff32333e8 | 202 | ch2[i] = code2volt(t2Data); //Convert ADC Ch2 data to Volts |
firewalk | 5:96fff32333e8 | 203 | |
firewalk | 5:96fff32333e8 | 204 | i = i + 1; |
firewalk | 5:96fff32333e8 | 205 | } |
firewalk | 5:96fff32333e8 | 206 | /*Send Sensors Data to Serial*/ |
firewalk | 5:96fff32333e8 | 207 | pc.printf("%.3f, %.3f\n\r",tiltx, tilty); |
firewalk | 5:96fff32333e8 | 208 | pc.printf("%4.3f, %4.3f\n\r",ch1[find_maximum(ch1)], ch2[find_maximum(ch2)]); |
firewalk | 5:96fff32333e8 | 209 | pc.printf("Sending WiFi information\n\r"); |
firewalk | 5:96fff32333e8 | 210 | wifi_send(); //Send Sensors Data to ThingSpeak using ESP8266 |
firewalk | 1:268fc98970bb | 211 | |
firewalk | 1:268fc98970bb | 212 | |
firewalk | 1:268fc98970bb | 213 | |
firewalk | 0:aa129e8d6912 | 214 | } |
firewalk | 0:aa129e8d6912 | 215 | } |
firewalk | 5:96fff32333e8 | 216 | |
firewalk | 5:96fff32333e8 | 217 | //Function to Convert ADC Data Read |
firewalk | 5:96fff32333e8 | 218 | float code2volt(float c) |
firewalk | 5:96fff32333e8 | 219 | { |
firewalk | 5:96fff32333e8 | 220 | float Vout = 0; |
firewalk | 5:96fff32333e8 | 221 | Vout = (float)(c*LSB_Size*1000); //In mV |
firewalk | 5:96fff32333e8 | 222 | return Vout; |
firewalk | 5:96fff32333e8 | 223 | } |
firewalk | 5:96fff32333e8 | 224 | |
firewalk | 5:96fff32333e8 | 225 | //Function Return Largest Element on Array |
firewalk | 5:96fff32333e8 | 226 | int find_maximum(float a[]) { |
firewalk | 5:96fff32333e8 | 227 | int c, index; |
firewalk | 5:96fff32333e8 | 228 | float max; |
firewalk | 5:96fff32333e8 | 229 | max = a[0]; |
firewalk | 5:96fff32333e8 | 230 | index = 0; |
firewalk | 5:96fff32333e8 | 231 | |
firewalk | 5:96fff32333e8 | 232 | for (c = 1; c < 2000; c++) { |
firewalk | 5:96fff32333e8 | 233 | if (a[c] > max) { |
firewalk | 5:96fff32333e8 | 234 | index = c; |
firewalk | 5:96fff32333e8 | 235 | max = a[c]; |
firewalk | 5:96fff32333e8 | 236 | } |
firewalk | 5:96fff32333e8 | 237 | } |
firewalk | 5:96fff32333e8 | 238 | return index; |
firewalk | 5:96fff32333e8 | 239 | } |
firewalk | 5:96fff32333e8 | 240 | |
firewalk | 5:96fff32333e8 | 241 | //SEND DATA TO THINGSPEAK VIA ESP8266 |
firewalk | 5:96fff32333e8 | 242 | void wifi_send(void){ |
firewalk | 5:96fff32333e8 | 243 | |
firewalk | 5:96fff32333e8 | 244 | strcpy(snd,"AT+CIPMODE=0");//Setting WiFi into MultiChannel mode |
firewalk | 5:96fff32333e8 | 245 | wifi.SendCMD(snd); |
firewalk | 5:96fff32333e8 | 246 | //pc.printf(snd); |
firewalk | 5:96fff32333e8 | 247 | wifi.RcvReply(rcv, 3000); |
firewalk | 5:96fff32333e8 | 248 | //pc.printf("%s", rcv); |
firewalk | 5:96fff32333e8 | 249 | |
firewalk | 5:96fff32333e8 | 250 | //WIFI updates the Status to Thingspeak servers// |
firewalk | 5:96fff32333e8 | 251 | strcpy(snd,"AT+CIPMUX=1");//Setting WiFi into MultiChannel mode |
firewalk | 5:96fff32333e8 | 252 | wifi.SendCMD(snd); |
firewalk | 5:96fff32333e8 | 253 | //pc.printf(snd); |
firewalk | 5:96fff32333e8 | 254 | wifi.RcvReply(rcv, 3000); |
firewalk | 5:96fff32333e8 | 255 | //pc.printf("%s", rcv); |
firewalk | 5:96fff32333e8 | 256 | |
firewalk | 5:96fff32333e8 | 257 | |
firewalk | 5:96fff32333e8 | 258 | sprintf(snd,"AT+CIPSTART=4,\"TCP\",\"%s\",80",IP); //Initiate connection with THINGSPEAK server |
firewalk | 5:96fff32333e8 | 259 | wifi.SendCMD(snd); |
firewalk | 5:96fff32333e8 | 260 | //pc.printf(snd); |
firewalk | 5:96fff32333e8 | 261 | wifi.RcvReply(rcv, 3000); |
firewalk | 5:96fff32333e8 | 262 | //pc.printf("%s", rcv); |
firewalk | 5:96fff32333e8 | 263 | |
firewalk | 5:96fff32333e8 | 264 | strcpy(snd,"AT+CIPSEND=4,99"); //Send Number of open connections,Characters to send |
firewalk | 5:96fff32333e8 | 265 | wifi.SendCMD(snd); |
firewalk | 5:96fff32333e8 | 266 | //pc.printf(snd); |
firewalk | 5:96fff32333e8 | 267 | wifi.RcvReply(rcv, 3000); |
firewalk | 5:96fff32333e8 | 268 | //pc.printf("%s", rcv); |
firewalk | 5:96fff32333e8 | 269 | |
firewalk | 5:96fff32333e8 | 270 | |
firewalk | 5:96fff32333e8 | 271 | sprintf(snd,"GET /update?key=WHZBPNRREAXDKYII&field1=%2.2f&field2=%2.2f&field3=%4.2f&field4=%4.2f\r\n",tiltx, tilty, ch1[find_maximum(ch1)], ch2[find_maximum(ch2)]); //Post values to thingspeak |
firewalk | 5:96fff32333e8 | 272 | //pc.printf("String length %3d\r\n",strlen(snd)); |
firewalk | 5:96fff32333e8 | 273 | //pc.printf("%s",snd); |
firewalk | 5:96fff32333e8 | 274 | wifi.SendCMD(snd); |
firewalk | 5:96fff32333e8 | 275 | wifi.RcvReply(rcv, 3000); |
firewalk | 5:96fff32333e8 | 276 | //pc.printf("%s", rcv); |
firewalk | 5:96fff32333e8 | 277 | |
firewalk | 5:96fff32333e8 | 278 | |
firewalk | 5:96fff32333e8 | 279 | //wifi.SendCMD("AT+CIPCLOSE"); //Close the connection to server |
firewalk | 5:96fff32333e8 | 280 | //wifi.RcvReply(rcv, 3000); |
firewalk | 5:96fff32333e8 | 281 | //pc.printf("%s", rcv); |
firewalk | 5:96fff32333e8 | 282 | pc.printf("Data Sent \r\n"); |
firewalk | 5:96fff32333e8 | 283 | } |