Amir Asemanpayeh / Mbed 2 deprecated WeatherStation

Dependencies:   BMP180 N5110 PowerControl mbed

Revision:
13:213bf5887930
Parent:
12:d4011389defe
Child:
14:f3eb0fb6ecd5
diff -r d4011389defe -r 213bf5887930 main.cpp
--- a/main.cpp	Wed Apr 22 17:21:09 2015 +0000
+++ b/main.cpp	Thu Apr 23 12:32:53 2015 +0000
@@ -107,7 +107,7 @@
 STyp2 fsmB[5] = {
     {0,"Date/Time",{1,4}},
     {1,"Units",{2,0}},
-    {2,"Notification",{3,1}},
+    {2,"Alerts",{3,1}},
     {3,"Power",{4,2}},
     {4,"Logger",{0,3}},
 };
@@ -133,6 +133,22 @@
 };
 
 
+typedef struct State STyp5; // for the Power saver settings
+
+STyp5 fsmE[2] = {
+    {0,"Off",{1,0}},
+    {60,"On",{0,1}},
+};
+
+
+typedef struct State STyp6; // for the data logger settings
+
+STyp5 fsmF[4] = {
+    {0,"Off",{1,0}}, // for the logger
+    {60,"On",{0,1}}, // for the logger {dataLoggerFlag and Timer , "title" , next state}
+     {0,"Off",{1,0}}, // for the save to file option
+    {1,"On",{0,1}}, // for the save to file option
+};
 
 
 
@@ -140,9 +156,7 @@
 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];
-//    state=fsmD[state].nextState[1];
+    button1Flag=1;
 }
 
 
@@ -150,9 +164,7 @@
 void button2Pressed() //ISR to add 1 to the value of the choice when the second button is pressed
 {
     state=fsmA[state].nextState[0];
-//    state=fsmB[state].nextState[0];
-//    state=fsmC[state].nextState[0];
-//    state=fsmD[state].nextState[0];
+    button2Flag=1;
 }
 
 
@@ -280,9 +292,11 @@
 
 void savePower()   // turns off the LCD to save power
 {
-
+    serial.printf("starts saving power\n");
     lcd.turnOff () ; //turns off the lcd
-    lcdPowerFlag = 0 ;  // A flag is set to indicate the state of the LCD
+    lcdPowerFlag = 0 ;  // A flag is set to indicate the state of the LCD (is switched off)
+    serial.printf("LCD is off\n");
+
 
 }
 
@@ -295,14 +309,17 @@
 void powerSaverCheck()   // checks if the powersaverFlag is set
 {
 
-    if (powerSaverFlag == 1 ) {
+    if (powerSaverFlag) {
 
+        serial.printf("Timeout attached\n");
         powerSaverTimeout.attach(&savePower, powerSaverTime); // setup a timeiut to call the savePower function
 
     }
 
     else {
+        serial.printf("lcd is on\n");
         powerSaverTimeout.detach();
+        serial.printf("Timeout detached\n");
 
     }
 }
@@ -312,11 +329,15 @@
 void wakeUp ()  //Turns the LCD on after the mbed is interrupted
 {
 
-    if (button1Flag || button2Flag || button3Flag || button4Flag ) {
 
+    if (lcdPowerFlag == 0) {// if the LCD is powered off
+        serial.printf("lcd is off\n");
 
-        if (lcdPowerFlag == 0) { // if the LCD is powered off
-            lcdPowerFlag = 1 ;
+        if (button1Flag || button2Flag || button3Flag || button4Flag) { // if any of the buttons are pressed
+
+            serial.printf("one of the buttons are pressed to turn on the lcd\n");
+            lcdPowerFlag = 1 ; // sets the status of the lcd to powered on
+            serial.printf("lcd is on\n");
             lcd.init();  // turns the LCD on
             powerSaverTimeout.attach(&savePower, powerSaverTime); // setup a timeiut to call the savePower function
             button1Flag = 0 ;
@@ -357,6 +378,7 @@
 
 void liveData() //
 {
+    powerSaverCheck();
     while (1) {
         wakeUp();
         if (timerFlag) {
@@ -529,22 +551,30 @@
 
 void dataLoggerSetting()
 {
+    powerSaverCheck();
+    while (1) {
+        wakeUp();
+        updateTime();
 
-    lcd.clear();
-    choice = dataLoggerFlag ;
-    powerSaverCheck();
-
+        int display0 = sprintf (buffer0, " Back    Save");
+        int display1 = sprintf (buffer1, "Data logger");
+        int display2 = sprintf (buffer2,">>%s", fsmF[state].title);
+        if (state > 0 ) { // if data logger is swicthed on
+            int display3 = sprintf (buffer3, "%i mins", fsmF[1].output/60); // display the timer value
+            int dispaly4 = sprintf (buffer4, "Save to file");
+        }
+        if (state > 1 ) {
+            int dispaly5 = sprintf (buffer5, ">>%s" , fsmF[state].title);
+            
+        }
+        else { // if the data logger is off doesnt display anything
+            int display3 = sprintf (buffer3, "");
+        }
 
 
-    while (1) {
-        wakeUp();
+        display();
 
-        if (choice < 1) {
-            choice = 2;
-        }
-        if (choice > 2) {
-            choice = 1;
-        }
+
 
         switch (choice) {
             case 1:
@@ -607,70 +637,50 @@
 
 void powerSaverSetting()
 {
-
-
-    lcd.clear();
-    choice = powerSaverFlag ;
-
+    state = powerSaverFlag ; //inits the state to the saved flag by the user in the past
+    powerSaverCheck();
     while (1) {
         wakeUp();
-        int time = sprintf (PowerSaverTime, "%d min", powerSaverTime/60);//convert integer to buffer str
+        updateTime();
 
-        if (choice < 1) {
-            choice = 2;
+        int display0 = sprintf (buffer0, " Back    Save");
+        int display1 = sprintf (buffer1, "");
+        int display2 = sprintf (buffer2, "Power Saver");
+        int display3 = sprintf (buffer3, ">>%s", fsmE[state].title);
+        if (state == 1) {
+            int display4 = sprintf (buffer4, "%i mins", fsmE[state].output/60);
+        } else { // if the power saver is off it dowsnt show the time
+            int display4 = sprintf (buffer4, "");
         }
-        if (choice > 2) {
-            choice = 1;
-        }
-        if (powerSaverTime > 300) {
-            powerSaverTime = 60 ;
-        }
+        int dispaly5 = sprintf (buffer5, "");
+
+
+        display();
+
 
 
-        switch (choice) {
-            case 1:
-
-                lcd.clear();
-                lcd.printString(bufferTime,48,0);
-                lcd.printString("Power Saver :",0,1);
-                lcd.printString("ON",0,2);
-                lcd.printString("Time Out :",0,3);
-                lcd.printString(PowerSaverTime,0,4);
-                lcd.printString("Back      Save",0,5);
-
-                if (button4Flag) {
-                    button4Flag=0;
-                    powerSaverFlag = 1 ;
-                    powerSaverTime += 60 ;
-                    dataLoggerTimer.attach(&dataLoggerTimerExpired , 5);
+        powerSaverFlag = state ; //sets the flag to the value of state (0 is off, 1 is on)
+        powerSaverTime = fsmE[state].output; //sets the timer to to value of output from the fsm
+        serial.printf("Power Saver Time = %i \n powerSaverFlag = %i \n",powerSaverTime , powerSaverFlag);
 
-                }
-
-
-                break;
-            case 2:
-                lcd.clear();
-                lcd.printString(bufferTime,48,0);
-                lcd.printString("Power Saver : ",0,1);
-                lcd.printString("OFF",0,2);
-                lcd.printString("Back      Save",0,5);
-                if (button4Flag) {
-                    button4Flag=0;
-                    powerSaverFlag = 0 ;
-
-                }
-
-            default:
-                break;
-
+        if (button4Flag) {
+            button4Flag=0;
+            fsmE[state].output += 60 ; //adds a minute to the timer when button 4 is pressed
+        }
+        if (fsmE[state].output > 600) {
+            fsmE[state].output = 60 ;
         }
 
-        wait (0.1);
-        powerSaverCheck();
+        if (state > 1) {
+            state = 0 ;
+        }
+
         if (button3Flag) {
             button3Flag=0;
+            powerSaverCheck();
             break;
         }
+        wait (0.1);
     }
 }
 
@@ -705,7 +715,7 @@
 }
 
 
-void brightnessSetting ()
+void notificationSetting ()
 {
     while(1) {
         wakeUp();
@@ -714,7 +724,6 @@
 
         if (button4Flag) {
             button4Flag=0;
-            lcd.
 
         }
 
@@ -730,9 +739,9 @@
 void unitsSetting()
 {
     state = 0;
+    powerSaverCheck();
     while (1) {
         wakeUp();
-        powerSaverCheck();
         updateTime();
         stateminus1=fsmD[state].nextState[0];
         stateminus2=fsmD[stateminus1].nextState[0];
@@ -771,11 +780,10 @@
 
 void timeDateSetting()
 {
-
+    powerSaverCheck();
     state = 0;
     while (1) {
         wakeUp();
-        powerSaverCheck();
         updateTime();
         stateminus1=fsmC[state].nextState[0];
         stateminus2=fsmC[stateminus1].nextState[0];
@@ -800,7 +808,7 @@
 
         if (button4Flag) {
             button4Flag= 0;
-            fsmC[state].output ++; 
+            fsmC[state].output ++;
             calculateUNIXTime();
             set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
         }
@@ -839,6 +847,7 @@
 void settingsMenu()
 {
     state = 0;
+    powerSaverCheck();
     while(1) {
 
         stateminus1=fsmB[state].nextState[0];
@@ -848,7 +857,6 @@
 
 
         wakeUp();
-        powerSaverCheck();
         updateTime();
         strncpy(buffer0, bufferTime, 14);
         int dispaly = sprintf (buffer1, "%s", fsmB[stateminus2].title);//convert integer to buffer str
@@ -882,7 +890,7 @@
 
                 if (button4Flag) {
                     button4Flag = 0;
-                    brightnessSetting();
+                    notificationSetting();
                 }
                 break;
             case 3:
@@ -911,8 +919,7 @@
 
 void startMenu()   //The menu displayed at the beginning
 {
-    //wakeUp();
-    //powerSaverCheck();
+    wakeUp();
 
     stateminus1=fsmA[state].nextState[1];
     stateminus2=fsmA[stateminus1].nextState[1];
@@ -975,7 +982,7 @@
     button4.rise(&button4Pressed);
     dataLoggerTimer.attach(&dataLoggerTimerExpired , dataLoggerTime);
     set_time(UNIXdate); // initialise time from the calculated UNIX time entered by the user
-
+    powerSaverCheck();
 
     while(1) {
         updateTime();