Roqyun KO / Mbed 2 deprecated MeringueCitron

Dependencies:   mbed DHT

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers HMI_Display.cpp Source File

HMI_Display.cpp

00001 #include "HMI.h"
00002 #include "Sensor.h"
00003 #include "LCDGraphics.h"
00004 using namespace FSM_Display;
00005 
00006 #define FIRST_DATA Light_Data
00007 #define LAST_DATA Air_Humidity
00008 Display_Type curScreen;
00009 
00010 
00011 // Select the next data to display.
00012 Display_Type nextScreen(Display_Type screen)
00013 {
00014     switch (screen) {
00015         case Light_Data : 
00016             screen = Gnd_Temperature;
00017             break;
00018         case Gnd_Temperature :
00019             screen = Gnd_Humidity;
00020             break;
00021         case Gnd_Humidity :
00022             screen = Air_Temperature;
00023             break;
00024         case Air_Temperature : 
00025             screen = Air_Humidity;
00026             break;
00027         case Air_Humidity : 
00028             screen = Light_Data;
00029             break;
00030         default :
00031             break;
00032     }
00033     return screen;
00034 }
00035 
00036 // Special characters supported by our library.
00037 const uint8_t extended_ch[] = {E_AIGU_MIN, DEGREE}; 
00038 // Print the data on the display.
00039 void showData(Display_Type screen)
00040 {
00041     char buffer[256];  
00042     size_t len_extended_ch = 0;
00043     lcd.clear(false);
00044     switch (screen) {
00045         case Light_Data : 
00046             sprintf(buffer, "ambient:%d\n\rred:%d\n\rgreen:%d\n\rblue:%d\n\r", ambientLight, redLight, greenLight, blueLight);
00047             len_extended_ch = 0;
00048             break;
00049         case Gnd_Temperature :
00050             sprintf(buffer, "Temp\*rature\r\ndu sol:\n\r%.02f\*C\n\r", gndTemperature); 
00051             len_extended_ch = 2;
00052             break;
00053         case Gnd_Humidity :
00054             sprintf(buffer, "Humidit\*\r\ndu sol:\r\n%02d %%\n\r", gndHumidity);
00055             len_extended_ch = 1;
00056             break;
00057         case Air_Temperature : 
00058             sprintf(buffer, "Temp\*rature\r\nambient:\n\r%.02f\*C\n\r", airTemperature); 
00059             len_extended_ch = 2;
00060             break;
00061         case Air_Humidity : 
00062             sprintf(buffer, "Humidit\*\r\nambient:\r\n%.02f %%\n\r", airHumidity);
00063             len_extended_ch = 1;
00064             break;
00065         default :
00066             break;
00067     }
00068     lcd.print(buffer, extended_ch, len_extended_ch);      
00069     lcd.display();
00070 }
00071 
00072 /*
00073 screen standby trigger flag is on ? idle => standby
00074 screen renewal flag? 
00075     - display is off ? idle -> activate
00076     - display is on ? idle -> write
00077         - next display flag is on ? prepare the next data to write on screen.
00078         - initialize renewal flag
00079 if not, idle => idle.
00080 */
00081 unsigned int FSM_Display::display_idle(void) 
00082 {
00083     if (trigger_standby) 
00084         return FSM_Display::State_Standby;
00085     if (renew_screen) {
00086          if (!display_on)
00087             return FSM_Display::State_Activate;
00088             
00089         if(next_screen) {
00090             curScreen = nextScreen(curScreen);
00091             next_screen = false;
00092         }
00093         renew_screen = false;
00094         return FSM_Display::State_Write;
00095     }
00096     return FSM_Display::State_Idle;
00097 }
00098 /*
00099 standby => idle
00100     - turn on standby mode.
00101     - turn off other screen related flags.
00102     - turn off the display.
00103 */
00104 unsigned int FSM_Display::display_standby(void) 
00105 {    
00106 
00107     modeSleep = true;
00108     display_on = false;
00109     renew_screen = false;
00110     next_screen = false;
00111     lcd.display_off();
00112     //pc.printf("STANDBY\r\n");
00113     return FSM_Display::State_Idle;
00114 }
00115 
00116 /*
00117 activate => idle
00118     - turn off standby mode.
00119     - turn on other screen related flags.
00120     - turn on the display.
00121     - prepare to display light measurement data.
00122 */
00123 unsigned int FSM_Display::display_activate(void) 
00124 {   
00125 
00126     modeSleep = false;
00127     display_on = true;
00128     curScreen = LAST_DATA;
00129     renew_screen = true;
00130     next_screen = true;
00131     //pc.printf("Activate\r\n");
00132     lcd.display_on();
00133     return FSM_Display::State_Idle;
00134 }
00135 
00136 /*
00137 write => idle
00138     - write data on screen .
00139 */
00140 unsigned int FSM_Display::display_write(void)
00141 {   
00142     //pc.printf("WRITE\r\n");
00143     showData(curScreen);
00144     return FSM_Display::State_Idle;
00145 }