Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Revision:
9:d1691d971f63
Parent:
8:8b810c29eb7b
Child:
10:7c976b5a5e25
--- a/main.cpp	Mon Apr 20 13:16:26 2015 +0000
+++ b/main.cpp	Mon Apr 20 21:48:52 2015 +0000
@@ -79,22 +79,71 @@
 char Min[60];
 char PowerSaverTime[2]; // string to store the powerSaverTime value to display on the LCD
 char DataLoggerTime[2]; // string to store the time used for the logger to read data
+char buffer0[14];
+char buffer1[14];
+char buffer2[14];
+char buffer3[14];
+char buffer4[14];
+char buffer5[14];
+
+
+int state1=0; // for the startup menu
+int state1plus1 ;
+int state1plus2 ;
+int state1minus1 ;
+int state1minus2 ;
+
+int state2=0; // for the settings menu
+int state2plus1 ;
+int state2plus2 ;
+int state2minus1 ;
+int state2minus2 ;
+
+
+struct  State1 {
+    int output;
+    char title[12];
+    int nextState[2];
+};
+
+typedef const struct State1 STyp1;
+
+STyp1 fsmA[5] = {
+    {0,"Live Data",{1,4}},
+    {1,"Saved Data",{2,0}},
+    {2,"Forecast",{3,1}},
+    {3,"Alarms",{4,2}},
+    {4,"Settings",{0,3}},
+};
+struct  State2 {
+    int output;
+    char title[12];
+    int nextState[2];
+};
+typedef const struct State2 STyp2;
+
+STyp2 fsmB[5] = {
+    {0,"Date/Time",{1,4}},
+    {1,"Units",{2,0}},
+    {2,"Brightness",{3,1}},
+    {3,"Power",{4,2}},
+    {4,"Logger",{0,3}},
+};
+
 
 
 void button1Pressed()  //ISR to subtract 1 from the value of choice when the first button is pressed
 {
-    choice --;
-    leds = 1;
-
+    state1=fsmA[state1].nextState[1];
+    state2=fsmB[state2].nextState[1];
 }
 
 
 
 void button2Pressed() //ISR to add 1 to the value of the choice when the second button is pressed
 {
-    choice ++;
-    leds = 2 ;
-
+    state1=fsmA[state1].nextState[0];
+    state2=fsmB[state2].nextState[0];
 }
 
 
@@ -139,7 +188,6 @@
 
 
 
-
 void setTime() // sets the time every second
 {
 //print time for debugging
@@ -165,7 +213,17 @@
     }
 }
 
+void display()
+{
+    lcd.clear();
+    lcd.printString(bufferTime,48,0);
+    lcd.printString(buffer1,0,1);
+    lcd.printString(buffer2,6,2);
+    lcd.printString(buffer3,12,3);
+    lcd.printString(buffer4,6,4);
+    lcd.printString(buffer5,0,5);
 
+}
 
 
 
@@ -438,7 +496,7 @@
         switch (choice) {
             case 1 : {
                 lcd.clear();
-                leds = 1 ; 
+                leds = 1 ;
                 lcd.printString(bufferTime,48,0);
                 lcd.printString("Temperature",36,1);
                 lcd.printString(Min,0,2);
@@ -451,11 +509,11 @@
             }
             case 2 :
                 lcd.clear();
-                leds = 2 ; 
+                leds = 2 ;
                 break;
             case 3 :
                 lcd.clear();
-                leds = 4 ; 
+                leds = 4 ;
                 lcd.printString(bufferTime,48,0);
                 lcd.printString("Temperature",36,1);
                 lcd.printString(Min,0,2);
@@ -465,7 +523,7 @@
 
                 break;
             case 4 :
-                leds = 8 ; 
+                leds = 8 ;
                 lcd.clear();
                 break;
             default :
@@ -917,33 +975,28 @@
 
 void settingsMenu()
 {
-
-    powerSaverCheck();
-
-    choice = 1 ;
-    while(1) {
+        while(1) {
+    state2minus1=fsmB[state2].nextState[0];
+    state2minus2=fsmB[state2minus1].nextState[0];
+    state2plus1=fsmB[state2].nextState[1];
+    state2plus2=fsmB[state2plus1].nextState[1];
 
 
+        lcd.clear();
         wakeUp();
-        if (choice > 5) {
-            choice = 1 ;
-        }
-        if (choice < 1) {
-            choice = 5 ;
-        }
         updateTime();
-        switch (choice) {
+
+        int dispaly = sprintf (buffer1, "%s", fsmB[state2minus2].title);//convert integer to buffer str
+        int dispaly1 = sprintf (buffer2, "%s", fsmB[state2minus1].title);//convert integer to buffer str
+        int dispaly2 = sprintf (buffer3, ">>%s", fsmB[state2].title);//convert integer to buffer str
+        int dispaly3 = sprintf (buffer4, "%s", fsmB[state2plus1].title);//convert integer to buffer str
+        int dispaly4 = sprintf (buffer5, "%s", fsmB[state2plus2].title);//convert integer to buffer str
+
+        display();
+
+
+        switch (state2) {
             case 1:
-
-                lcd.clear();
-                lcd.printString(bufferTime,48,0);
-                lcd.printString("Time/Date",10,1);
-                lcd.printString("Units",0,2);
-                lcd.printString("Brightness",0,3);
-                lcd.printString("Power Saver",0,4);
-                lcd.printString("Logger",0,5);
-                lcd.drawCircle(5,12,3,1);  // x,y,radius,black fill
-
                 if (button4Flag) {
                     button4Flag=0;
                     timeDateSetting();
@@ -952,14 +1005,7 @@
 
                 break;
             case 2:
-                lcd.clear();
-                lcd.printString(bufferTime,48,0);
-                lcd.printString("Time/Date",0,1);
-                lcd.printString("Units",10,2);
-                lcd.printString("Brightness",0,3);
-                lcd.printString("Power Saver",0,4);
-                lcd.printString("Logger",0,5);
-                lcd.drawCircle(5,20,3,1);  // x,y,radius,black fill
+
 
                 if (button4Flag) {
                     button4Flag=0;
@@ -968,44 +1014,19 @@
 
                 break;
             case 3:
-                lcd.clear();
-                lcd.printString(bufferTime,48,0);
-                lcd.printString("Time/Date",0,1);
-                lcd.printString("Units",0,2);
-                lcd.printString("Brightness",10,3);
-                lcd.printString("Power Saver",0,4);
-                lcd.printString("Logger",0,5);
-                lcd.drawCircle(5,28,3,1);  // x,y,radius,black fill
+
                 if (button4Flag) {
                     button4Flag = 0;
                     brightnessSetting();
                 }
                 break;
             case 4:
-                lcd.clear();
-                lcd.printString(bufferTime,48,0);
-                lcd.printString("Time/Date",0,1);
-                lcd.printString("Units",0,2);
-                lcd.printString("Brightness",0,3);
-                lcd.printString("Power Saver",10,4);
-                lcd.printString("Logger",0,5);
-                lcd.drawCircle(5,36,3,1);  // x,y,radius,black fill
                 if (button4Flag) {
                     button4Flag = 0;
                     powerSaverSetting();
                 }
                 break;
             case 5:
-
-                lcd.clear();
-
-                lcd.printString(bufferTime,48,0);
-                lcd.printString("Time/Date",0,1);
-                lcd.printString("Units",0,2);
-                lcd.printString("Brightness",0,3);
-                lcd.printString("Power Saver",0,4);
-                lcd.printString("Logger",10,5);
-                lcd.drawCircle(5,44,3,1);  // x,y,radius,black fill
                 if (button4Flag) {
                     button4Flag = 0;
                     dataLoggerSetting();
@@ -1017,7 +1038,6 @@
                 choice = 1;
                 break;
             default:
-                leds = 15;
                 break;
         }
         if (button3Flag) {
@@ -1033,90 +1053,48 @@
 {
     wakeUp();
 
-    if (choice > 5) {
-        choice = 1 ;
-    }
-    if (choice < 1) {
-        choice = 5 ;
-    }
+    lcd.clear();
+
+    state1minus1=fsmA[state1].nextState[0];
+    state1minus2=fsmA[state1minus1].nextState[0];
+    state1plus1=fsmA[state1].nextState[1];
+    state1plus2=fsmA[state1plus1].nextState[1];
+
 
 
-    switch (choice) {
-        case 1:
+    int dispaly = sprintf (buffer1, "%s", fsmA[state1minus2].title);//convert integer to buffer str
+    int dispaly1 = sprintf (buffer2, "%s", fsmA[state1minus1].title);//convert integer to buffer str
+    int dispaly2 = sprintf (buffer3, ">>%s", fsmA[state1].title);//convert integer to buffer str
+    int dispaly3 = sprintf (buffer4, "%s", fsmA[state1plus1].title);//convert integer to buffer str
+    int dispaly4 = sprintf (buffer5, "%s", fsmA[state1plus2].title);//convert integer to buffer str
 
-            lcd.clear();
-            lcd.printString(bufferTime,48,0);
-            lcd.printString("Live Data",20,1);
-            lcd.printString("Saved Data",0,2);
-            lcd.printString("Forecast",0,3);
-            lcd.printString("Alarms",0,4);
-            lcd.printString("Settings",0,5);
-            lcd.drawCircle(5,12,3,1);  // x,y,radius,black fill
+
+
+    switch (state1) {
+        case 0:
             if (button4Flag) {
                 button4Flag=0;
                 timer.attach(&timerExpired,1.0);
                 updateLiveData();
             }
-
-// rest of code here
             break;
-        case 2:
-            lcd.clear();
-            lcd.printString(bufferTime,48,0);
-            lcd.printString("Live Data",0,1);
-            lcd.printString("Saved Data",20,2);
-            lcd.printString("Forecast",0,3);
-            lcd.printString("Alarms",0,4);
-            lcd.printString("Settings",0,5);
-            lcd.drawCircle(5,20,3,1);  // x,y,radius,black fill
+        case 1:
             if (button4Flag) {
                 button4Flag=0;
                 dataLogger();
             }
             break;
+        case 2:
+            break;
         case 3:
-            lcd.clear();
-            lcd.printString(bufferTime,48,0);
-            lcd.printString("Live Data",0,1);
-            lcd.printString("Saved Data",0,2);
-            lcd.printString("Forecast",20,3);
-            lcd.printString("Alarms",0,4);
-            lcd.printString("Settings",0,5);
-            lcd.drawCircle(5,28,3,1);  // x,y,radius,black fill
-// rest of code here
             break;
         case 4:
-            lcd.clear();
-            lcd.printString(bufferTime,48,0);
-            lcd.printString("Live Data",0,1);
-            lcd.printString("Saved Data",0,2);
-            lcd.printString("Forecast",0,3);
-            lcd.printString("Alarms",20,4);
-            lcd.printString("Settings",0,5);
-            lcd.drawCircle(5,36,3,1);  // x,y,radius,black fill
-            break;
-        case 5:
-
-            lcd.clear();
-            lcd.printString(bufferTime,48,0);
-            lcd.printString("Live Data",0,1);
-            lcd.printString("Saved Data",0,2);
-            lcd.printString("Forecast",0,3);
-            lcd.printString("Alarms",0,4);
-            lcd.printString("Settings",20,5);
-            lcd.drawCircle(5,44,3,1);  // x,y,radius,black fill
             if (button4Flag) {
                 button4Flag=0;
                 settingsMenu();
             }
             break;
-        case 6:
-
-            lcd.clear();
-            choice = 1;
-            break;
         default:
-            leds = 15;
             break;
     }
 }
@@ -1124,7 +1102,6 @@
 
 
 
-
 int main()
 {
 
@@ -1145,10 +1122,7 @@
     while(1) {
         updateTime();
         startMenu();
-        if (dataLoggerFlag) {
-            leds = 15;
-            dataLoggerFlag = 0 ;
-        }
+        display();
         wait (0.1);
     }
 }