From 6e13ff47c138627f2ebeb17f0fecdd36629a5b48 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Fri, 7 Feb 2020 08:28:54 +0100 Subject: fix mode transitions --- src/system.cc | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/system.cc b/src/system.cc index 6726db9..b7d17e6 100644 --- a/src/system.cc +++ b/src/system.cc @@ -124,7 +124,7 @@ void System::loop() uint8_t anim_step = 0; if (mode_changed) { mode_changed = 0; - if (mode >= SLOWRGB) { + if ((mode == SLOWRGB) || (mode >= FASTRGB)) { PORTD &= ~BIT_WW; PORTB = 0; // 8 bit fast PWM on OC0A, OC1A, OC1B @@ -149,6 +149,11 @@ void System::loop() break; case WARMWHITE: PORTD |= BIT_WW; + PORTB = 0; + break; + case SUN: + PORTD |= BIT_WW; + PORTB = BIT_RED | BIT_GREEN | BIT_BLUE; break; case RED: PORTD &= ~BIT_WW; @@ -169,22 +174,18 @@ void System::loop() case CYAN: PORTB = BIT_GREEN | BIT_BLUE; break; - case SUN: - PORTD |= BIT_WW; - PORTB = BIT_RED | BIT_GREEN | BIT_BLUE; - break; default: break; } } - if (mode == FASTRGB || mode == FASTRGB2) { + if ((mode == FASTRGB) || (mode == FASTRGB2)) { anim_step = anim_step_fine; - } else if (mode == SLOWRGB || mode == SLOWRGB2) { + } else if ((mode == SLOWRGB) || (mode == SLOWRGB2)) { anim_step = anim_step_coarse; } - if (mode == FASTRGB || mode == SLOWRGB) { + if ((mode == FASTRGB) || (mode == SLOWRGB)) { if (anim_step < HSBTABLE_LEN) { PWM_GREEN = pgm_read_byte(&hsbtable[HSBTABLE_LEN - 1 - anim_step]); } @@ -203,7 +204,7 @@ void System::loop() else if (anim_step < 6*HSBTABLE_LEN) { PWM_BLUE = pgm_read_byte(&hsbtable[anim_step - 5*HSBTABLE_LEN]); } - } else if (mode == FASTRGB2 || mode == SLOWRGB2) { + } else if ((mode == FASTRGB2) || (mode == SLOWRGB2)) { if (anim_step < HSBTABLE2_LEN) { PWM_RED = pgm_read_byte(&hsbtable2[anim_step]); PWM_GREEN = pgm_read_byte(&hsbtable2[HSBTABLE2_LEN - 1 - anim_step]); @@ -217,7 +218,7 @@ void System::loop() PWM_BLUE = pgm_read_byte(&hsbtable2[anim_step - 2*HSBTABLE2_LEN]); } } - if (mode >= SLOWRGB) { + if ((mode == SLOWRGB) || (mode >= FASTRGB)) { if (OCR0A) TCCR0A |= _BV(COM0A1); else @@ -232,10 +233,10 @@ void System::loop() TCCR1A &= ~_BV(COM1B1); } - if (mode >= SLOWRGB || btn_debounce) { - idle(); - } else { + if (mode == OFF) { sleep(); + } else { + idle(); } } -- cgit v1.2.3