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