aquarium light controller wannabe
Dependencies: DS3231 FastPWM Menu QEI TextLCD _24LCXXX mbed
main.cpp@0:0b9548db2291, 2015-03-05 (annotated)
- Committer:
- rakware
- Date:
- Thu Mar 05 17:40:21 2015 +0000
- Revision:
- 0:0b9548db2291
- Child:
- 1:b0e2b4fdeb12
initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rakware | 0:0b9548db2291 | 1 | #include "mbed.h" |
rakware | 0:0b9548db2291 | 2 | #include "TextLCD.h" |
rakware | 0:0b9548db2291 | 3 | #include "QEI.h" |
rakware | 0:0b9548db2291 | 4 | #include "Menu.h" |
rakware | 0:0b9548db2291 | 5 | #include "FastPWM.h" |
rakware | 0:0b9548db2291 | 6 | #include "DS3231.h" |
rakware | 0:0b9548db2291 | 7 | #include "_24LCXXX.h" |
rakware | 0:0b9548db2291 | 8 | |
rakware | 0:0b9548db2291 | 9 | |
rakware | 0:0b9548db2291 | 10 | Serial pc(USBTX, USBRX); //DEBUG |
rakware | 0:0b9548db2291 | 11 | DigitalOut myled(LED1); //DEBUG |
rakware | 0:0b9548db2291 | 12 | |
rakware | 0:0b9548db2291 | 13 | // I2C Bus |
rakware | 0:0b9548db2291 | 14 | I2C i2c(PB_4, PA_8); // SDA, SCL |
rakware | 0:0b9548db2291 | 15 | |
rakware | 0:0b9548db2291 | 16 | TextLCD_I2C lcd(&i2c, PCF8574_SA7); |
rakware | 0:0b9548db2291 | 17 | _24LCXXX eeprom(&i2c, 0x57); |
rakware | 0:0b9548db2291 | 18 | DS3231 rtc(PB_4, PA_8); |
rakware | 0:0b9548db2291 | 19 | //End I2C BUS |
rakware | 0:0b9548db2291 | 20 | |
rakware | 0:0b9548db2291 | 21 | QEI qei(PH_0, PH_1, NC, 80, QEI::X4_ENCODING); //Index is NC(see QEI class), we use PC_13 as digital input |
rakware | 0:0b9548db2291 | 22 | DigitalIn qei_idx(PC_13); |
rakware | 0:0b9548db2291 | 23 | |
rakware | 0:0b9548db2291 | 24 | bool qei_pb() //check and debounces qei_idx |
rakware | 0:0b9548db2291 | 25 | { |
rakware | 0:0b9548db2291 | 26 | int check = qei_idx; |
rakware | 0:0b9548db2291 | 27 | wait_us(5); |
rakware | 0:0b9548db2291 | 28 | if((!check) && !qei_idx) { |
rakware | 0:0b9548db2291 | 29 | return true; |
rakware | 0:0b9548db2291 | 30 | } else return false; |
rakware | 0:0b9548db2291 | 31 | } |
rakware | 0:0b9548db2291 | 32 | |
rakware | 0:0b9548db2291 | 33 | //PA_11 = ESP SERIAL!!! |
rakware | 0:0b9548db2291 | 34 | FastPWM Pwm_Array[] = {PA_7,PA_5,PA_6,PB_6,PA_9,PB_3,PB_5,PB_7,PA_10,PB_10,PC_8,PB_8,PA_11,PC_9,PB_9}; |
rakware | 0:0b9548db2291 | 35 | |
rakware | 0:0b9548db2291 | 36 | //Ticker Pwm_Ticker[sizeof(Pwm_Array)/sizeof(FastPWM)]; |
rakware | 0:0b9548db2291 | 37 | Ticker Sunrise_Ticker; |
rakware | 0:0b9548db2291 | 38 | Ticker Sunset_Ticker; |
rakware | 0:0b9548db2291 | 39 | |
rakware | 0:0b9548db2291 | 40 | //uint8_t Pwm_Min_Max_Array[sizeof(Pwm_Array)/sizeof(FastPWM)][1][2] = { |
rakware | 0:0b9548db2291 | 41 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 42 | // { {20, 80} }, |
rakware | 0:0b9548db2291 | 43 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 44 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 45 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 46 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 47 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 48 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 49 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 50 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 51 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 52 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 53 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 54 | // { {0, 100} }, |
rakware | 0:0b9548db2291 | 55 | // { {0, 100} } |
rakware | 0:0b9548db2291 | 56 | //}; |
rakware | 0:0b9548db2291 | 57 | |
rakware | 0:0b9548db2291 | 58 | uint8_t Pwm_Min_Max_Array[sizeof(Pwm_Array)/sizeof(FastPWM)][2] = { |
rakware | 0:0b9548db2291 | 59 | {0, 100}, |
rakware | 0:0b9548db2291 | 60 | {20, 80}, |
rakware | 0:0b9548db2291 | 61 | {0, 100}, |
rakware | 0:0b9548db2291 | 62 | {0, 100}, |
rakware | 0:0b9548db2291 | 63 | {0, 100}, |
rakware | 0:0b9548db2291 | 64 | {0, 100}, |
rakware | 0:0b9548db2291 | 65 | {0, 100}, |
rakware | 0:0b9548db2291 | 66 | {0, 100}, |
rakware | 0:0b9548db2291 | 67 | {0, 100}, |
rakware | 0:0b9548db2291 | 68 | {0, 100}, |
rakware | 0:0b9548db2291 | 69 | {0, 100}, |
rakware | 0:0b9548db2291 | 70 | {0, 100}, |
rakware | 0:0b9548db2291 | 71 | {0, 100}, |
rakware | 0:0b9548db2291 | 72 | {0, 100}, |
rakware | 0:0b9548db2291 | 73 | {0, 100} |
rakware | 0:0b9548db2291 | 74 | }; |
rakware | 0:0b9548db2291 | 75 | |
rakware | 0:0b9548db2291 | 76 | int pwm_idx = 0; |
rakware | 0:0b9548db2291 | 77 | |
rakware | 0:0b9548db2291 | 78 | uint8_t SunRiseSet[2][2] = {{0,1},{21,9}}; |
rakware | 0:0b9548db2291 | 79 | |
rakware | 0:0b9548db2291 | 80 | uint8_t ramptime = 1; //in minutes |
rakware | 0:0b9548db2291 | 81 | |
rakware | 0:0b9548db2291 | 82 | bool refresh_display = true; |
rakware | 0:0b9548db2291 | 83 | |
rakware | 0:0b9548db2291 | 84 | enum { IDLE, |
rakware | 0:0b9548db2291 | 85 | MAIN, |
rakware | 0:0b9548db2291 | 86 | SETTINGS, |
rakware | 0:0b9548db2291 | 87 | PWM_MIN, |
rakware | 0:0b9548db2291 | 88 | PWM_MAX, |
rakware | 0:0b9548db2291 | 89 | SUNRISE, |
rakware | 0:0b9548db2291 | 90 | SUNSET, |
rakware | 0:0b9548db2291 | 91 | RAMPTIME, |
rakware | 0:0b9548db2291 | 92 | SUNRISE_HOUR, |
rakware | 0:0b9548db2291 | 93 | SUNRISE_MINUTE, |
rakware | 0:0b9548db2291 | 94 | SUNSET_HOUR, |
rakware | 0:0b9548db2291 | 95 | SUNSET_MINUTE, |
rakware | 0:0b9548db2291 | 96 | SET_DATE_TIME, |
rakware | 0:0b9548db2291 | 97 | SET_DATE_DAY, |
rakware | 0:0b9548db2291 | 98 | SET_DATE_MONTH, |
rakware | 0:0b9548db2291 | 99 | SET_DATE_YEAR, |
rakware | 0:0b9548db2291 | 100 | SET_TIME_HOUR, |
rakware | 0:0b9548db2291 | 101 | SET_TIME_MINUTE, |
rakware | 0:0b9548db2291 | 102 | SET_TIME_SECOND |
rakware | 0:0b9548db2291 | 103 | } menu_state = MAIN ; // Initial state = MAIN ; |
rakware | 0:0b9548db2291 | 104 | |
rakware | 0:0b9548db2291 | 105 | int cursorPos = 0; |
rakware | 0:0b9548db2291 | 106 | Menu *activeMenu; |
rakware | 0:0b9548db2291 | 107 | |
rakware | 0:0b9548db2291 | 108 | //struct tm *t; //read time |
rakware | 0:0b9548db2291 | 109 | struct tm t; //mktime |
rakware | 0:0b9548db2291 | 110 | |
rakware | 0:0b9548db2291 | 111 | Ticker qei_t; //ticker for qei_cb() |
rakware | 0:0b9548db2291 | 112 | |
rakware | 0:0b9548db2291 | 113 | void qei_cb() |
rakware | 0:0b9548db2291 | 114 | { |
rakware | 0:0b9548db2291 | 115 | if(qei.getCurrentState() == 3 && qei.getPulses() < 0) { //one tab left |
rakware | 0:0b9548db2291 | 116 | refresh_display = true; |
rakware | 0:0b9548db2291 | 117 | switch (menu_state) { |
rakware | 0:0b9548db2291 | 118 | case SETTINGS: |
rakware | 0:0b9548db2291 | 119 | cursorPos--; |
rakware | 0:0b9548db2291 | 120 | if (cursorPos < 0) |
rakware | 0:0b9548db2291 | 121 | cursorPos = activeMenu->selections.size()-1; |
rakware | 0:0b9548db2291 | 122 | break; |
rakware | 0:0b9548db2291 | 123 | case PWM_MIN: |
rakware | 0:0b9548db2291 | 124 | if (Pwm_Min_Max_Array[cursorPos][0] > 0) |
rakware | 0:0b9548db2291 | 125 | Pwm_Min_Max_Array[cursorPos][0]--; |
rakware | 0:0b9548db2291 | 126 | break; |
rakware | 0:0b9548db2291 | 127 | case PWM_MAX: |
rakware | 0:0b9548db2291 | 128 | if (Pwm_Min_Max_Array[cursorPos][1] > 0) |
rakware | 0:0b9548db2291 | 129 | Pwm_Min_Max_Array[cursorPos][1]--; |
rakware | 0:0b9548db2291 | 130 | break; |
rakware | 0:0b9548db2291 | 131 | case RAMPTIME: |
rakware | 0:0b9548db2291 | 132 | ramptime--; |
rakware | 0:0b9548db2291 | 133 | break; |
rakware | 0:0b9548db2291 | 134 | case SUNRISE_HOUR: |
rakware | 0:0b9548db2291 | 135 | SunRiseSet[0][0]--; |
rakware | 0:0b9548db2291 | 136 | break; |
rakware | 0:0b9548db2291 | 137 | case SUNRISE_MINUTE: |
rakware | 0:0b9548db2291 | 138 | SunRiseSet[0][1]--; |
rakware | 0:0b9548db2291 | 139 | break; |
rakware | 0:0b9548db2291 | 140 | case SUNSET_HOUR: |
rakware | 0:0b9548db2291 | 141 | SunRiseSet[1][0]--; |
rakware | 0:0b9548db2291 | 142 | break; |
rakware | 0:0b9548db2291 | 143 | case SUNSET_MINUTE: |
rakware | 0:0b9548db2291 | 144 | SunRiseSet[1][1]--; |
rakware | 0:0b9548db2291 | 145 | break; |
rakware | 0:0b9548db2291 | 146 | } |
rakware | 0:0b9548db2291 | 147 | qei.reset(); |
rakware | 0:0b9548db2291 | 148 | } else if(qei.getCurrentState() == 3 && qei.getPulses() > 0) { //one tab right |
rakware | 0:0b9548db2291 | 149 | refresh_display = true; |
rakware | 0:0b9548db2291 | 150 | switch (menu_state) { |
rakware | 0:0b9548db2291 | 151 | case SETTINGS: |
rakware | 0:0b9548db2291 | 152 | cursorPos++; |
rakware | 0:0b9548db2291 | 153 | if (cursorPos >= activeMenu->selections.size()) |
rakware | 0:0b9548db2291 | 154 | cursorPos = 0; |
rakware | 0:0b9548db2291 | 155 | break; |
rakware | 0:0b9548db2291 | 156 | case PWM_MIN: |
rakware | 0:0b9548db2291 | 157 | if (Pwm_Min_Max_Array[cursorPos][0] < 100) |
rakware | 0:0b9548db2291 | 158 | Pwm_Min_Max_Array[cursorPos][0]++; |
rakware | 0:0b9548db2291 | 159 | break; |
rakware | 0:0b9548db2291 | 160 | case PWM_MAX: |
rakware | 0:0b9548db2291 | 161 | if (Pwm_Min_Max_Array[cursorPos][1] < 100) |
rakware | 0:0b9548db2291 | 162 | Pwm_Min_Max_Array[cursorPos][1]++; |
rakware | 0:0b9548db2291 | 163 | break; |
rakware | 0:0b9548db2291 | 164 | case RAMPTIME: |
rakware | 0:0b9548db2291 | 165 | ramptime++; |
rakware | 0:0b9548db2291 | 166 | break; |
rakware | 0:0b9548db2291 | 167 | case SUNRISE_HOUR: |
rakware | 0:0b9548db2291 | 168 | SunRiseSet[0][0]++; |
rakware | 0:0b9548db2291 | 169 | break; |
rakware | 0:0b9548db2291 | 170 | case SUNRISE_MINUTE: |
rakware | 0:0b9548db2291 | 171 | SunRiseSet[0][1]++; |
rakware | 0:0b9548db2291 | 172 | break; |
rakware | 0:0b9548db2291 | 173 | case SUNSET_HOUR: |
rakware | 0:0b9548db2291 | 174 | SunRiseSet[1][0]++; |
rakware | 0:0b9548db2291 | 175 | break; |
rakware | 0:0b9548db2291 | 176 | case SUNSET_MINUTE: |
rakware | 0:0b9548db2291 | 177 | SunRiseSet[1][1]++; |
rakware | 0:0b9548db2291 | 178 | break; |
rakware | 0:0b9548db2291 | 179 | } |
rakware | 0:0b9548db2291 | 180 | qei.reset(); |
rakware | 0:0b9548db2291 | 181 | } |
rakware | 0:0b9548db2291 | 182 | |
rakware | 0:0b9548db2291 | 183 | if(qei_pb()) { //button press |
rakware | 0:0b9548db2291 | 184 | Timer qei_pb_t; |
rakware | 0:0b9548db2291 | 185 | if (qei_pb_t.read() == 0) { |
rakware | 0:0b9548db2291 | 186 | qei_pb_t.start(); |
rakware | 0:0b9548db2291 | 187 | } |
rakware | 0:0b9548db2291 | 188 | while(qei_pb()) { //check long press |
rakware | 0:0b9548db2291 | 189 | if(qei_pb_t.read() > 1) { |
rakware | 0:0b9548db2291 | 190 | qei_pb_t.stop(); |
rakware | 0:0b9548db2291 | 191 | pc.printf("long press");//do stuff on long press |
rakware | 0:0b9548db2291 | 192 | refresh_display = true; |
rakware | 0:0b9548db2291 | 193 | lcd.cls(); |
rakware | 0:0b9548db2291 | 194 | lcd.locate(0,0); |
rakware | 0:0b9548db2291 | 195 | lcd.printf("%s", activeMenu->menuID); |
rakware | 0:0b9548db2291 | 196 | lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 197 | lcd.printf("%s", activeMenu->selections[cursorPos].selText); |
rakware | 0:0b9548db2291 | 198 | |
rakware | 0:0b9548db2291 | 199 | menu_state = SETTINGS; |
rakware | 0:0b9548db2291 | 200 | wait(0.5); |
rakware | 0:0b9548db2291 | 201 | } |
rakware | 0:0b9548db2291 | 202 | } |
rakware | 0:0b9548db2291 | 203 | if(qei_pb_t.read() < 1) { |
rakware | 0:0b9548db2291 | 204 | qei_pb_t.stop(); |
rakware | 0:0b9548db2291 | 205 | //do stuff on short press |
rakware | 0:0b9548db2291 | 206 | pc.printf("short press"); |
rakware | 0:0b9548db2291 | 207 | refresh_display = true; |
rakware | 0:0b9548db2291 | 208 | switch (menu_state) { |
rakware | 0:0b9548db2291 | 209 | case MAIN: |
rakware | 0:0b9548db2291 | 210 | break; |
rakware | 0:0b9548db2291 | 211 | case SETTINGS: |
rakware | 0:0b9548db2291 | 212 | pc.printf("apasat SETTINGS\n"); |
rakware | 0:0b9548db2291 | 213 | if(activeMenu->selections[cursorPos].fun != NULL) { |
rakware | 0:0b9548db2291 | 214 | (activeMenu->selections[cursorPos].fun)(); |
rakware | 0:0b9548db2291 | 215 | } |
rakware | 0:0b9548db2291 | 216 | if(activeMenu->selections[cursorPos].childMenu != NULL) { |
rakware | 0:0b9548db2291 | 217 | activeMenu = activeMenu->selections[cursorPos].childMenu; |
rakware | 0:0b9548db2291 | 218 | cursorPos = 0; |
rakware | 0:0b9548db2291 | 219 | } |
rakware | 0:0b9548db2291 | 220 | // print_menu(); |
rakware | 0:0b9548db2291 | 221 | wait(0.2); |
rakware | 0:0b9548db2291 | 222 | break; |
rakware | 0:0b9548db2291 | 223 | case PWM_MIN: |
rakware | 0:0b9548db2291 | 224 | menu_state = SETTINGS; |
rakware | 0:0b9548db2291 | 225 | wait(0.2); |
rakware | 0:0b9548db2291 | 226 | break; |
rakware | 0:0b9548db2291 | 227 | case PWM_MAX: |
rakware | 0:0b9548db2291 | 228 | menu_state = SETTINGS; |
rakware | 0:0b9548db2291 | 229 | wait(0.2); |
rakware | 0:0b9548db2291 | 230 | break; |
rakware | 0:0b9548db2291 | 231 | case SUNRISE: |
rakware | 0:0b9548db2291 | 232 | wait(0.2); |
rakware | 0:0b9548db2291 | 233 | menu_state = SUNRISE_HOUR; |
rakware | 0:0b9548db2291 | 234 | break; |
rakware | 0:0b9548db2291 | 235 | case SUNRISE_HOUR: |
rakware | 0:0b9548db2291 | 236 | wait(0.2); |
rakware | 0:0b9548db2291 | 237 | menu_state = SUNRISE_MINUTE; |
rakware | 0:0b9548db2291 | 238 | break; |
rakware | 0:0b9548db2291 | 239 | case SUNSET: |
rakware | 0:0b9548db2291 | 240 | wait(0.2); |
rakware | 0:0b9548db2291 | 241 | menu_state = SUNSET_HOUR; |
rakware | 0:0b9548db2291 | 242 | break; |
rakware | 0:0b9548db2291 | 243 | case SUNSET_HOUR: |
rakware | 0:0b9548db2291 | 244 | wait(0.2); |
rakware | 0:0b9548db2291 | 245 | menu_state = SUNSET_MINUTE; |
rakware | 0:0b9548db2291 | 246 | break; |
rakware | 0:0b9548db2291 | 247 | default: |
rakware | 0:0b9548db2291 | 248 | menu_state = SETTINGS; |
rakware | 0:0b9548db2291 | 249 | wait(0.2); |
rakware | 0:0b9548db2291 | 250 | break; |
rakware | 0:0b9548db2291 | 251 | } |
rakware | 0:0b9548db2291 | 252 | wait(0.2); |
rakware | 0:0b9548db2291 | 253 | } |
rakware | 0:0b9548db2291 | 254 | } |
rakware | 0:0b9548db2291 | 255 | } |
rakware | 0:0b9548db2291 | 256 | |
rakware | 0:0b9548db2291 | 257 | void exit_settings() |
rakware | 0:0b9548db2291 | 258 | { |
rakware | 0:0b9548db2291 | 259 | // menu_state = SAVE_SETTINGS; |
rakware | 0:0b9548db2291 | 260 | // lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 261 | // lcd.printf("<N SAVE Y>"); |
rakware | 0:0b9548db2291 | 262 | menu_state = MAIN; |
rakware | 0:0b9548db2291 | 263 | } |
rakware | 0:0b9548db2291 | 264 | |
rakware | 0:0b9548db2291 | 265 | void pwm_min() |
rakware | 0:0b9548db2291 | 266 | { |
rakware | 0:0b9548db2291 | 267 | menu_state = PWM_MIN; |
rakware | 0:0b9548db2291 | 268 | } |
rakware | 0:0b9548db2291 | 269 | |
rakware | 0:0b9548db2291 | 270 | void pwm_max() |
rakware | 0:0b9548db2291 | 271 | { |
rakware | 0:0b9548db2291 | 272 | menu_state = PWM_MAX; |
rakware | 0:0b9548db2291 | 273 | } |
rakware | 0:0b9548db2291 | 274 | |
rakware | 0:0b9548db2291 | 275 | void sun_rise() |
rakware | 0:0b9548db2291 | 276 | { |
rakware | 0:0b9548db2291 | 277 | menu_state = SUNRISE; |
rakware | 0:0b9548db2291 | 278 | } |
rakware | 0:0b9548db2291 | 279 | |
rakware | 0:0b9548db2291 | 280 | void sun_set() |
rakware | 0:0b9548db2291 | 281 | { |
rakware | 0:0b9548db2291 | 282 | menu_state = SUNSET; |
rakware | 0:0b9548db2291 | 283 | } |
rakware | 0:0b9548db2291 | 284 | |
rakware | 0:0b9548db2291 | 285 | void ramp_time() |
rakware | 0:0b9548db2291 | 286 | { |
rakware | 0:0b9548db2291 | 287 | menu_state = RAMPTIME; |
rakware | 0:0b9548db2291 | 288 | } |
rakware | 0:0b9548db2291 | 289 | |
rakware | 0:0b9548db2291 | 290 | void set_date_time() |
rakware | 0:0b9548db2291 | 291 | { |
rakware | 0:0b9548db2291 | 292 | menu_state = SET_DATE_TIME; |
rakware | 0:0b9548db2291 | 293 | } |
rakware | 0:0b9548db2291 | 294 | |
rakware | 0:0b9548db2291 | 295 | // void inc() { |
rakware | 0:0b9548db2291 | 296 | // _pin = _pin + 0.01/8.0; // 0.01 = 1% => 0.125% increments, if you modify this you need to modify 'ramp/8' too |
rakware | 0:0b9548db2291 | 297 | // } |
rakware | 0:0b9548db2291 | 298 | // void dec() { |
rakware | 0:0b9548db2291 | 299 | // _pin = _pin - 0.01/8.0; |
rakware | 0:0b9548db2291 | 300 | // } |
rakware | 0:0b9548db2291 | 301 | |
rakware | 0:0b9548db2291 | 302 | //void bl(uint8_t pwmnameArray[10][3], PwmOut &pwmname, Ticker &pwmname_t, Ramp &pwmname_r) //pwmnameArray, pwmname, pwmname_t, pwmname_r |
rakware | 0:0b9548db2291 | 303 | //void bl() |
rakware | 0:0b9548db2291 | 304 | //{ |
rakware | 0:0b9548db2291 | 305 | // struct tm *t; |
rakware | 0:0b9548db2291 | 306 | // time_t seconds = time(NULL); |
rakware | 0:0b9548db2291 | 307 | // t = localtime(&seconds); |
rakware | 0:0b9548db2291 | 308 | // |
rakware | 0:0b9548db2291 | 309 | // int timerica = (t->tm_hour*3600) + (t->tm_min*60) + t->tm_sec; |
rakware | 0:0b9548db2291 | 310 | // |
rakware | 0:0b9548db2291 | 311 | // for (uint8_t index = 0; index < 10; index++) { //cycle array (sizeof(pwmArray)/sizeof(pwmArray[0])) = 0? |
rakware | 0:0b9548db2291 | 312 | // |
rakware | 0:0b9548db2291 | 313 | //// if (pwmnameArray[index][2] != 255 && pwmnameArray[index+1][2] != 255) { |
rakware | 0:0b9548db2291 | 314 | //// |
rakware | 0:0b9548db2291 | 315 | //// if ( timerica == (pwmnameArray[index][0]*3600) + (pwmnameArray[index][1]*60) ) { |
rakware | 0:0b9548db2291 | 316 | //// |
rakware | 0:0b9548db2291 | 317 | //// pwmname_t.detach(); |
rakware | 0:0b9548db2291 | 318 | //// |
rakware | 0:0b9548db2291 | 319 | //// pwmname = pwmnameArray[index][2]/100.0; |
rakware | 0:0b9548db2291 | 320 | //// |
rakware | 0:0b9548db2291 | 321 | //// float ramp = float( (((pwmnameArray[index+1][0]*3600) + (pwmnameArray[index+1][1]*60))-((pwmnameArray[index][0]*3600) + (pwmnameArray[index][1]*60))) ) / float( (pwmnameArray[index+1][2]-pwmnameArray[index][2]) ) ; |
rakware | 0:0b9548db2291 | 322 | //// |
rakware | 0:0b9548db2291 | 323 | //// pc.printf("ramp ?%f\n", ramp); |
rakware | 0:0b9548db2291 | 324 | //// |
rakware | 0:0b9548db2291 | 325 | //// if (ramp > 0) { |
rakware | 0:0b9548db2291 | 326 | //// pwmname_t.attach(&pwmname_r, &Ramp::inc, ramp/8); |
rakware | 0:0b9548db2291 | 327 | //// } |
rakware | 0:0b9548db2291 | 328 | //// if (ramp < 0) { |
rakware | 0:0b9548db2291 | 329 | //// pwmname_t.attach(&pwmname_r, &Ramp::dec, ramp/8); |
rakware | 0:0b9548db2291 | 330 | //// } |
rakware | 0:0b9548db2291 | 331 | //// |
rakware | 0:0b9548db2291 | 332 | //// pc.printf("PWMSTART\n"); |
rakware | 0:0b9548db2291 | 333 | //// pc.printf("index %d\n",index); |
rakware | 0:0b9548db2291 | 334 | //// } |
rakware | 0:0b9548db2291 | 335 | //// } |
rakware | 0:0b9548db2291 | 336 | // |
rakware | 0:0b9548db2291 | 337 | //// if (pwmnameArray[index][2] != 255 && pwmnameArray[index+1][2] == 255) { //pwm_end = 255 |
rakware | 0:0b9548db2291 | 338 | //// if ( timerica == (pwmnameArray[index][0]*3600) + (pwmnameArray[index][1]*60) ) { |
rakware | 0:0b9548db2291 | 339 | //// |
rakware | 0:0b9548db2291 | 340 | //// pwmname_t.detach(); |
rakware | 0:0b9548db2291 | 341 | //// |
rakware | 0:0b9548db2291 | 342 | //// pwmname = pwmnameArray[index][2]/100.0; |
rakware | 0:0b9548db2291 | 343 | //// |
rakware | 0:0b9548db2291 | 344 | //// pc.printf("PWMZERO\n"); |
rakware | 0:0b9548db2291 | 345 | //// pc.printf("index %d\n",index); |
rakware | 0:0b9548db2291 | 346 | //// } |
rakware | 0:0b9548db2291 | 347 | //// } |
rakware | 0:0b9548db2291 | 348 | // } |
rakware | 0:0b9548db2291 | 349 | //} |
rakware | 0:0b9548db2291 | 350 | |
rakware | 0:0b9548db2291 | 351 | void incs() |
rakware | 0:0b9548db2291 | 352 | { |
rakware | 0:0b9548db2291 | 353 | for(uint8_t index = 0; index < sizeof(Pwm_Array)/sizeof(FastPWM); index++) { //index < sizeof(Pwm_Array)/sizeof(FastPWM) |
rakware | 0:0b9548db2291 | 354 | |
rakware | 0:0b9548db2291 | 355 | double ramp = double( (Pwm_Min_Max_Array[index][1]-Pwm_Min_Max_Array[index][0]) ) / double( (( ((SunRiseSet[0][0]*3600) + (SunRiseSet[0][1]*60))+(ramptime*60) )-( (SunRiseSet[0][0]*3600) + (SunRiseSet[0][1]*60) )) ) ; |
rakware | 0:0b9548db2291 | 356 | |
rakware | 0:0b9548db2291 | 357 | if (Pwm_Array[index].read() < Pwm_Min_Max_Array[index][1]/100.0) { |
rakware | 0:0b9548db2291 | 358 | Pwm_Array[index] = Pwm_Array[index].read() + double(ramp/100.0); |
rakware | 0:0b9548db2291 | 359 | pc.printf("sunrise:[%i]%f ", index, Pwm_Array[index].read()); |
rakware | 0:0b9548db2291 | 360 | } |
rakware | 0:0b9548db2291 | 361 | if (Pwm_Array[index].read() > Pwm_Min_Max_Array[index][1]/100.0) { |
rakware | 0:0b9548db2291 | 362 | Pwm_Array[index] = Pwm_Min_Max_Array[index][1]/100.0; |
rakware | 0:0b9548db2291 | 363 | Sunrise_Ticker.detach(); |
rakware | 0:0b9548db2291 | 364 | pc.printf("\n sunrise end:[%i]%f \n", index, Pwm_Array[index].read()); |
rakware | 0:0b9548db2291 | 365 | } |
rakware | 0:0b9548db2291 | 366 | } |
rakware | 0:0b9548db2291 | 367 | } |
rakware | 0:0b9548db2291 | 368 | |
rakware | 0:0b9548db2291 | 369 | void decs() |
rakware | 0:0b9548db2291 | 370 | { |
rakware | 0:0b9548db2291 | 371 | for(uint8_t index = 0; index < sizeof(Pwm_Array)/sizeof(FastPWM); index++) { //index < sizeof(Pwm_Array)/sizeof(FastPWM) |
rakware | 0:0b9548db2291 | 372 | |
rakware | 0:0b9548db2291 | 373 | double ramp = double( (Pwm_Min_Max_Array[index][1]-Pwm_Min_Max_Array[index][0]) ) / double( (( ((SunRiseSet[0][0]*3600) + (SunRiseSet[0][1]*60))+(ramptime*60) )-( (SunRiseSet[0][0]*3600) + (SunRiseSet[0][1]*60) )) ) ; |
rakware | 0:0b9548db2291 | 374 | |
rakware | 0:0b9548db2291 | 375 | if (Pwm_Array[index].read() < Pwm_Min_Max_Array[index][1]/100.0) { |
rakware | 0:0b9548db2291 | 376 | Pwm_Array[index] = Pwm_Array[index].read() + double(ramp/100.0); |
rakware | 0:0b9548db2291 | 377 | pc.printf("sunset:[%i]%f ", index, Pwm_Array[index].read()); |
rakware | 0:0b9548db2291 | 378 | } |
rakware | 0:0b9548db2291 | 379 | if (Pwm_Array[index].read() > Pwm_Min_Max_Array[index][1]/100.0) { |
rakware | 0:0b9548db2291 | 380 | Pwm_Array[index] = Pwm_Min_Max_Array[index][1]/100.0; |
rakware | 0:0b9548db2291 | 381 | Sunset_Ticker.detach(); |
rakware | 0:0b9548db2291 | 382 | pc.printf("\n sunset end:[%i]%f \n", index, Pwm_Array[index].read()); |
rakware | 0:0b9548db2291 | 383 | } |
rakware | 0:0b9548db2291 | 384 | } |
rakware | 0:0b9548db2291 | 385 | } |
rakware | 0:0b9548db2291 | 386 | |
rakware | 0:0b9548db2291 | 387 | //TODO |
rakware | 0:0b9548db2291 | 388 | //init RTC |
rakware | 0:0b9548db2291 | 389 | |
rakware | 0:0b9548db2291 | 390 | void set_time_from_rtc() |
rakware | 0:0b9548db2291 | 391 | { |
rakware | 0:0b9548db2291 | 392 | int rtc_hour; |
rakware | 0:0b9548db2291 | 393 | int rtc_min; |
rakware | 0:0b9548db2291 | 394 | int rtc_sec; |
rakware | 0:0b9548db2291 | 395 | int rtc_dow; //day of week |
rakware | 0:0b9548db2291 | 396 | int rtc_mday; |
rakware | 0:0b9548db2291 | 397 | int rtc_mon; |
rakware | 0:0b9548db2291 | 398 | int rtc_year; |
rakware | 0:0b9548db2291 | 399 | |
rakware | 0:0b9548db2291 | 400 | rtc.readDateTime(&rtc_dow,&rtc_mday,&rtc_mon,&rtc_year,&rtc_hour,&rtc_min,&rtc_sec); |
rakware | 0:0b9548db2291 | 401 | //TODO |
rakware | 0:0b9548db2291 | 402 | //asuming that day of week is allways != 0, return an error if dow == 0. |
rakware | 0:0b9548db2291 | 403 | lcd.cls(); |
rakware | 0:0b9548db2291 | 404 | lcd.printf("rtc: %i / %02i-%02i-%02i %02i:%02i:%02i",rtc_dow,rtc_mday,rtc_mon,rtc_year,rtc_hour,rtc_min,rtc_sec); |
rakware | 0:0b9548db2291 | 405 | |
rakware | 0:0b9548db2291 | 406 | |
rakware | 0:0b9548db2291 | 407 | t.tm_sec = rtc_sec; // 0-59 |
rakware | 0:0b9548db2291 | 408 | t.tm_min = rtc_min; // 0-59 |
rakware | 0:0b9548db2291 | 409 | t.tm_hour = rtc_hour; // 0-23 |
rakware | 0:0b9548db2291 | 410 | t.tm_mday = rtc_mday; // 1-31 |
rakware | 0:0b9548db2291 | 411 | t.tm_mon = rtc_mon; // 0-11 |
rakware | 0:0b9548db2291 | 412 | t.tm_year = rtc_year-1900; // year since 1900 |
rakware | 0:0b9548db2291 | 413 | |
rakware | 0:0b9548db2291 | 414 | // convert to timestamp and set (1256729737) |
rakware | 0:0b9548db2291 | 415 | time_t epoch = mktime(&t); |
rakware | 0:0b9548db2291 | 416 | set_time(epoch); |
rakware | 0:0b9548db2291 | 417 | wait(1); //not necessary |
rakware | 0:0b9548db2291 | 418 | lcd.cls(); |
rakware | 0:0b9548db2291 | 419 | epoch = time(NULL); |
rakware | 0:0b9548db2291 | 420 | lcd.printf("stm: %i / %02i-%02i-%02i %02i:%02i:%02i",rtc_dow,localtime(&epoch)->tm_mday,localtime(&epoch)->tm_mon,localtime(&epoch)->tm_year+1900,localtime(&epoch)->tm_hour,localtime(&epoch)->tm_min,localtime(&epoch)->tm_sec); |
rakware | 0:0b9548db2291 | 421 | wait(1); //not necessary |
rakware | 0:0b9548db2291 | 422 | } |
rakware | 0:0b9548db2291 | 423 | |
rakware | 0:0b9548db2291 | 424 | void read_eeprom() //int nbyte_read( int mem_addr, void *data, int size ); //TODO |
rakware | 0:0b9548db2291 | 425 | { |
rakware | 0:0b9548db2291 | 426 | char data2[4096]; //32Kbit eeprom |
rakware | 0:0b9548db2291 | 427 | // pc.printf("memory int data read!\n"); |
rakware | 0:0b9548db2291 | 428 | eeprom.nbyte_read( 0, &data2, 4096 ); //MAXADR_24LCXXX <=4096 |
rakware | 0:0b9548db2291 | 429 | //lcd.printf("int:%d sizeofint:%d",data2, sizeof(uint8_t)); |
rakware | 0:0b9548db2291 | 430 | // pc.printf("\nend\n"); |
rakware | 0:0b9548db2291 | 431 | lcd.printf("sizeof: %d", sizeof(data2)); |
rakware | 0:0b9548db2291 | 432 | } |
rakware | 0:0b9548db2291 | 433 | |
rakware | 0:0b9548db2291 | 434 | int main() |
rakware | 0:0b9548db2291 | 435 | { |
rakware | 0:0b9548db2291 | 436 | //lcd init |
rakware | 0:0b9548db2291 | 437 | lcd.setBacklight(TextLCD::LightOn); |
rakware | 0:0b9548db2291 | 438 | lcd.setMode(TextLCD::DispOn); |
rakware | 0:0b9548db2291 | 439 | |
rakware | 0:0b9548db2291 | 440 | //TODO |
rakware | 0:0b9548db2291 | 441 | //rtc init (set 32KHz output to enable, erase OSF, etc? |
rakware | 0:0b9548db2291 | 442 | |
rakware | 0:0b9548db2291 | 443 | set_time_from_rtc(); //read time from DS3231, set time to STM32 |
rakware | 0:0b9548db2291 | 444 | //read external EEPROM and restore saved values (what values?) |
rakware | 0:0b9548db2291 | 445 | //lcd.cls(); |
rakware | 0:0b9548db2291 | 446 | //read_eeprom(); |
rakware | 0:0b9548db2291 | 447 | //wait(4); |
rakware | 0:0b9548db2291 | 448 | |
rakware | 0:0b9548db2291 | 449 | //TODO set initial pwm_channel state (ie: if it's betweeen sunrise_end and sunset_start set it to sunrise_max, if it's ramping calculate the initial value |
rakware | 0:0b9548db2291 | 450 | |
rakware | 0:0b9548db2291 | 451 | qei_idx.mode(PullUp); |
rakware | 0:0b9548db2291 | 452 | qei_t.attach(&qei_cb, 0.05); //calls qei_cb every 50ms |
rakware | 0:0b9548db2291 | 453 | |
rakware | 0:0b9548db2291 | 454 | Menu settingsMenu("SettingsID"); |
rakware | 0:0b9548db2291 | 455 | |
rakware | 0:0b9548db2291 | 456 | Menu pwm_minMenu("PWM MinID"); |
rakware | 0:0b9548db2291 | 457 | pwm_minMenu.add(Selection(&pwm_min, 0, NULL, "< CH00 >")); |
rakware | 0:0b9548db2291 | 458 | pwm_minMenu.add(Selection(&pwm_min, 1, NULL, "< CH01 >")); |
rakware | 0:0b9548db2291 | 459 | pwm_minMenu.add(Selection(&pwm_min, 2, NULL, "< CH02 >")); |
rakware | 0:0b9548db2291 | 460 | pwm_minMenu.add(Selection(&pwm_min, 3, NULL, "< CH03 >")); |
rakware | 0:0b9548db2291 | 461 | pwm_minMenu.add(Selection(&pwm_min, 4, NULL, "< CH04 >")); |
rakware | 0:0b9548db2291 | 462 | pwm_minMenu.add(Selection(&pwm_min, 5, NULL, "< CH05 >")); |
rakware | 0:0b9548db2291 | 463 | pwm_minMenu.add(Selection(&pwm_min, 6, NULL, "< CH06 >")); |
rakware | 0:0b9548db2291 | 464 | pwm_minMenu.add(Selection(&pwm_min, 7, NULL, "< CH07 >")); |
rakware | 0:0b9548db2291 | 465 | pwm_minMenu.add(Selection(&pwm_min, 8, NULL, "< CH08 >")); |
rakware | 0:0b9548db2291 | 466 | pwm_minMenu.add(Selection(&pwm_min, 9, NULL, "< CH09 >")); |
rakware | 0:0b9548db2291 | 467 | pwm_minMenu.add(Selection(NULL, 10, &settingsMenu, "< Return >")); |
rakware | 0:0b9548db2291 | 468 | |
rakware | 0:0b9548db2291 | 469 | Menu pwm_maxMenu("PWM MaxID"); |
rakware | 0:0b9548db2291 | 470 | pwm_maxMenu.add(Selection(&pwm_max, 0, NULL, "< CH00 >")); |
rakware | 0:0b9548db2291 | 471 | pwm_maxMenu.add(Selection(&pwm_max, 1, NULL, "< CH01 >")); |
rakware | 0:0b9548db2291 | 472 | pwm_maxMenu.add(Selection(&pwm_max, 2, NULL, "< CH02 >")); |
rakware | 0:0b9548db2291 | 473 | pwm_maxMenu.add(Selection(&pwm_max, 3, NULL, "< CH03 >")); |
rakware | 0:0b9548db2291 | 474 | pwm_maxMenu.add(Selection(&pwm_max, 4, NULL, "< CH04 >")); |
rakware | 0:0b9548db2291 | 475 | pwm_maxMenu.add(Selection(&pwm_max, 5, NULL, "< CH05 >")); |
rakware | 0:0b9548db2291 | 476 | pwm_maxMenu.add(Selection(&pwm_max, 6, NULL, "< CH06 >")); |
rakware | 0:0b9548db2291 | 477 | pwm_maxMenu.add(Selection(&pwm_max, 7, NULL, "< CH07 >")); |
rakware | 0:0b9548db2291 | 478 | pwm_maxMenu.add(Selection(&pwm_max, 8, NULL, "< CH08 >")); |
rakware | 0:0b9548db2291 | 479 | pwm_maxMenu.add(Selection(&pwm_max, 9, NULL, "< CH09 >")); |
rakware | 0:0b9548db2291 | 480 | pwm_maxMenu.add(Selection(NULL, 10, &settingsMenu, "< Return >")); |
rakware | 0:0b9548db2291 | 481 | |
rakware | 0:0b9548db2291 | 482 | // Menu sunriseMenu("PWM MaxID"); |
rakware | 0:0b9548db2291 | 483 | // |
rakware | 0:0b9548db2291 | 484 | // Menu sunsetMenu("PWM MaxID"); |
rakware | 0:0b9548db2291 | 485 | |
rakware | 0:0b9548db2291 | 486 | // Menu ramptimeMenu("RampTimeID"); |
rakware | 0:0b9548db2291 | 487 | |
rakware | 0:0b9548db2291 | 488 | settingsMenu.add(Selection(NULL, 0, &pwm_maxMenu, "<PWM Day>")); |
rakware | 0:0b9548db2291 | 489 | settingsMenu.add(Selection(NULL, 1, &pwm_minMenu, "<PWM Night>")); |
rakware | 0:0b9548db2291 | 490 | settingsMenu.add(Selection(&sun_rise, 2, NULL, "<Sunrise>")); |
rakware | 0:0b9548db2291 | 491 | settingsMenu.add(Selection(&sun_set, 3, NULL, "<Sunset>")); |
rakware | 0:0b9548db2291 | 492 | settingsMenu.add(Selection(&ramp_time, 4, NULL, "<Ramp Time>")); |
rakware | 0:0b9548db2291 | 493 | settingsMenu.add(Selection(&set_date_time, 5, NULL, "<Set Date/Time>")); |
rakware | 0:0b9548db2291 | 494 | |
rakware | 0:0b9548db2291 | 495 | settingsMenu.add(Selection(&exit_settings, 6, NULL, "<Exit Setup>")); |
rakware | 0:0b9548db2291 | 496 | |
rakware | 0:0b9548db2291 | 497 | activeMenu = &settingsMenu; |
rakware | 0:0b9548db2291 | 498 | |
rakware | 0:0b9548db2291 | 499 | |
rakware | 0:0b9548db2291 | 500 | char buffer[32]; |
rakware | 0:0b9548db2291 | 501 | struct tm *twhile; |
rakware | 0:0b9548db2291 | 502 | |
rakware | 0:0b9548db2291 | 503 | while(1) { |
rakware | 0:0b9548db2291 | 504 | |
rakware | 0:0b9548db2291 | 505 | time_t seconds = time(NULL); |
rakware | 0:0b9548db2291 | 506 | strftime(buffer, 32, "%H:%M:%S", localtime(&seconds)); |
rakware | 0:0b9548db2291 | 507 | |
rakware | 0:0b9548db2291 | 508 | |
rakware | 0:0b9548db2291 | 509 | twhile = localtime(&seconds); |
rakware | 0:0b9548db2291 | 510 | |
rakware | 0:0b9548db2291 | 511 | int timerica = (twhile->tm_hour*3600) + (twhile->tm_min*60) + twhile->tm_sec; |
rakware | 0:0b9548db2291 | 512 | |
rakware | 0:0b9548db2291 | 513 | |
rakware | 0:0b9548db2291 | 514 | pc.printf("%s %d %d\n", buffer, timerica, (SunRiseSet[0][0]*3600) + (SunRiseSet[0][1]*60) ); |
rakware | 0:0b9548db2291 | 515 | |
rakware | 0:0b9548db2291 | 516 | if (timerica == (SunRiseSet[0][0]*3600) + (SunRiseSet[0][1]*60)) { //TODO attach once at start out of while() |
rakware | 0:0b9548db2291 | 517 | Sunrise_Ticker.attach(&incs,1); //TODO check if allready attached |
rakware | 0:0b9548db2291 | 518 | } |
rakware | 0:0b9548db2291 | 519 | |
rakware | 0:0b9548db2291 | 520 | if (timerica == (SunRiseSet[1][0]*3600) + (SunRiseSet[1][1]*60)) { |
rakware | 0:0b9548db2291 | 521 | Sunset_Ticker.attach(&decs,1); //TODO check if allready attached |
rakware | 0:0b9548db2291 | 522 | } |
rakware | 0:0b9548db2291 | 523 | |
rakware | 0:0b9548db2291 | 524 | // for(uint8_t index = 0; index < 3; index++) { //index < sizeof(Pwm_Array)/sizeof(FastPWM) |
rakware | 0:0b9548db2291 | 525 | // pc.printf("pwm:[%i]%f ", index, Pwm_Array[index].read()); |
rakware | 0:0b9548db2291 | 526 | // } |
rakware | 0:0b9548db2291 | 527 | |
rakware | 0:0b9548db2291 | 528 | |
rakware | 0:0b9548db2291 | 529 | if (refresh_display == true) { |
rakware | 0:0b9548db2291 | 530 | switch(menu_state) { |
rakware | 0:0b9548db2291 | 531 | case MAIN: |
rakware | 0:0b9548db2291 | 532 | lcd.cls(); |
rakware | 0:0b9548db2291 | 533 | lcd.printf("MAIN"); |
rakware | 0:0b9548db2291 | 534 | refresh_display = false; |
rakware | 0:0b9548db2291 | 535 | break; |
rakware | 0:0b9548db2291 | 536 | case SETTINGS: |
rakware | 0:0b9548db2291 | 537 | lcd.cls(); |
rakware | 0:0b9548db2291 | 538 | lcd.locate(0,0); |
rakware | 0:0b9548db2291 | 539 | lcd.printf("%s", activeMenu->menuID); |
rakware | 0:0b9548db2291 | 540 | lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 541 | lcd.printf("%s", activeMenu->selections[cursorPos].selText); |
rakware | 0:0b9548db2291 | 542 | refresh_display = false; |
rakware | 0:0b9548db2291 | 543 | break; |
rakware | 0:0b9548db2291 | 544 | case PWM_MIN: |
rakware | 0:0b9548db2291 | 545 | lcd.cls(); |
rakware | 0:0b9548db2291 | 546 | lcd.printf("%s %2i", activeMenu->menuID, cursorPos); |
rakware | 0:0b9548db2291 | 547 | lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 548 | lcd.printf("<- %3i%% +>", Pwm_Min_Max_Array[cursorPos][0]); |
rakware | 0:0b9548db2291 | 549 | refresh_display = false; |
rakware | 0:0b9548db2291 | 550 | break; |
rakware | 0:0b9548db2291 | 551 | case PWM_MAX: |
rakware | 0:0b9548db2291 | 552 | lcd.cls(); |
rakware | 0:0b9548db2291 | 553 | lcd.printf("%s %2i", activeMenu->menuID, cursorPos); |
rakware | 0:0b9548db2291 | 554 | lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 555 | lcd.printf("<- %3i%% +>", Pwm_Min_Max_Array[cursorPos][1]); |
rakware | 0:0b9548db2291 | 556 | refresh_display = false; |
rakware | 0:0b9548db2291 | 557 | break; |
rakware | 0:0b9548db2291 | 558 | case SUNRISE: |
rakware | 0:0b9548db2291 | 559 | lcd.cls(); |
rakware | 0:0b9548db2291 | 560 | lcd.printf("%s %2i", activeMenu->menuID, cursorPos); |
rakware | 0:0b9548db2291 | 561 | lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 562 | lcd.printf("%02d:%02d", SunRiseSet[0][0],SunRiseSet[0][1]); |
rakware | 0:0b9548db2291 | 563 | refresh_display = false; |
rakware | 0:0b9548db2291 | 564 | break; |
rakware | 0:0b9548db2291 | 565 | case SUNRISE_HOUR: |
rakware | 0:0b9548db2291 | 566 | while(menu_state == SUNRISE_HOUR) { |
rakware | 0:0b9548db2291 | 567 | lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 568 | lcd.printf(" "); |
rakware | 0:0b9548db2291 | 569 | wait(0.1); |
rakware | 0:0b9548db2291 | 570 | lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 571 | lcd.printf("%02d",SunRiseSet[0][0]); |
rakware | 0:0b9548db2291 | 572 | wait(0.2); |
rakware | 0:0b9548db2291 | 573 | } |
rakware | 0:0b9548db2291 | 574 | break; |
rakware | 0:0b9548db2291 | 575 | case SUNRISE_MINUTE: |
rakware | 0:0b9548db2291 | 576 | while(menu_state == SUNRISE_MINUTE) { |
rakware | 0:0b9548db2291 | 577 | lcd.locate(3,1); |
rakware | 0:0b9548db2291 | 578 | lcd.printf(" "); |
rakware | 0:0b9548db2291 | 579 | wait(0.1); |
rakware | 0:0b9548db2291 | 580 | lcd.locate(3,1); |
rakware | 0:0b9548db2291 | 581 | lcd.printf("%02d",SunRiseSet[0][1]); |
rakware | 0:0b9548db2291 | 582 | wait(0.2); |
rakware | 0:0b9548db2291 | 583 | } |
rakware | 0:0b9548db2291 | 584 | break; |
rakware | 0:0b9548db2291 | 585 | case SUNSET: |
rakware | 0:0b9548db2291 | 586 | lcd.cls(); |
rakware | 0:0b9548db2291 | 587 | lcd.printf("%s %2i", activeMenu->menuID, cursorPos); |
rakware | 0:0b9548db2291 | 588 | lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 589 | lcd.printf("%02d:%02d", SunRiseSet[1][0],SunRiseSet[1][1]); |
rakware | 0:0b9548db2291 | 590 | refresh_display = false; |
rakware | 0:0b9548db2291 | 591 | break; |
rakware | 0:0b9548db2291 | 592 | case SUNSET_HOUR: |
rakware | 0:0b9548db2291 | 593 | while(menu_state == SUNSET_HOUR) { |
rakware | 0:0b9548db2291 | 594 | lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 595 | lcd.printf(" "); |
rakware | 0:0b9548db2291 | 596 | wait(0.1); |
rakware | 0:0b9548db2291 | 597 | lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 598 | lcd.printf("%02d",SunRiseSet[1][0]); |
rakware | 0:0b9548db2291 | 599 | wait(0.2); |
rakware | 0:0b9548db2291 | 600 | } |
rakware | 0:0b9548db2291 | 601 | break; |
rakware | 0:0b9548db2291 | 602 | case SUNSET_MINUTE: |
rakware | 0:0b9548db2291 | 603 | while(menu_state == SUNSET_MINUTE) { |
rakware | 0:0b9548db2291 | 604 | lcd.locate(3,1); |
rakware | 0:0b9548db2291 | 605 | lcd.printf(" "); |
rakware | 0:0b9548db2291 | 606 | wait(0.1); |
rakware | 0:0b9548db2291 | 607 | lcd.locate(3,1); |
rakware | 0:0b9548db2291 | 608 | lcd.printf("%02d",SunRiseSet[1][1]); |
rakware | 0:0b9548db2291 | 609 | wait(0.2); |
rakware | 0:0b9548db2291 | 610 | } |
rakware | 0:0b9548db2291 | 611 | break; |
rakware | 0:0b9548db2291 | 612 | case RAMPTIME: |
rakware | 0:0b9548db2291 | 613 | lcd.cls(); |
rakware | 0:0b9548db2291 | 614 | lcd.printf("%s %2i", activeMenu->menuID, cursorPos); |
rakware | 0:0b9548db2291 | 615 | lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 616 | lcd.printf("<- %3i +>", ramptime); |
rakware | 0:0b9548db2291 | 617 | refresh_display = false; |
rakware | 0:0b9548db2291 | 618 | break; |
rakware | 0:0b9548db2291 | 619 | case SET_DATE_TIME: |
rakware | 0:0b9548db2291 | 620 | lcd.cls(); |
rakware | 0:0b9548db2291 | 621 | lcd.printf("%02d/%02d/%04d",twhile->tm_mday, twhile->tm_mon, twhile->tm_year + 1900); |
rakware | 0:0b9548db2291 | 622 | lcd.locate(0,1); |
rakware | 0:0b9548db2291 | 623 | lcd.printf("%02d:%02d:%02d",twhile->tm_hour, twhile->tm_min, twhile->tm_sec); |
rakware | 0:0b9548db2291 | 624 | refresh_display = false; |
rakware | 0:0b9548db2291 | 625 | break; |
rakware | 0:0b9548db2291 | 626 | } |
rakware | 0:0b9548db2291 | 627 | } |
rakware | 0:0b9548db2291 | 628 | wait(0.5); |
rakware | 0:0b9548db2291 | 629 | } |
rakware | 0:0b9548db2291 | 630 | } |