Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Revision:
11:a78e01c9f054
Parent:
10:7c976b5a5e25
Child:
12:d4011389defe
--- a/main.cpp	Mon Apr 20 22:06:05 2015 +0000
+++ b/main.cpp	Tue Apr 21 09:48:05 2015 +0000
@@ -38,8 +38,8 @@
 int choice=1 ;
 int length;
 int year=2015;
-int month=1;
-int day=1;
+int month=4;
+int day=21;
 int hour=12;
 int min=0;
 int sec=1;
@@ -87,12 +87,16 @@
 char buffer5[14];
 
 
-int state=0; 
+int state=0; // used to navigate through the finite machines fsmA and fsmB
 int stateplus1 ;
 int stateplus2 ;
 int stateminus1 ;
 int stateminus2 ;
-
+int state1=0; // used to navigate through the finite machines
+int state1plus1 ;
+int state1plus2 ;
+int state1minus1 ;
+int state1minus2 ;
 
 
 
@@ -122,12 +126,27 @@
     {4,"Logger",{0,3}},
 };
 
+typedef const struct State STyp3;
+
+STyp3 fsmC[5] = {
+    {12,"Hour:",{1,4}},
+    {0,"Min:",{2,0}},
+    {21,"Day",{3,1}},
+    {4,"Month",{4,2}},
+    {2015,"Year",{0,3}},
+};
+
+
+
+
+
 
 
 void button1Pressed()  //ISR to subtract 1 from the value of choice when the first button is pressed
 {
     state=fsmA[state].nextState[1];
     state=fsmB[state].nextState[1];
+    state=fsmC[state].nextState[1];
 }
 
 
@@ -136,6 +155,7 @@
 {
     state=fsmA[state].nextState[0];
     state=fsmB[state].nextState[0];
+    state=fsmC[state].nextState[0];
 }
 
 
@@ -208,7 +228,7 @@
 void display()
 {
     lcd.clear();
-    lcd.printString(bufferTime,48,0);
+    lcd.printString(buffer0,0,0);
     lcd.printString(buffer1,0,1);
     lcd.printString(buffer2,6,2);
     lcd.printString(buffer3,12,3);
@@ -818,148 +838,88 @@
 
 void timeDateSetting()
 {
+    while (1) {
 
-    choice = 1 ;
-    while (1) {
-        wakeUp();
-        if (choice > 6) {
-            choice = 1 ;
-        }
-        if (choice < 1) {
-            choice = 6 ;
-        }
 
 
-//convert integers to strings to display on the LCD
-        int y = sprintf (Year, "Year : %d", year);//convert integer to buffer str
-        int m = sprintf (Month, "Month : %d", month);//convert integer to buffer str
-        int d = sprintf (Day, "Day : %d", day);//convert integer to buffer str
-        int h = sprintf (Hour, "Hour : %d", hour);//convert integer to buffer str
-        int mi = sprintf (Min, "Min : %d", min);//convert integer to buffer str
+        lcd.clear();
+        wakeUp();
+        updateTime();
+        int dispaly = sprintf (buffer0, "Back       Save");//convert integer to buffer str
+        int dispaly1 = sprintf (buffer1, "%s%d", fsmC[stateminus2].title,fsmC[stateminus2].output);//convert integer to buffer str
+        int dispaly2 = sprintf (buffer2, "%s%d", fsmC[stateminus1].title,fsmC[stateminus1].output);//convert integer to buffer str
+        int dispaly3 = sprintf (buffer3, ">>%s%d", fsmC[state].title,fsmC[state].output);//convert integer to buffer str
+        int dispaly4 = sprintf (buffer4, "%s%d", fsmC[stateplus1].title,fsmC[stateplus1].output);//convert integer to buffer str
+        int dispaly5 = sprintf (buffer5, "%s%d", fsmC[stateplus2].title,fsmC[stateplus2].output);//convert integer to buffer str
+
+        display();
 
 
-        switch (choice) {
-            case 1:
-
-                lcd.clear();
-                lcd.printString(Hour,10,0);
-                lcd.printString(Min,0,1);
-                lcd.printString(Day,0,2);
-                lcd.printString(Month,0,3);
-                lcd.printString(Year,0,4);
-                lcd.printString("Back      Save",0,5);
-                lcd.drawCircle(5,4,3,1);  // x,y,radius,black fill
-                if (button3Flag) {
-                    button3Flag= 0;
-                    hour--;
-                }
+        switch (state) {
+            case 0:
                 if (button4Flag) {
                     button4Flag= 0;
                     hour++;
-                }
-
-                break;
-            case 2:
-                lcd.clear();
-                lcd.printString(Hour,0,0);
-                lcd.printString(Min,10,1);
-                lcd.printString(Day,0,2);
-                lcd.printString(Month,0,3);
-                lcd.printString(Year,0,4);
-                lcd.printString("Back      Save",0,5);
-                lcd.drawCircle(5,12,3,1);  // x,y,radius,black fill
-                if (button3Flag) {
-                    button3Flag= 0;
-                    min--;
-                }
-                if (button4Flag) {
-                    button4Flag= 0;
-                    min++;
-                }
-                break;
-            case 3:
-                lcd.clear();
-                lcd.printString(Hour,0,0);
-                lcd.printString(Min,0,1);
-                lcd.printString(Day,10,2);
-                lcd.printString(Month,0,3);
-                lcd.printString(Year,0,4);
-                lcd.printString("Back      Save",0,5);
-                lcd.drawCircle(5,20,3,1);  // x,y,radius,black fill
-                if (button3Flag) {
-                    button3Flag= 0;
-                    day--;
-                }
-                if (button4Flag) {
-                    button4Flag= 0;
-                    day++;
-                }
-                break;
-            case 4:
-                lcd.clear();
-                lcd.printString(Hour,0,0);
-                lcd.printString(Min,0,1);
-                lcd.printString(Day,0,2);
-                lcd.printString(Month,10,3);
-                lcd.printString(Year,0,4);
-                lcd.printString("Back      Save",0,5);
-                lcd.drawCircle(5,28,3,1);  // x,y,radius,black fill
-                if (button3Flag) {
-                    button3Flag= 0;
-                    month--;
-                }
-                if (button4Flag) {
-                    button4Flag= 0;
-                    month++;
-                }
-                break;
-            case 5:
-
-                lcd.clear();
-                lcd.printString(Hour,0,0);
-                lcd.printString(Min,0,1);
-                lcd.printString(Day,0,2);
-                lcd.printString(Month,0,3);
-                lcd.printString(Year,10,4);
-                lcd.printString("Back      Save",0,5);
-                lcd.drawCircle(5,36,3,1);  // x,y,radius,black fill
-                if (button3Flag) {
-                    button3Flag= 0;
-                    year--;
-                }
-                if (button4Flag) {
-                    button4Flag= 0;
-                    year++;
-                }
-                break;
-            case 6:
-
-                lcd.clear();
-                lcd.printString(Hour,0,0);
-                lcd.printString(Min,0,1);
-                lcd.printString(Day,0,2);
-                lcd.printString(Month,0,3);
-                lcd.printString(Year,0,4);
-                lcd.printString("Back      Save",0,5);
-                lcd.drawCircle(40,44,3,1);  // x,y,radius,black fill
-                if (button4Flag) {
-                    button4Flag=0;
+                    fsmC[state].output = hour ; //sets the saved value in the struct to the new value chosen by the user
                     calculateUNIXTime();
                     set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
                     serial.printf ("Until the given date, since 1970/01/01 %i seconds have passed.\n", UNIXdate);
                 }
-                if (button3Flag) {
-                    button3Flag=0;
-                    goto exit_loop;
+
+                break;
+            case 1:
+
+                if (button4Flag) {
+                    button4Flag= 0;
+                    min++;
+                    fsmC[state].output = min;
+                    calculateUNIXTime();
+                    set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
+                    serial.printf ("Until the given date, since 1970/01/01 %i seconds have passed.\n", UNIXdate);
+                }
+                break;
+            case 2:
+
+                if (button4Flag) {
+                    button4Flag= 0;
+                    day++;
+                    fsmC[state].output = min ;
+                    calculateUNIXTime();
+                    set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
+                    serial.printf ("Until the given date, since 1970/01/01 %i seconds have passed.\n", UNIXdate);
+                }
+                break;
+            case 3:
+
+                if (button4Flag) {
+                    button4Flag= 0;
+                    month++;
+                    fsmC[state].output = month ;
+                    calculateUNIXTime();
+                    set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
+                    serial.printf ("Until the given date, since 1970/01/01 %i seconds have passed.\n", UNIXdate);
+                }
+                break;
+            case 4:
+
+                if (button4Flag) {
+                    button4Flag= 0;
+                    year++;
+                    fsmC[state].output = year ; 
+                    calculateUNIXTime();
+                    set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
+                    serial.printf ("Until the given date, since 1970/01/01 %i seconds have passed.\n", UNIXdate);
                 }
                 break;
             default:
                 break;
         }
+        if (button3Flag) {
+            button3Flag=0;
+            break;
+        }
         wait (0.1);
     }
-exit_loop:
-    ;
 }
 
 
@@ -967,17 +927,17 @@
 
 void settingsMenu()
 {
-        while(1) {
-    stateminus1=fsmB[state].nextState[0];
-    stateminus2=fsmB[stateminus1].nextState[0];
-    stateplus1=fsmB[state].nextState[1];
-    stateplus2=fsmB[stateplus1].nextState[1];
+    while(1) {
+        stateminus1=fsmB[state].nextState[0];
+        stateminus2=fsmB[stateminus1].nextState[0];
+        stateplus1=fsmB[state].nextState[1];
+        stateplus2=fsmB[stateplus1].nextState[1];
 
 
         lcd.clear();
         wakeUp();
         updateTime();
-
+        strncpy(buffer0, bufferTime, 14);
         int dispaly = sprintf (buffer1, "%s", fsmB[stateminus2].title);//convert integer to buffer str
         int dispaly1 = sprintf (buffer2, "%s", fsmB[stateminus1].title);//convert integer to buffer str
         int dispaly2 = sprintf (buffer3, ">>%s", fsmB[state].title);//convert integer to buffer str
@@ -988,7 +948,7 @@
 
 
         switch (state) {
-            case 1:
+            case 0:
                 if (button4Flag) {
                     button4Flag=0;
                     timeDateSetting();
@@ -996,7 +956,7 @@
 
 
                 break;
-            case 2:
+            case 1:
 
 
                 if (button4Flag) {
@@ -1005,30 +965,25 @@
                 }
 
                 break;
-            case 3:
+            case 2:
 
                 if (button4Flag) {
                     button4Flag = 0;
                     brightnessSetting();
                 }
                 break;
-            case 4:
+            case 3:
                 if (button4Flag) {
                     button4Flag = 0;
                     powerSaverSetting();
                 }
                 break;
-            case 5:
+            case 4:
                 if (button4Flag) {
                     button4Flag = 0;
                     dataLoggerSetting();
                 }
                 break;
-            case 6:
-
-                lcd.clear();
-                choice = 1;
-                break;
             default:
                 break;
         }
@@ -1053,7 +1008,7 @@
     stateplus2=fsmA[stateplus1].nextState[1];
 
 
-
+    strncpy(buffer0, bufferTime, 14);
     int dispaly = sprintf (buffer1, "%s", fsmA[stateminus2].title);//convert integer to buffer str
     int dispaly1 = sprintf (buffer2, "%s", fsmA[stateminus1].title);//convert integer to buffer str
     int dispaly2 = sprintf (buffer3, ">>%s", fsmA[state].title);//convert integer to buffer str