ECE 4180 Project for Spring 2020

Dependencies:   mbed mbed-rtos SDFileSystem PinDetect ESP8266NodeMCUInterface

Committer:
kimberlylie99
Date:
Fri May 01 18:43:13 2020 +0000
Revision:
1:5ae291085f75
Parent:
0:b97c07227845
Edit Main.cpp;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kimberlylie99 0:b97c07227845 1 #include "mbed.h"
kimberlylie99 0:b97c07227845 2 #include "uLCD_4DGL.h"
kimberlylie99 0:b97c07227845 3 #include "ultrasonic.h"
kimberlylie99 0:b97c07227845 4 #include "rtos.h"
kimberlylie99 0:b97c07227845 5 #include "PinDetect.h"
kimberlylie99 0:b97c07227845 6 #include "SDFileSystem.h"
kimberlylie99 0:b97c07227845 7 #include "wave_player.h"
kimberlylie99 0:b97c07227845 8 #include "PowerControl/PowerControl.h"
kimberlylie99 0:b97c07227845 9 #include "PowerControl/EthernetPowerControl.h"
kimberlylie99 0:b97c07227845 10 #include <iostream>
kimberlylie99 0:b97c07227845 11 #include <string>
kimberlylie99 0:b97c07227845 12 #include <sstream>
kimberlylie99 0:b97c07227845 13 #include <time.h>
kimberlylie99 0:b97c07227845 14
kimberlylie99 0:b97c07227845 15 // --------------------------------------- Pin Declarations ---------------------------------------
kimberlylie99 0:b97c07227845 16 // Pins used for WiFi
kimberlylie99 0:b97c07227845 17 Serial pc(USBTX, USBRX);
kimberlylie99 0:b97c07227845 18 Serial esp(p9, p10); // tx, rx
kimberlylie99 0:b97c07227845 19 DigitalOut reset(p26);
kimberlylie99 0:b97c07227845 20 Timer t;
kimberlylie99 0:b97c07227845 21
kimberlylie99 0:b97c07227845 22 // Pins used for uLCD and Sonar
kimberlylie99 0:b97c07227845 23 uLCD_4DGL uLCD(p28, p27, p29); // serial tx, serial rx, reset pin;
kimberlylie99 0:b97c07227845 24 DigitalOut led1(LED1);
kimberlylie99 0:b97c07227845 25 PinDetect pb(p25);
kimberlylie99 0:b97c07227845 26 Mutex howMany;
kimberlylie99 0:b97c07227845 27
kimberlylie99 0:b97c07227845 28 // Pins used for SD card and speaker
kimberlylie99 0:b97c07227845 29 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
kimberlylie99 0:b97c07227845 30 AnalogOut DACout(p18);
kimberlylie99 0:b97c07227845 31 wave_player waver(&DACout);
kimberlylie99 0:b97c07227845 32
kimberlylie99 0:b97c07227845 33 // Pins used for Bluetooth
kimberlylie99 0:b97c07227845 34 RawSerial blue(p13,p14);
kimberlylie99 0:b97c07227845 35
kimberlylie99 0:b97c07227845 36 // --------------------------------------- Variable Declarations ---------------------------------------
kimberlylie99 0:b97c07227845 37 // Variables used for WiFi
kimberlylie99 0:b97c07227845 38 int lcount,lended,ltimeout;
kimberlylie99 0:b97c07227845 39 char buf[2024];
kimberlylie99 0:b97c07227845 40 char snd[1024];
kimberlylie99 1:5ae291085f75 41 char ssid[32] = "ssid"; // enter WiFi router ssid inside the quotes
kimberlylie99 1:5ae291085f75 42 char pwd [32] = "password"; // enter WiFi router password inside the quotes
kimberlylie99 0:b97c07227845 43
kimberlylie99 0:b97c07227845 44 // Variables used for uLCD and Sonar
kimberlylie99 0:b97c07227845 45 int year, month, day, hr, mn, sec;
kimberlylie99 0:b97c07227845 46 int howManyTodayold = 0;
kimberlylie99 0:b97c07227845 47 int howManyToday = 0;
kimberlylie99 0:b97c07227845 48 int dailyLimit;
kimberlylie99 0:b97c07227845 49 double increment = 0; // DEFAULT: USE DATABASE TO UPDATE THE AMOUNT
kimberlylie99 0:b97c07227845 50 std::string foodName = ""; // so save the food name
kimberlylie99 0:b97c07227845 51 std::string macroName = ""; // to save user's desired macro
kimberlylie99 0:b97c07227845 52 std::string daily = ""; // to save daily amount
kimberlylie99 0:b97c07227845 53 std:: string stringTime = ""; // to save current time and date
kimberlylie99 0:b97c07227845 54 std:: string todayIs = "";
kimberlylie99 0:b97c07227845 55
kimberlylie99 0:b97c07227845 56 // --------------------------------------- Function Declarations ---------------------------------------
kimberlylie99 0:b97c07227845 57 // Function declarations for WiFi
kimberlylie99 0:b97c07227845 58 double queryMFP(string, string);
kimberlylie99 0:b97c07227845 59 double MFP_LookupTest(string, string);
kimberlylie99 0:b97c07227845 60 void SendCMD(),getreply(),ESPconfig();
kimberlylie99 0:b97c07227845 61
kimberlylie99 0:b97c07227845 62 // Function declarations for uLCD and Sonar
kimberlylie99 0:b97c07227845 63 time_t asUnixTime(int, int, int, int, int, int);
kimberlylie99 0:b97c07227845 64 void dist(int);
kimberlylie99 0:b97c07227845 65 void updateHowManyToday(void);
kimberlylie99 0:b97c07227845 66
kimberlylie99 0:b97c07227845 67 // Function declarations for speaker and sd card
kimberlylie99 0:b97c07227845 68 void play_song();
kimberlylie99 0:b97c07227845 69 void updateTime();
kimberlylie99 0:b97c07227845 70
kimberlylie99 0:b97c07227845 71 // --------------------------------------- Begin Code ---------------------------------------
kimberlylie99 0:b97c07227845 72 // Functions used for WiFi
kimberlylie99 0:b97c07227845 73 double queryMFP(string food, string macro)
kimberlylie99 0:b97c07227845 74 {
kimberlylie99 0:b97c07227845 75 wait(1);
kimberlylie99 0:b97c07227845 76 strcpy(snd,"srv = net.createConnection(net.TCP, 0)\r\n");
kimberlylie99 0:b97c07227845 77 SendCMD();
kimberlylie99 0:b97c07227845 78 wait(1);
kimberlylie99 0:b97c07227845 79 strcpy(snd,"srv:on(\"receive\", function(sck, c) print(c) end)\r\n");
kimberlylie99 0:b97c07227845 80 SendCMD();
kimberlylie99 0:b97c07227845 81 wait(1);
kimberlylie99 0:b97c07227845 82 strcpy(snd,"srv:connect(80,\"spectrosam.org\")\r\n");
kimberlylie99 0:b97c07227845 83 SendCMD();
kimberlylie99 0:b97c07227845 84 wait(1);
kimberlylie99 0:b97c07227845 85 sprintf(snd, "sck:send(\"GET /trial.php?query=%s HTTP/1.1\r\nHost: http://spectrosam.org/\r\nAccept: */*\r\n\r\n\")", food);
kimberlylie99 0:b97c07227845 86 SendCMD();
kimberlylie99 0:b97c07227845 87 wait(1);
kimberlylie99 0:b97c07227845 88 ltimeout=15;
kimberlylie99 0:b97c07227845 89 getreply();
kimberlylie99 0:b97c07227845 90 pc.printf(buf);
kimberlylie99 0:b97c07227845 91
kimberlylie99 0:b97c07227845 92 string resp(buf);
kimberlylie99 0:b97c07227845 93 size_t found = resp.find(macro);
kimberlylie99 0:b97c07227845 94 int start = found + macro.size() + 2; //after finding the macro string, go to the end of it, and add two for the quotes and colon
kimberlylie99 0:b97c07227845 95 int end = start + 3; // D.D of macro value
kimberlylie99 0:b97c07227845 96 string input = resp.substr(start,end);
kimberlylie99 0:b97c07227845 97
kimberlylie99 0:b97c07227845 98 // convert string to char array
kimberlylie99 0:b97c07227845 99 int n = input.length();
kimberlylie99 0:b97c07227845 100 // declaring character array
kimberlylie99 0:b97c07227845 101 char char_array[n + 1];
kimberlylie99 0:b97c07227845 102 // copying the contents of the
kimberlylie99 0:b97c07227845 103 // string to char array
kimberlylie99 0:b97c07227845 104 strcpy(char_array, input.c_str());
kimberlylie99 0:b97c07227845 105 return atoll(char_array);
kimberlylie99 0:b97c07227845 106 }
kimberlylie99 0:b97c07227845 107
kimberlylie99 0:b97c07227845 108 void ESPconfig()
kimberlylie99 0:b97c07227845 109 {
kimberlylie99 0:b97c07227845 110 wait(5);
kimberlylie99 0:b97c07227845 111 pc.printf("\f---------- Starting ESP Config ----------\r\n\n");
kimberlylie99 0:b97c07227845 112 strcpy(snd,".\r\n.\r\n");
kimberlylie99 0:b97c07227845 113 SendCMD();
kimberlylie99 0:b97c07227845 114 wait(1);
kimberlylie99 0:b97c07227845 115 pc.printf("---------- Reset & get Firmware ----------\r\n");
kimberlylie99 0:b97c07227845 116 strcpy(snd,"node.restart()\r\n");
kimberlylie99 0:b97c07227845 117 SendCMD();
kimberlylie99 0:b97c07227845 118 ltimeout=5;
kimberlylie99 0:b97c07227845 119 getreply();
kimberlylie99 0:b97c07227845 120 pc.printf(buf);
kimberlylie99 0:b97c07227845 121 wait(2);
kimberlylie99 0:b97c07227845 122
kimberlylie99 0:b97c07227845 123 // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station)
kimberlylie99 0:b97c07227845 124 pc.printf("\n---------- Setting Mode ----------\r\n");
kimberlylie99 0:b97c07227845 125 strcpy(snd, "wifi.setmode(wifi.STATION)\r\n");
kimberlylie99 0:b97c07227845 126 SendCMD();
kimberlylie99 0:b97c07227845 127 ltimeout=4;
kimberlylie99 0:b97c07227845 128 getreply();
kimberlylie99 0:b97c07227845 129 pc.printf(buf);
kimberlylie99 0:b97c07227845 130 wait(2);
kimberlylie99 0:b97c07227845 131
kimberlylie99 0:b97c07227845 132 pc.printf("\n---------- Connecting to AP ----------\r\n");
kimberlylie99 0:b97c07227845 133 pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd);
kimberlylie99 0:b97c07227845 134 strcpy(snd, "wifi.sta.config(\"");
kimberlylie99 0:b97c07227845 135 strcat(snd, ssid);
kimberlylie99 0:b97c07227845 136 strcat(snd, "\",\"");
kimberlylie99 0:b97c07227845 137 strcat(snd, pwd);
kimberlylie99 0:b97c07227845 138 strcat(snd, "\")\r\n");
kimberlylie99 0:b97c07227845 139 SendCMD();
kimberlylie99 0:b97c07227845 140 ltimeout=10;
kimberlylie99 0:b97c07227845 141 getreply();
kimberlylie99 0:b97c07227845 142 pc.printf(buf);
kimberlylie99 0:b97c07227845 143
kimberlylie99 0:b97c07227845 144 wait(5);
kimberlylie99 0:b97c07227845 145
kimberlylie99 0:b97c07227845 146 }
kimberlylie99 0:b97c07227845 147
kimberlylie99 0:b97c07227845 148 void SendCMD()
kimberlylie99 0:b97c07227845 149 {
kimberlylie99 0:b97c07227845 150 esp.printf("%s", snd);
kimberlylie99 0:b97c07227845 151 }
kimberlylie99 0:b97c07227845 152
kimberlylie99 0:b97c07227845 153 void getreply()
kimberlylie99 0:b97c07227845 154 {
kimberlylie99 0:b97c07227845 155 memset(buf, '\0', sizeof(buf));
kimberlylie99 0:b97c07227845 156 t.start();
kimberlylie99 0:b97c07227845 157 lended=0;
kimberlylie99 0:b97c07227845 158 lcount=0;
kimberlylie99 0:b97c07227845 159 while(!lended) {
kimberlylie99 0:b97c07227845 160 if(esp.readable()) {
kimberlylie99 0:b97c07227845 161 buf[lcount] = esp.getc();
kimberlylie99 0:b97c07227845 162 lcount++;
kimberlylie99 0:b97c07227845 163 }
kimberlylie99 0:b97c07227845 164 if(t.read() > ltimeout) {
kimberlylie99 0:b97c07227845 165 lended = 1;
kimberlylie99 0:b97c07227845 166 t.stop();
kimberlylie99 0:b97c07227845 167 t.reset();
kimberlylie99 0:b97c07227845 168 }
kimberlylie99 0:b97c07227845 169 }
kimberlylie99 0:b97c07227845 170 }
kimberlylie99 0:b97c07227845 171
kimberlylie99 0:b97c07227845 172 time_t asUnixTime(int year, int mon, int mday, int hour, int min, int sec) {
kimberlylie99 0:b97c07227845 173 struct tm t;
kimberlylie99 0:b97c07227845 174 t.tm_year = year - 1900;
kimberlylie99 0:b97c07227845 175 t.tm_mon = mon - 1; // convert to 0 based month
kimberlylie99 0:b97c07227845 176 t.tm_mday = mday;
kimberlylie99 0:b97c07227845 177 t.tm_hour = hour;
kimberlylie99 0:b97c07227845 178 t.tm_min = min;
kimberlylie99 0:b97c07227845 179 t.tm_sec = sec;
kimberlylie99 0:b97c07227845 180 t.tm_isdst = -1; // Is Daylight saving time on? 1 = yes, 0 = no, -1 = unknown
kimberlylie99 0:b97c07227845 181
kimberlylie99 0:b97c07227845 182 return mktime(&t); // returns seconds elapsed since January 1, 1970 (begin of the Epoch)
kimberlylie99 0:b97c07227845 183 }
kimberlylie99 0:b97c07227845 184
kimberlylie99 0:b97c07227845 185 void dist(int distance)
kimberlylie99 0:b97c07227845 186 {
kimberlylie99 0:b97c07227845 187 //put code here to execute when the distance has changed
kimberlylie99 0:b97c07227845 188 led1 = !led1;
kimberlylie99 0:b97c07227845 189 howMany.lock();
kimberlylie99 0:b97c07227845 190 if (howManyToday != howManyTodayold) {
kimberlylie99 0:b97c07227845 191 updateTime();
kimberlylie99 0:b97c07227845 192 if (howManyToday >= dailyLimit) {
kimberlylie99 0:b97c07227845 193 uLCD.cls();
kimberlylie99 0:b97c07227845 194 uLCD.text_width(2);
kimberlylie99 0:b97c07227845 195 uLCD.text_height(2);
kimberlylie99 0:b97c07227845 196 uLCD.filled_rectangle(0,0,127,127,RED);
kimberlylie99 0:b97c07227845 197 uLCD.filled_rectangle(15,10,110,90,0x50C878);
kimberlylie99 0:b97c07227845 198 uLCD.textbackground_color(0x50C878);
kimberlylie99 0:b97c07227845 199 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 200 uLCD.locate(2,1);
kimberlylie99 0:b97c07227845 201 uLCD.printf("Hello!");
kimberlylie99 0:b97c07227845 202 uLCD.locate(3,3);
kimberlylie99 0:b97c07227845 203 uLCD.text_width(1);
kimberlylie99 0:b97c07227845 204 uLCD.text_height(2);
kimberlylie99 0:b97c07227845 205 uLCD.printf("%d / %d\n", howManyToday, dailyLimit);
kimberlylie99 0:b97c07227845 206 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 207 uLCD.text_width(1);
kimberlylie99 0:b97c07227845 208 uLCD.text_height(2);
kimberlylie99 0:b97c07227845 209 uLCD.textbackground_color(RED);
kimberlylie99 0:b97c07227845 210 uLCD.locate(6,14);
kimberlylie99 0:b97c07227845 211 uLCD.printf("%s", macroName);
kimberlylie99 0:b97c07227845 212
kimberlylie99 0:b97c07227845 213 // Play warning song
kimberlylie99 0:b97c07227845 214 play_song();
kimberlylie99 0:b97c07227845 215
kimberlylie99 0:b97c07227845 216 } else {
kimberlylie99 0:b97c07227845 217 uLCD.cls();
kimberlylie99 0:b97c07227845 218 uLCD.text_width(2);
kimberlylie99 0:b97c07227845 219 uLCD.text_height(2);
kimberlylie99 0:b97c07227845 220 uLCD.filled_rectangle(0,0,127,127,0x86c5da);
kimberlylie99 0:b97c07227845 221 uLCD.filled_rectangle(15,10,110,90,0x50C878);
kimberlylie99 0:b97c07227845 222 uLCD.textbackground_color(0x50C878);
kimberlylie99 0:b97c07227845 223 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 224 uLCD.locate(2,1);
kimberlylie99 0:b97c07227845 225 uLCD.printf("Hello!");
kimberlylie99 0:b97c07227845 226 uLCD.locate(3,3);
kimberlylie99 0:b97c07227845 227 uLCD.text_width(1);
kimberlylie99 0:b97c07227845 228 uLCD.text_height(2);
kimberlylie99 0:b97c07227845 229 uLCD.printf("%d / %d\n", howManyToday, dailyLimit);
kimberlylie99 0:b97c07227845 230 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 231 uLCD.text_width(1);
kimberlylie99 0:b97c07227845 232 uLCD.text_height(1);
kimberlylie99 0:b97c07227845 233 uLCD.locate(6,14);
kimberlylie99 0:b97c07227845 234 uLCD.textbackground_color(0x86c5da);
kimberlylie99 0:b97c07227845 235 uLCD.printf("%s", macroName);
kimberlylie99 0:b97c07227845 236
kimberlylie99 0:b97c07227845 237 }
kimberlylie99 0:b97c07227845 238 howManyTodayold = howManyToday;
kimberlylie99 0:b97c07227845 239 }
kimberlylie99 0:b97c07227845 240 howMany.unlock();
kimberlylie99 0:b97c07227845 241 //pc.printf("Distance %d mm\r\n", distance);
kimberlylie99 0:b97c07227845 242 }
kimberlylie99 0:b97c07227845 243
kimberlylie99 0:b97c07227845 244 ultrasonic mu(p11, p12, .1, 1, &dist); //Set the trigger pin to D12 and the echo pin to D13
kimberlylie99 0:b97c07227845 245 //have updates every .1 seconds and a timeout after 1
kimberlylie99 0:b97c07227845 246 //second, and call dist when the distance changes
kimberlylie99 0:b97c07227845 247
kimberlylie99 0:b97c07227845 248 void updateHowManyToday(void) {
kimberlylie99 0:b97c07227845 249 if (mu.getCurrentDistance() < 50) {
kimberlylie99 0:b97c07227845 250 howMany.lock();
kimberlylie99 0:b97c07227845 251 howManyTodayold = howManyToday;
kimberlylie99 0:b97c07227845 252 howManyToday = howManyToday + (int)increment;
kimberlylie99 0:b97c07227845 253 howMany.unlock();
kimberlylie99 0:b97c07227845 254 }
kimberlylie99 0:b97c07227845 255 }
kimberlylie99 0:b97c07227845 256
kimberlylie99 0:b97c07227845 257 // Functions used for speaker and sd card
kimberlylie99 0:b97c07227845 258 void play_song() {
kimberlylie99 0:b97c07227845 259 std::string song = "/sd/NoNoNo3.wav";
kimberlylie99 0:b97c07227845 260 FILE *wave_file;
kimberlylie99 0:b97c07227845 261 wave_file=fopen(song.c_str(),"r");
kimberlylie99 0:b97c07227845 262 waver.play(wave_file);
kimberlylie99 0:b97c07227845 263 fclose(wave_file);
kimberlylie99 0:b97c07227845 264 }
kimberlylie99 0:b97c07227845 265
kimberlylie99 0:b97c07227845 266 void updateTime(){
kimberlylie99 0:b97c07227845 267 time_t curTime = time(NULL);
kimberlylie99 0:b97c07227845 268 FILE *fp = fopen("/sd/Logging.csv", "a");
kimberlylie99 0:b97c07227845 269 std:: string test = asctime(localtime(&curTime));
kimberlylie99 0:b97c07227845 270 if (todayIs.compare(test.substr(0,10)) != 0){
kimberlylie99 0:b97c07227845 271 howManyToday = 0;
kimberlylie99 0:b97c07227845 272 todayIs = test.substr(0,10);
kimberlylie99 0:b97c07227845 273 fprintf(fp, "\n%s\n\n", todayIs.c_str());
kimberlylie99 0:b97c07227845 274 }
kimberlylie99 0:b97c07227845 275 fprintf(fp, "%s, %d g, %s\n", foodName.c_str(), (int)increment, macroName.c_str());
kimberlylie99 0:b97c07227845 276 fclose(fp);
kimberlylie99 0:b97c07227845 277 }
kimberlylie99 0:b97c07227845 278
kimberlylie99 0:b97c07227845 279 int main() {
kimberlylie99 0:b97c07227845 280 // Start of uLCD code
kimberlylie99 0:b97c07227845 281 bool startUp = 1, name = 1, limit = 1, settingTime = 1;
kimberlylie99 0:b97c07227845 282 uLCD.cls();
kimberlylie99 0:b97c07227845 283 uLCD.filled_rectangle(0,0,127,127,0x86c5da);
kimberlylie99 0:b97c07227845 284 uLCD.line(0, 9, 127, 9, GREEN);
kimberlylie99 0:b97c07227845 285 uLCD.filled_rectangle(0,0,127,9,GREEN);
kimberlylie99 0:b97c07227845 286 uLCD.line(0, 118, 127, 118, GREEN);
kimberlylie99 0:b97c07227845 287 uLCD.filled_rectangle(0,118,127,127,GREEN);
kimberlylie99 0:b97c07227845 288 uLCD.textbackground_color(0x86c5da);
kimberlylie99 0:b97c07227845 289 uLCD.color(DGREY);
kimberlylie99 0:b97c07227845 290 uLCD.text_height(1.80);
kimberlylie99 0:b97c07227845 291
kimberlylie99 0:b97c07227845 292 uLCD.locate(4,2);
kimberlylie99 0:b97c07227845 293 uLCD.printf("WELCOME!");
kimberlylie99 0:b97c07227845 294 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 295 uLCD.locate(1,4);
kimberlylie99 0:b97c07227845 296 uLCD.printf("Please enter the name");
kimberlylie99 0:b97c07227845 297 uLCD.printf(" of the food.");
kimberlylie99 0:b97c07227845 298 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 299 uLCD.locate(1,7);
kimberlylie99 0:b97c07227845 300
kimberlylie99 0:b97c07227845 301 while (name) {
kimberlylie99 0:b97c07227845 302 if (blue.readable()) {
kimberlylie99 0:b97c07227845 303 char v = blue.getc();
kimberlylie99 0:b97c07227845 304 if (v == '!'){
kimberlylie99 0:b97c07227845 305 name = 0;
kimberlylie99 0:b97c07227845 306 } else if (int(v) == 8) {
kimberlylie99 0:b97c07227845 307 foodName.erase(foodName.end()-1);
kimberlylie99 0:b97c07227845 308 } else {
kimberlylie99 0:b97c07227845 309 foodName.push_back(v);
kimberlylie99 0:b97c07227845 310 uLCD.printf("%c" , v);
kimberlylie99 0:b97c07227845 311 }
kimberlylie99 0:b97c07227845 312 }
kimberlylie99 0:b97c07227845 313 }
kimberlylie99 0:b97c07227845 314
kimberlylie99 0:b97c07227845 315 uLCD.cls();
kimberlylie99 0:b97c07227845 316 uLCD.filled_rectangle(0,0,127,127,0x86c5da);
kimberlylie99 0:b97c07227845 317 uLCD.line(0, 9, 127, 9, GREEN);
kimberlylie99 0:b97c07227845 318 uLCD.filled_rectangle(0,0,127,9,GREEN);
kimberlylie99 0:b97c07227845 319 uLCD.line(0, 118, 127, 118, GREEN);
kimberlylie99 0:b97c07227845 320 uLCD.filled_rectangle(0,118,127,127,GREEN);
kimberlylie99 0:b97c07227845 321 uLCD.textbackground_color(0x86c5da);
kimberlylie99 0:b97c07227845 322 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 323 uLCD.text_height(1);
kimberlylie99 0:b97c07227845 324
kimberlylie99 0:b97c07227845 325 uLCD.locate(1,1);
kimberlylie99 0:b97c07227845 326 uLCD.printf("What macro are you monitoring? : \n\n1. Carbs\n2. Protein\n3. Fat \n4. Calories \n");
kimberlylie99 0:b97c07227845 327 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 328 while(startUp) {
kimberlylie99 0:b97c07227845 329 if (blue.readable() ){
kimberlylie99 0:b97c07227845 330 char v = blue.getc();
kimberlylie99 0:b97c07227845 331 if (v == '1') {
kimberlylie99 0:b97c07227845 332 startUp = 0;
kimberlylie99 0:b97c07227845 333 macroName = "Carbs";
kimberlylie99 0:b97c07227845 334 } else if (v == '2') {
kimberlylie99 0:b97c07227845 335 startUp = 0;
kimberlylie99 0:b97c07227845 336 macroName = "Protein";
kimberlylie99 0:b97c07227845 337 } else if (v == '3') {
kimberlylie99 0:b97c07227845 338 startUp = 0;
kimberlylie99 0:b97c07227845 339 macroName = "Fat";
kimberlylie99 0:b97c07227845 340 } else if (v == '4') {
kimberlylie99 0:b97c07227845 341 startUp = 0;
kimberlylie99 0:b97c07227845 342 macroName = "Calories";
kimberlylie99 0:b97c07227845 343
kimberlylie99 0:b97c07227845 344 }
kimberlylie99 0:b97c07227845 345 }
kimberlylie99 0:b97c07227845 346 }
kimberlylie99 0:b97c07227845 347
kimberlylie99 0:b97c07227845 348 uLCD.cls();
kimberlylie99 0:b97c07227845 349 uLCD.filled_rectangle(0,0,127,127,0x86c5da);
kimberlylie99 0:b97c07227845 350 uLCD.line(0, 9, 127, 9, GREEN);
kimberlylie99 0:b97c07227845 351 uLCD.filled_rectangle(0,0,127,9,GREEN);
kimberlylie99 0:b97c07227845 352 uLCD.line(0, 118, 127, 118, GREEN);
kimberlylie99 0:b97c07227845 353 uLCD.filled_rectangle(0,118,127,127,GREEN);
kimberlylie99 0:b97c07227845 354 uLCD.textbackground_color(0x86c5da);
kimberlylie99 0:b97c07227845 355 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 356 uLCD.locate(1,2);
kimberlylie99 0:b97c07227845 357 uLCD.text_height(1);
kimberlylie99 0:b97c07227845 358
kimberlylie99 0:b97c07227845 359 uLCD.printf("What will be your daily limit?\n ");
kimberlylie99 0:b97c07227845 360 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 361
kimberlylie99 0:b97c07227845 362 while (limit) {
kimberlylie99 0:b97c07227845 363 if (blue.readable()){
kimberlylie99 0:b97c07227845 364 char v = blue.getc();
kimberlylie99 0:b97c07227845 365 if (v == '!') {
kimberlylie99 0:b97c07227845 366 limit = 0;
kimberlylie99 0:b97c07227845 367 } else {
kimberlylie99 0:b97c07227845 368 daily.push_back(v);
kimberlylie99 0:b97c07227845 369 uLCD.printf("%c" , v);
kimberlylie99 0:b97c07227845 370 }
kimberlylie99 0:b97c07227845 371 }
kimberlylie99 0:b97c07227845 372
kimberlylie99 0:b97c07227845 373 }
kimberlylie99 0:b97c07227845 374
kimberlylie99 0:b97c07227845 375 std::istringstream iss (daily);
kimberlylie99 0:b97c07227845 376 iss >> dailyLimit;
kimberlylie99 0:b97c07227845 377
kimberlylie99 0:b97c07227845 378 uLCD.cls();
kimberlylie99 0:b97c07227845 379 uLCD.filled_rectangle(0,0,127,127,0x86c5da);
kimberlylie99 0:b97c07227845 380 uLCD.line(0, 9, 127, 9, GREEN);
kimberlylie99 0:b97c07227845 381 uLCD.filled_rectangle(0,0,127,9,GREEN);
kimberlylie99 0:b97c07227845 382 uLCD.line(0, 118, 127, 118, GREEN);
kimberlylie99 0:b97c07227845 383 uLCD.filled_rectangle(0,118,127,127,GREEN);
kimberlylie99 0:b97c07227845 384 uLCD.textbackground_color(0x86c5da);
kimberlylie99 0:b97c07227845 385 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 386 uLCD.text_height(1);
kimberlylie99 0:b97c07227845 387 uLCD.locate(1,1);
kimberlylie99 0:b97c07227845 388 uLCD.printf("Please enter date and military time\nMM/DD/YYYY HH:MM:SS)\n");
kimberlylie99 0:b97c07227845 389 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 390
kimberlylie99 0:b97c07227845 391 while (settingTime) {
kimberlylie99 0:b97c07227845 392 if (blue.readable()){
kimberlylie99 0:b97c07227845 393 char v = blue.getc();
kimberlylie99 0:b97c07227845 394 if (v == '!') {
kimberlylie99 0:b97c07227845 395 settingTime = 0;
kimberlylie99 0:b97c07227845 396 } else {
kimberlylie99 0:b97c07227845 397 stringTime.push_back(v);
kimberlylie99 0:b97c07227845 398 uLCD.printf("%c" , v);
kimberlylie99 0:b97c07227845 399 }
kimberlylie99 0:b97c07227845 400 }
kimberlylie99 0:b97c07227845 401 }
kimberlylie99 0:b97c07227845 402
kimberlylie99 0:b97c07227845 403 // Start of WiFi code
kimberlylie99 0:b97c07227845 404 reset=0;
kimberlylie99 0:b97c07227845 405 pc.baud(9600);
kimberlylie99 0:b97c07227845 406 pc.printf("\f\n\r-------------ESP8266 Hardware Reset-------------\n\r");
kimberlylie99 0:b97c07227845 407 wait(0.5);
kimberlylie99 0:b97c07227845 408 reset=1;
kimberlylie99 0:b97c07227845 409 ltimeout=2;
kimberlylie99 0:b97c07227845 410 getreply();
kimberlylie99 0:b97c07227845 411 esp.baud(9600); // ESP baud rate
kimberlylie99 0:b97c07227845 412 ESPconfig();
kimberlylie99 0:b97c07227845 413 increment = queryMFP(foodName, macro);
kimberlylie99 0:b97c07227845 414
kimberlylie99 0:b97c07227845 415 // After calling database
kimberlylie99 0:b97c07227845 416 // TIME
kimberlylie99 0:b97c07227845 417 // converts epoch time to day, month, year
kimberlylie99 0:b97c07227845 418 std::istringstream mon (stringTime.substr(0,2));
kimberlylie99 0:b97c07227845 419 mon >> month;
kimberlylie99 0:b97c07227845 420 std::istringstream d (stringTime.substr(3,2));
kimberlylie99 0:b97c07227845 421 d >> day;
kimberlylie99 0:b97c07227845 422 std::istringstream y (stringTime.substr(6,4));
kimberlylie99 0:b97c07227845 423 y >> year;
kimberlylie99 0:b97c07227845 424 std::istringstream h (stringTime.substr(11,2));
kimberlylie99 0:b97c07227845 425 h >> hr;
kimberlylie99 0:b97c07227845 426 std::istringstream m (stringTime.substr(14,2));
kimberlylie99 0:b97c07227845 427 m >> mn;
kimberlylie99 0:b97c07227845 428 std::istringstream sc (stringTime.substr(17,2));
kimberlylie99 0:b97c07227845 429 sc >> sec;
kimberlylie99 0:b97c07227845 430
kimberlylie99 0:b97c07227845 431 time_t result = asUnixTime(year, month, day, hr, mn, sec);
kimberlylie99 0:b97c07227845 432
kimberlylie99 0:b97c07227845 433 pc.printf("%s\n",asctime(localtime(&result)));
kimberlylie99 0:b97c07227845 434
kimberlylie99 0:b97c07227845 435 set_time(result);
kimberlylie99 0:b97c07227845 436
kimberlylie99 0:b97c07227845 437 todayIs = asctime(localtime(&result));
kimberlylie99 0:b97c07227845 438 todayIs = todayIs.substr(0,3);
kimberlylie99 0:b97c07227845 439
kimberlylie99 0:b97c07227845 440 uLCD.cls();
kimberlylie99 0:b97c07227845 441 uLCD.filled_rectangle(0,0,127,127,0x86c5da);
kimberlylie99 0:b97c07227845 442 uLCD.filled_rectangle(15,10,110,90,0x50C878);
kimberlylie99 0:b97c07227845 443 uLCD.textbackground_color(0x50C878);
kimberlylie99 0:b97c07227845 444 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 445 uLCD.text_width(2);
kimberlylie99 0:b97c07227845 446 uLCD.text_height(2);
kimberlylie99 0:b97c07227845 447 uLCD.locate(2,1);
kimberlylie99 0:b97c07227845 448 uLCD.printf("Hello!");
kimberlylie99 0:b97c07227845 449 uLCD.locate(3,3);
kimberlylie99 0:b97c07227845 450 uLCD.text_width(1);
kimberlylie99 0:b97c07227845 451 uLCD.text_height(2);
kimberlylie99 0:b97c07227845 452 uLCD.printf("%d / %d", howManyToday, dailyLimit);
kimberlylie99 0:b97c07227845 453 uLCD.color(BLACK);
kimberlylie99 0:b97c07227845 454 uLCD.textbackground_color(0x86c5da);
kimberlylie99 0:b97c07227845 455 uLCD.text_width(1);
kimberlylie99 0:b97c07227845 456 uLCD.text_height(1);
kimberlylie99 0:b97c07227845 457 uLCD.locate(6,14);
kimberlylie99 0:b97c07227845 458 uLCD.printf("%s", macroName);
kimberlylie99 0:b97c07227845 459
kimberlylie99 0:b97c07227845 460 pc.baud(9600);
kimberlylie99 0:b97c07227845 461 mu.startUpdates();//start measuring the distance
kimberlylie99 0:b97c07227845 462 pb.attach_deasserted(&updateHowManyToday);
kimberlylie99 0:b97c07227845 463 pb.mode(PullUp);
kimberlylie99 0:b97c07227845 464 pb.setSampleFrequency();
kimberlylie99 0:b97c07227845 465
kimberlylie99 0:b97c07227845 466 //checkTime.attach(&updateTime, 10);
kimberlylie99 0:b97c07227845 467
kimberlylie99 0:b97c07227845 468 // PWR MNGT
kimberlylie99 0:b97c07227845 469 PHY_PowerDown();
kimberlylie99 0:b97c07227845 470 //Peripheral_PowerDown(0xFEF6FFCF);
kimberlylie99 0:b97c07227845 471 Peripheral_PowerDown(LPC1768_PCONP_PCTIM0); // Timer/Counter 0
kimberlylie99 0:b97c07227845 472 Peripheral_PowerDown(LPC1768_PCONP_PCTIM1); // Timer/Counter 1
kimberlylie99 0:b97c07227845 473 Peripheral_PowerDown(LPC1768_PCONP_PCUART0); //UART 0
kimberlylie99 0:b97c07227845 474 Peripheral_PowerDown(LPC1768_PCONP_PCUART1); //UART 1
kimberlylie99 0:b97c07227845 475 Peripheral_PowerDown(LPC1768_PCONP_PCPWM1); // PWM
kimberlylie99 0:b97c07227845 476 Peripheral_PowerDown(LPC1768_PCONP_PCI2C0); //bit 7: I2c interface
kimberlylie99 0:b97c07227845 477 Peripheral_PowerDown(LPC1768_PCONP_PCSPI); //SPI
kimberlylie99 0:b97c07227845 478 Peripheral_PowerDown(LPC1768_PCONP_PCRTC); //RTC
kimberlylie99 0:b97c07227845 479 Peripheral_PowerDown(LPC1768_PCONP_PCSSP1); //SSP
kimberlylie99 0:b97c07227845 480
kimberlylie99 0:b97c07227845 481 // bit 11: Reserved
kimberlylie99 0:b97c07227845 482 //Peripheral_PowerDown(LPC1768_PCONP_PCADC); // bit12: A/D converter power/clock enable
kimberlylie99 0:b97c07227845 483 Peripheral_PowerDown(LPC1768_PCONP_PCCAN1); // bit 13: CAN controller 1 power/clock enable
kimberlylie99 0:b97c07227845 484 Peripheral_PowerDown(LPC1768_PCONP_PCCAN2); // bit 14: CAN controller 2 power/clock enable
kimberlylie99 0:b97c07227845 485
kimberlylie99 0:b97c07227845 486 // bit 15: PCGPIO: GPIOs power/clock enable
kimberlylie99 0:b97c07227845 487 //Peripheral_PowerDown(LPC1768_PCONP_PCGPIO);
kimberlylie99 0:b97c07227845 488
kimberlylie99 0:b97c07227845 489 Peripheral_PowerDown(LPC1768_PCONP_PCRIT); //bit 16: Repetitive interrupt timer power/clock enable
kimberlylie99 0:b97c07227845 490 Peripheral_PowerDown(LPC1768_PCONP_PCMCPWM); // bit 17: Motor control PWM power/clock enable
kimberlylie99 0:b97c07227845 491 Peripheral_PowerDown(LPC1768_PCONP_PCQEI); // bit 18: Quadrature encoder interface power/clock enable
kimberlylie99 0:b97c07227845 492 Peripheral_PowerDown(LPC1768_PCONP_PCI2C1); // bit 19: I2C interface 1 power/clock enable
kimberlylie99 0:b97c07227845 493
kimberlylie99 0:b97c07227845 494 // bit 20: Reserved
kimberlylie99 0:b97c07227845 495 Peripheral_PowerDown(LPC1768_PCONP_PCSSP0); // bit 21: PCSSP0: SSP interface 0 power/clock enable
kimberlylie99 0:b97c07227845 496 Peripheral_PowerDown(LPC1768_PCONP_PCTIM2); // bit 22: PCTIM2: Timer 2 power/clock enable
kimberlylie99 0:b97c07227845 497
kimberlylie99 0:b97c07227845 498 // bit 23: PCTIM3: Timer 3 power/clock enable
kimberlylie99 0:b97c07227845 499 //Peripheral_PowerDown(LPC1768_PCONP_PCQTIM3);
kimberlylie99 0:b97c07227845 500
kimberlylie99 0:b97c07227845 501 // bit 24: PCUART2: UART 2 power/clock enable
kimberlylie99 0:b97c07227845 502 //Peripheral_PowerDown(LPC1768_PCONP_PCUART2);
kimberlylie99 0:b97c07227845 503
kimberlylie99 0:b97c07227845 504 Peripheral_PowerDown(LPC1768_PCONP_PCUART3); // bit 25: UART 3 power/clock enable
kimberlylie99 0:b97c07227845 505 Peripheral_PowerDown(LPC1768_PCONP_PCI2C2); // bit 26: I2C interface 2 power/clock enable
kimberlylie99 0:b97c07227845 506 Peripheral_PowerDown(LPC1768_PCONP_PCI2S); // bit 27: PCI2S: I2S interface power/clock enable
kimberlylie99 0:b97c07227845 507
kimberlylie99 0:b97c07227845 508 // bit 28: Reserved
kimberlylie99 0:b97c07227845 509 Peripheral_PowerDown(LPC1768_PCONP_PCGPDMA); // bit 29:GP DMA function power/clock enable
kimberlylie99 0:b97c07227845 510 Peripheral_PowerDown(LPC1768_PCONP_PCENET); // bit 30:Ethernet block power/clock enable
kimberlylie99 0:b97c07227845 511 Peripheral_PowerDown(LPC1768_PCONP_PCUSB); // bit 31: PCUSB: USB interface power/clock enable
kimberlylie99 0:b97c07227845 512
kimberlylie99 0:b97c07227845 513 // only BIT 23, 24, 15 need to be on, but htis ths isnt working
kimberlylie99 0:b97c07227845 514 //Peripheral_PowerDown(0xFFFEFE7F);
kimberlylie99 0:b97c07227845 515 //Peripheral_PowerDown(0x7BEEF677);
kimberlylie99 0:b97c07227845 516
kimberlylie99 0:b97c07227845 517 // Sonar code
kimberlylie99 0:b97c07227845 518 while(1)
kimberlylie99 0:b97c07227845 519 {
kimberlylie99 0:b97c07227845 520 //pc.printf("Distance %d mm\r\n", mu.getCurrentDistance());
kimberlylie99 0:b97c07227845 521 Sleep();
kimberlylie99 0:b97c07227845 522 mu.checkDistance(); //call checkDistance() as much as possible, as this is where
kimberlylie99 0:b97c07227845 523 //the class checks if dist needs to be called.
kimberlylie99 0:b97c07227845 524 wait(0.002);
kimberlylie99 0:b97c07227845 525 }
kimberlylie99 0:b97c07227845 526 }
kimberlylie99 0:b97c07227845 527
kimberlylie99 0:b97c07227845 528 // --------------------------------------- End Code ---------------------------------------