Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 }
Generated on Wed Aug 17 2022 05:29:14 by
1.7.2