diff --git a/Jenkinsfile b/Jenkinsfile index dcf9353..40b69c7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,7 +4,7 @@ pipeline { stages { stage('Build') { steps { - git branch: 'main', url: 'https://git.siwatsystem.com/ise-senior-iot/iot-firmware.git' + git branch: 'ise', url: 'https://git.siwatsystem.com/ise-senior-iot/iot-firmware.git' sh 'export PLATFORMIO_PATH=/root/.platformio/penv/bin/platformio' sh '/usr/bin/python3 gen_release.py' stash includes: 'release/**/*', name: 'release_binaries' diff --git a/ise_display/Images/Rev1/Background.png b/ise_display/Images/Rev1/Background.png new file mode 100644 index 0000000..48245ac Binary files /dev/null and b/ise_display/Images/Rev1/Background.png differ diff --git a/ise_display/Images/Rev1/Bar-Empty.png b/ise_display/Images/Rev1/Bar-Empty.png new file mode 100644 index 0000000..288907d Binary files /dev/null and b/ise_display/Images/Rev1/Bar-Empty.png differ diff --git a/ise_display/Images/Rev1/Bar-Full.png b/ise_display/Images/Rev1/Bar-Full.png new file mode 100644 index 0000000..460457f Binary files /dev/null and b/ise_display/Images/Rev1/Bar-Full.png differ diff --git a/ise_display/Images/Rev1/Bar-Off.png b/ise_display/Images/Rev1/Bar-Off.png new file mode 100644 index 0000000..29556ee Binary files /dev/null and b/ise_display/Images/Rev1/Bar-Off.png differ diff --git a/ise_display/Images/Rev1/Off-IC.png b/ise_display/Images/Rev1/Off-IC.png new file mode 100644 index 0000000..eab181e Binary files /dev/null and b/ise_display/Images/Rev1/Off-IC.png differ diff --git a/ise_display/Images/Rev1/Selector.png b/ise_display/Images/Rev1/Selector.png new file mode 100644 index 0000000..2c404a9 Binary files /dev/null and b/ise_display/Images/Rev1/Selector.png differ diff --git a/ise_display/Images/mvp-v1/bg-guide.png b/ise_display/Images/mvp-v1/bg-guide.png new file mode 100644 index 0000000..695ae2d Binary files /dev/null and b/ise_display/Images/mvp-v1/bg-guide.png differ diff --git a/ise_display/Images/mvp-v1/bg.png b/ise_display/Images/mvp-v1/bg.png new file mode 100644 index 0000000..e81c2a2 Binary files /dev/null and b/ise_display/Images/mvp-v1/bg.png differ diff --git a/ise_display/Images/mvp-v1/bgc.png b/ise_display/Images/mvp-v1/bgc.png new file mode 100644 index 0000000..b2f41f5 Binary files /dev/null and b/ise_display/Images/mvp-v1/bgc.png differ diff --git a/ise_display/Images/mvp-v1/lightow1.png b/ise_display/Images/mvp-v1/lightow1.png new file mode 100644 index 0000000..d996064 Binary files /dev/null and b/ise_display/Images/mvp-v1/lightow1.png differ diff --git a/ise_display/Images/mvp-v1/lightrow2.png b/ise_display/Images/mvp-v1/lightrow2.png new file mode 100644 index 0000000..65a4a60 Binary files /dev/null and b/ise_display/Images/mvp-v1/lightrow2.png differ diff --git a/ise_display/Images/mvp-v1/set1/airOff.png b/ise_display/Images/mvp-v1/set1/airOff.png new file mode 100644 index 0000000..9a11f72 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/airOff.png differ diff --git a/ise_display/Images/mvp-v1/set1/airOn.png b/ise_display/Images/mvp-v1/set1/airOn.png new file mode 100644 index 0000000..1ffdbeb Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/airOn.png differ diff --git a/ise_display/Images/mvp-v1/set1/fanAuto.png b/ise_display/Images/mvp-v1/set1/fanAuto.png new file mode 100644 index 0000000..43fea4f Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/fanAuto.png differ diff --git a/ise_display/Images/mvp-v1/set1/fanHigh.png b/ise_display/Images/mvp-v1/set1/fanHigh.png new file mode 100644 index 0000000..c54eb96 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/fanHigh.png differ diff --git a/ise_display/Images/mvp-v1/set1/fanLow.png b/ise_display/Images/mvp-v1/set1/fanLow.png new file mode 100644 index 0000000..20586fb Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/fanLow.png differ diff --git a/ise_display/Images/mvp-v1/set1/fanMid.png b/ise_display/Images/mvp-v1/set1/fanMid.png new file mode 100644 index 0000000..b11cacb Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/fanMid.png differ diff --git a/ise_display/Images/mvp-v1/set1/lightoff.png b/ise_display/Images/mvp-v1/set1/lightoff.png new file mode 100644 index 0000000..8653a69 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/lightoff.png differ diff --git a/ise_display/Images/mvp-v1/set1/lighton.png b/ise_display/Images/mvp-v1/set1/lighton.png new file mode 100644 index 0000000..c5d4410 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/lighton.png differ diff --git a/ise_display/Images/mvp-v1/set1/lv1off.png b/ise_display/Images/mvp-v1/set1/lv1off.png new file mode 100644 index 0000000..09ef11c Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/lv1off.png differ diff --git a/ise_display/Images/mvp-v1/set1/lv1on.png b/ise_display/Images/mvp-v1/set1/lv1on.png new file mode 100644 index 0000000..5458a18 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/lv1on.png differ diff --git a/ise_display/Images/mvp-v1/set1/lv2off.png b/ise_display/Images/mvp-v1/set1/lv2off.png new file mode 100644 index 0000000..5989373 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/lv2off.png differ diff --git a/ise_display/Images/mvp-v1/set1/lv2on.png b/ise_display/Images/mvp-v1/set1/lv2on.png new file mode 100644 index 0000000..927a806 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/lv2on.png differ diff --git a/ise_display/Images/mvp-v1/set1/modeCool.png b/ise_display/Images/mvp-v1/set1/modeCool.png new file mode 100644 index 0000000..f1e2856 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/modeCool.png differ diff --git a/ise_display/Images/mvp-v1/set1/modeDry.png b/ise_display/Images/mvp-v1/set1/modeDry.png new file mode 100644 index 0000000..639fbc5 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/modeDry.png differ diff --git a/ise_display/Images/mvp-v1/set1/modeFan.png b/ise_display/Images/mvp-v1/set1/modeFan.png new file mode 100644 index 0000000..c4514fe Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/modeFan.png differ diff --git a/ise_display/Images/mvp-v1/set1/row1off.png b/ise_display/Images/mvp-v1/set1/row1off.png new file mode 100644 index 0000000..d996064 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/row1off.png differ diff --git a/ise_display/Images/mvp-v1/set1/row1on.png b/ise_display/Images/mvp-v1/set1/row1on.png new file mode 100644 index 0000000..9f77956 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/row1on.png differ diff --git a/ise_display/Images/mvp-v1/set1/row2off.png b/ise_display/Images/mvp-v1/set1/row2off.png new file mode 100644 index 0000000..caf94fb Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/row2off.png differ diff --git a/ise_display/Images/mvp-v1/set1/row2on.png b/ise_display/Images/mvp-v1/set1/row2on.png new file mode 100644 index 0000000..e3185b4 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/row2on.png differ diff --git a/ise_display/Images/mvp-v1/set1/row3off.png b/ise_display/Images/mvp-v1/set1/row3off.png new file mode 100644 index 0000000..c4c049a Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/row3off.png differ diff --git a/ise_display/Images/mvp-v1/set1/row3on.png b/ise_display/Images/mvp-v1/set1/row3on.png new file mode 100644 index 0000000..a4c6092 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/row3on.png differ diff --git a/ise_display/Images/mvp-v1/set1/row4off.png b/ise_display/Images/mvp-v1/set1/row4off.png new file mode 100644 index 0000000..349cd01 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/row4off.png differ diff --git a/ise_display/Images/mvp-v1/set1/row4on.png b/ise_display/Images/mvp-v1/set1/row4on.png new file mode 100644 index 0000000..e8f24ee Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/row4on.png differ diff --git a/ise_display/Images/mvp-v1/set1/tempNeg-touched.png b/ise_display/Images/mvp-v1/set1/tempNeg-touched.png new file mode 100644 index 0000000..8640674 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/tempNeg-touched.png differ diff --git a/ise_display/Images/mvp-v1/set1/tempNeg.png b/ise_display/Images/mvp-v1/set1/tempNeg.png new file mode 100644 index 0000000..bd1f51b Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/tempNeg.png differ diff --git a/ise_display/Images/mvp-v1/set1/tempPlus-touched.png b/ise_display/Images/mvp-v1/set1/tempPlus-touched.png new file mode 100644 index 0000000..ee53c65 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/tempPlus-touched.png differ diff --git a/ise_display/Images/mvp-v1/set1/tempPlus.png b/ise_display/Images/mvp-v1/set1/tempPlus.png new file mode 100644 index 0000000..2647f70 Binary files /dev/null and b/ise_display/Images/mvp-v1/set1/tempPlus.png differ diff --git a/ise_display/fonts/Rajdhani-112-ascii.zi b/ise_display/fonts/Rajdhani-112-ascii.zi new file mode 100644 index 0000000..f7daca6 Binary files /dev/null and b/ise_display/fonts/Rajdhani-112-ascii.zi differ diff --git a/ise_display/fonts/Rajdhani-128-ascii.zi b/ise_display/fonts/Rajdhani-128-ascii.zi new file mode 100644 index 0000000..e9164e1 Binary files /dev/null and b/ise_display/fonts/Rajdhani-128-ascii.zi differ diff --git a/ise_display/fonts/Rajdhani-72-ascii.zi b/ise_display/fonts/Rajdhani-72-ascii.zi new file mode 100644 index 0000000..a696ad2 Binary files /dev/null and b/ise_display/fonts/Rajdhani-72-ascii.zi differ diff --git a/ise_display/fonts/Rajdhani-96-ascii.zi b/ise_display/fonts/Rajdhani-96-ascii.zi new file mode 100644 index 0000000..f5b5581 Binary files /dev/null and b/ise_display/fonts/Rajdhani-96-ascii.zi differ diff --git a/ise_display/fonts/arial_32_ascii.zi b/ise_display/fonts/arial_32_ascii.zi new file mode 100644 index 0000000..2a4c6d1 Binary files /dev/null and b/ise_display/fonts/arial_32_ascii.zi differ diff --git a/ise_display/ise_display.HMI b/ise_display/ise_display.HMI new file mode 100644 index 0000000..5f8c0a1 Binary files /dev/null and b/ise_display/ise_display.HMI differ diff --git a/ise_display/ise_display_test2.HMI b/ise_display/ise_display_test2.HMI new file mode 100644 index 0000000..e6dcbeb Binary files /dev/null and b/ise_display/ise_display_test2.HMI differ diff --git a/ise_display/mvp_display_v1.HMI b/ise_display/mvp_display_v1.HMI new file mode 100644 index 0000000..cea307b Binary files /dev/null and b/ise_display/mvp_display_v1.HMI differ diff --git a/src/user_code.cpp b/src/user_code.cpp index 49d4be7..85709d3 100644 --- a/src/user_code.cpp +++ b/src/user_code.cpp @@ -1,20 +1,197 @@ #include -//Timer Components -ESPMega_Timer timer1(0, 50, timer1_callback, 15001); - +uint8_t user_acmode = 0; // Display Componets // Link with Dual state button object with id 2 on page 1 named bt0 -NexDSButton bt0 = NexDSButton(1, 2, "bt0"); +NexButton light_toggle = NexButton(1,2,"light_toggle"); +NexButton row1_master = NexButton(1,11,"row1_master"); +NexButton row2_master = NexButton(1,12,"row2_master"); +NexButton row3_master = NexButton(1,14,"row3_master"); +NexButton row4_master = NexButton(1,13,"row4_master"); +NexButton row1_lv1 = NexButton(1,3,"row1_lv1"); +NexButton row1_lv2 = NexButton(1,4,"row1_lv2"); +NexButton row2_lv1 = NexButton(1,5,"row2_lv1"); +NexButton row2_lv2 = NexButton(1,6,"row2_lv2"); +NexButton row3_lv1 = NexButton(1,10,"row3_lv1"); +NexButton row3_lv2 = NexButton(1,7,"row3_lv2"); +NexButton row4_lv1 = NexButton(1,9,"row4_lv1"); +NexButton row4_lv2 = NexButton(1,8,"row4_lv2"); +NexButton temp_plus = NexButton(1,18,"temp_plus"); +NexButton temp_neg = NexButton(1,17,"temp_neg"); +NexButton fan = NexButton(1,16,"fan"); +NexButton mode = NexButton(1,15,"mode"); +NexButton ac_toggle = NexButton(1,1,"ac_toggle"); +NexText cur_temp = NexText(1,19,"cur_temp"); // List of Component ID Message to listen to NexTouch *nex_listen_list[] = { - &bt0, + &light_toggle, + &row1_master, + &row2_master, + &row3_master, + &row4_master, + &row1_lv1, + &row1_lv2, + &row2_lv1, + &row2_lv2, + &row3_lv1, + &row3_lv2, + &row4_lv1, + &row4_lv2, + &temp_plus, + &temp_neg, + &fan, + &mode, + &ac_toggle, NULL}; -void bt0PopCallback(void *ptr) +bool row_is_on(int light1_pin, int light2_pin) { + return pwm_get_state(light1_pin) && pwm_get_state(light2_pin); +} + +void light_toggle_pop_callback(void *ptr) { - pwm_toggle(2); + Serial.println("Toggle Button Pressed"); + bool new_state = !row_is_on(ROW1_LIGHT1,ROW1_LIGHT2) && !row_is_on(ROW2_LIGHT1,ROW2_LIGHT2) && !row_is_on(ROW3_LIGHT1,ROW3_LIGHT2) && !row_is_on(ROW4_LIGHT1,ROW4_LIGHT2); + pwm_set_state(ROW1_LIGHT1, new_state); + pwm_set_state(ROW1_LIGHT2, new_state); + pwm_set_state(ROW2_LIGHT1, new_state); + pwm_set_state(ROW2_LIGHT2, new_state); + pwm_set_state(ROW3_LIGHT1, new_state); + pwm_set_state(ROW3_LIGHT2, new_state); + pwm_set_state(ROW4_LIGHT1, new_state); + pwm_set_state(ROW4_LIGHT2, new_state); +} + +void row1_lv1_pop_callback(void *ptr) +{ + Serial.println("Row 1 Light 1 Button Pressed"); + pwm_toggle(ROW1_LIGHT1); +} + +void row1_lv2_pop_callback(void *ptr) +{ + Serial.println("Row 1 Light 2 Button Pressed"); + pwm_toggle(ROW1_LIGHT2); +} + +void row2_lv1_pop_callback(void *ptr) +{ + Serial.println("Row 2 Light 1 Button Pressed"); + pwm_toggle(ROW2_LIGHT1); +} + +void row2_lv2_pop_callback(void *ptr) +{ + Serial.println("Row 2 Light 2 Button Pressed"); + pwm_toggle(ROW2_LIGHT2); +} + +void row3_lv1_pop_callback(void *ptr) +{ + Serial.println("Row 3 Light 1 Button Pressed"); + pwm_toggle(ROW3_LIGHT1); +} + +void row3_lv2_pop_callback(void *ptr) +{ + Serial.println("Row 3 Light 2 Button Pressed"); + pwm_toggle(ROW3_LIGHT2); +} + +void row4_lv1_pop_callback(void *ptr) +{ + Serial.println("Row 4 Light 1 Button Pressed"); + pwm_toggle(ROW4_LIGHT1); +} + +void row4_lv2_pop_callback(void *ptr) +{ + Serial.println("Row 4 Light 2 Button Pressed"); + pwm_toggle(ROW4_LIGHT2); +} + +void increase_temp() { + uint8_t current_temp = ac_get_temperature(); + ac_set_state(ac_get_mode(), current_temp+1, ac_get_fan_speed()); +} + +void decrease_temp() { + uint8_t current_temp = ac_get_temperature(); + ac_set_state(ac_get_mode(), current_temp-1, ac_get_fan_speed()); +} + +void temp_plus_pop_callback(void *ptr) +{ + Serial.println("Temp Plus Button Pressed"); + increase_temp(); +} + +void temp_neg_pop_callback(void *ptr) +{ + Serial.println("Temp Neg Button Pressed"); + decrease_temp(); +} + +void fan_pop_callback(void *ptr) +{ + Serial.println("Fan Button Pressed"); + uint8_t current_fan_speed = ac_get_fan_speed(); + uint8_t new_fan_speed = (current_fan_speed + 1) % 4; // Loop back to 0 when reaching 3 + ac_set_state(ac_get_mode(), ac_get_temperature(), new_fan_speed); +} + +void mode_pop_callback(void *ptr) +{ + Serial.println("Mode Button Pressed"); + uint8_t current_mode = ac_get_mode(); + uint8_t new_mode = (current_mode + 1) % 3; // Loop back to 0 when reaching 2 + ac_set_state(new_mode, ac_get_temperature(), ac_get_fan_speed()); +} + +void ac_toggle_pop_callback(void *ptr) +{ + Serial.println("AC Toggle Button Pressed"); + //this function should set the state of the AC to toggle between off (mode 0) and the same state as before store in variable acmode + if (ac_get_mode() == 0) { + ac_set_state(user_acmode, ac_get_temperature(), ac_get_fan_speed()); + } else { + user_acmode = ac_get_mode(); + ac_set_state(0, ac_get_temperature(), ac_get_fan_speed()); + } + +} + +void row1_master_pop_callback(void *ptr) +{ + Serial.println("Row 1 Master Button Pressed"); + bool new_state = !row_is_on(ROW1_LIGHT1,ROW1_LIGHT2); + pwm_set_state(ROW1_LIGHT1, new_state); + pwm_set_state(ROW1_LIGHT2, new_state); +} + +void row2_master_pop_callback(void *ptr) +{ + Serial.println("Row 2 Master Button Pressed"); + bool new_state = !row_is_on(ROW2_LIGHT1,ROW2_LIGHT2); + pwm_set_state(ROW2_LIGHT1, new_state); + pwm_set_state(ROW2_LIGHT2, new_state); +} + +void row3_master_pop_callback(void *ptr) +{ + Serial.println("Row 3 Master Button Pressed"); + bool new_state = !row_is_on(ROW3_LIGHT1,ROW3_LIGHT2); + pwm_set_state(ROW3_LIGHT1, new_state); + pwm_set_state(ROW3_LIGHT2, new_state); +} + +void row4_master_pop_callback(void *ptr) +{ + Serial.println("Row 4 Master Button Pressed"); + bool new_state = !row_is_on(ROW4_LIGHT1,ROW4_LIGHT2); + pwm_set_state(ROW4_LIGHT1, new_state); + pwm_set_state(ROW4_LIGHT2, new_state); } /* @@ -31,14 +208,27 @@ This code will run after every component is initialized */ void user_init() { - timer1.begin(); - ESPMega_EXTLCD.print("page home"); - ESPMega_EXTLCD.write(0xFF); - ESPMega_EXTLCD.write(0xFF); - ESPMega_EXTLCD.write(0xFF); - bt0.attachPop(bt0PopCallback, &bt0); + elcd.print("page main"); + elcd_send_stop_bit(); + light_toggle.attachPop(light_toggle_pop_callback, &light_toggle); + row1_lv1.attachPop(row1_lv1_pop_callback, &row1_lv1); + row1_lv2.attachPop(row1_lv2_pop_callback, &row1_lv2); + row2_lv1.attachPop(row2_lv1_pop_callback, &row2_lv1); + row2_lv2.attachPop(row2_lv2_pop_callback, &row2_lv2); + row3_lv1.attachPop(row3_lv1_pop_callback, &row3_lv1); + row3_lv2.attachPop(row3_lv2_pop_callback, &row3_lv2); + row4_lv1.attachPop(row4_lv1_pop_callback, &row4_lv1); + row4_lv2.attachPop(row4_lv2_pop_callback, &row4_lv2); + row1_master.attachPop(row1_master_pop_callback, &row1_master); + row2_master.attachPop(row2_master_pop_callback, &row2_master); + row3_master.attachPop(row3_master_pop_callback, &row3_master); + row4_master.attachPop(row4_master_pop_callback, &row4_master); + temp_plus.attachPop(temp_plus_pop_callback, &temp_plus); + temp_neg.attachPop(temp_neg_pop_callback, &temp_neg); + fan.attachPop(fan_pop_callback, &fan); + mode.attachPop(mode_pop_callback, &mode); + ac_toggle.attachPop(ac_toggle_pop_callback, &ac_toggle); } - /* This code will run once every event loop */ @@ -54,12 +244,112 @@ void virtual_interrupt_user_callback(int pin, int state) { } +void update_lcd_row1() { + bool master_state = row_is_on(ROW1_LIGHT1,ROW1_LIGHT2); + row1_master.Set_background_image_pic(master_state?9:10); + bool lt1_state = pwm_get_state(ROW1_LIGHT1); + bool lt2_state = pwm_get_state(ROW1_LIGHT2); + //also update the light1 and light2 buttons background to reflect the current state + row1_lv1.Set_background_image_pic(lt1_state?5:6); + row1_lv2.Set_background_image_pic(lt2_state?7:8); + +} + +void update_lcd_row2() { + bool master_state = row_is_on(ROW2_LIGHT1,ROW2_LIGHT2); + row2_master.Set_background_image_pic(master_state?11:12); + bool lt1_state = pwm_get_state(ROW2_LIGHT1); + bool lt2_state = pwm_get_state(ROW2_LIGHT2); + //also update the light1 and light2 buttons background to reflect the current state + row2_lv1.Set_background_image_pic(lt1_state?5:6); + row2_lv2.Set_background_image_pic(lt2_state?7:8); + + +} + +void update_lcd_row3() { + bool master_state = row_is_on(ROW3_LIGHT1,ROW3_LIGHT2); + row3_master.Set_background_image_pic(master_state?13:14); + bool lt1_state = pwm_get_state(ROW3_LIGHT1); + bool lt2_state = pwm_get_state(ROW3_LIGHT2); + //also update the light1 and light2 buttons background to reflect the current state + row3_lv1.Set_background_image_pic(lt1_state?5:6); + row3_lv2.Set_background_image_pic(lt2_state?7:8); + +} + +void update_lcd_row4() { + bool master_state = row_is_on(ROW4_LIGHT1,ROW4_LIGHT2); + row4_master.Set_background_image_pic(master_state?15:16); + bool lt1_state = pwm_get_state(ROW4_LIGHT1); + bool lt2_state = pwm_get_state(ROW4_LIGHT2); + //also update the light1 and light2 buttons background to reflect the current state + row4_lv1.Set_background_image_pic(lt1_state?5:6); + row4_lv2.Set_background_image_pic(lt2_state?7:8); + +} + +void update_toggle_button() { + //calcuate the current state of the toggle button + bool current_state = row_is_on(ROW1_LIGHT1,ROW1_LIGHT2) || row_is_on(ROW2_LIGHT1,ROW2_LIGHT2) || row_is_on(ROW3_LIGHT1,ROW3_LIGHT2) || row_is_on(ROW4_LIGHT1,ROW4_LIGHT2); + light_toggle.Set_background_image_pic(current_state?3:4); +} + +void update_lcd_ac() { + //update the current temperature + char temp_str[3]; + sprintf(temp_str, "%d", ac_get_temperature()); + cur_temp.setText(temp_str); + //update the fan speed auto is 18, high 19, medium 21, low 20 + // Fan Speed 0: Auto, 1: High, 2: Mid, 3: Low + uint8_t fan_speed = ac_get_fan_speed(); + if(fan_speed == 0) { + fan.Set_background_image_pic(18); + } else if(fan_speed == 1) { + fan.Set_background_image_pic(19); + } else if(fan_speed == 2) { + fan.Set_background_image_pic(21); + } else if(fan_speed == 3) { + fan.Set_background_image_pic(20); + } else { + fan.Set_background_image_pic(18); + } + //update the mode cool is 22, fan mode is 24, for off the toggle button act as indicator + //Mode 0: Off, 1: Cool, 2: Fan + uint8_t mode_state = ac_get_mode(); + mode.Set_background_image_pic(mode_state==1?22:24); + //update the ac toggle button + ac_toggle.Set_background_image_pic(ac_get_mode()==0?1:2); +} + + + void pwm_changed_user_callback(int pin) { - if (pin == 2) + switch (pin) { - // inform the lcd when pwm 2 changed - bt0.setValue(pwm_get_state(2)); + case ROW1_LIGHT1: + case ROW1_LIGHT2: + update_lcd_row1(); + update_toggle_button(); + break; + case ROW2_LIGHT1: + case ROW2_LIGHT2: + update_lcd_row2(); + update_toggle_button(); + break; + case ROW3_LIGHT1: + case ROW3_LIGHT2: + update_lcd_row3(); + update_toggle_button(); + break; + case ROW4_LIGHT1: + case ROW4_LIGHT2: + update_lcd_row4(); + update_toggle_button(); + break; + default: + break; } } @@ -70,15 +360,6 @@ void timer_tick_callback() { if (standalone) { - timer1.loop(); - } -} - -void timer1_callback() -{ - for (int i = 0; i < 16; i++) - { - pwm_set_state(i, 1); } } @@ -96,4 +377,10 @@ void user_state_request_callback() { void user_mqtt_callback(char* topic, uint8_t topic_length, char* payload, unsigned int payload_length) { +} + +void elcd_send_stop_bit() { + elcd.write(0xFF); + elcd.write(0xFF); + elcd.write(0xFF); } \ No newline at end of file diff --git a/src/user_code.hpp b/src/user_code.hpp index 938316e..601195a 100644 --- a/src/user_code.hpp +++ b/src/user_code.hpp @@ -6,6 +6,22 @@ #include "espmega_iot_timer.hpp" #include "espmega_iot_external_lcd.hpp" +// I/O Assignment +// Available Inputs 0-15 +// Available Outputs 0-3, 7-11 +// There are 4 rows of lights +// Each row has 2 lights +// Each light has 2 states +#define ROW1_LIGHT1 0 +#define ROW1_LIGHT2 1 +#define ROW2_LIGHT1 2 +#define ROW2_LIGHT2 3 +#define ROW3_LIGHT1 7 +#define ROW3_LIGHT2 8 +#define ROW4_LIGHT1 9 +#define ROW4_LIGHT2 10 +#define COMPUTER_DESK_CONTACTOR 12 + // Bus Overclocking Configuration // Do not enable if you are using external I/O cards as it will cause signal integrity issues. // Choose only one mode @@ -44,9 +60,38 @@ // Analog Module Configuration #define ANALOG_REPORTING_INTERVAL 500 +// User Defined Variables + // User Defined Functions -void timer1_callback(); -void bt0PopCallback(void *ptr); +#define elcd ESPMega_EXTLCD +void elcd_send_stop_bit(); +bool row_is_on(int light1_pin, int light2_pin); +void update_lcd_row1(); +void update_lcd_row2(); +void update_lcd_row3(); +void update_lcd_row4(); +void update_toggle_button(); +void light_toggle_pop_callback(void *ptr); +void row1_lv1_pop_callback(void *ptr); +void row1_lv2_pop_callback(void *ptr); +void row2_lv1_pop_callback(void *ptr); +void row2_lv2_pop_callback(void *ptr); +void row3_lv1_pop_callback(void *ptr); +void row3_lv2_pop_callback(void *ptr); +void row4_lv1_pop_callback(void *ptr); +void row4_lv2_pop_callback(void *ptr); +void row1_master_pop_callback(void *ptr); +void row2_master_pop_callback(void *ptr); +void row3_master_pop_callback(void *ptr); +void row4_master_pop_callback(void *ptr); +void increase_temp(); +void decrease_temp(); +void temp_plus_pop_callback(void *ptr); +void temp_neg_pop_callback(void *ptr); +void fan_pop_callback(void *ptr); +void mode_pop_callback(void *ptr); +void ac_toggle_pop_callback(void *ptr); + // User Defined IoT Core Callback Functions (Required) void user_mqtt_callback(char* topic, uint8_t topic_length, char* payload, unsigned int payload_length);