Pokus o zprehledneni kodu

This commit is contained in:
Pavel Brychta 2021-08-02 13:24:36 +02:00
parent c5fab3dec2
commit d532130d0a
2 changed files with 12 additions and 33 deletions

View File

@ -33,10 +33,10 @@ static const uint16_t LB[] PROGMEM = {
0x12d , 0x12a , 0x126 , 0x123 , 0x11f , 0x11c , 0x11a , 0x117 , 0x115 , 0x112 , 0x110 , 0x10e , 0x10c , 0x10b , 0x109 , 0x108 , 0x107 , 0x105 , 0x104 , 0x203 , 0x102 , 0x201 , 0x2a00 0x12d , 0x12a , 0x126 , 0x123 , 0x11f , 0x11c , 0x11a , 0x117 , 0x115 , 0x112 , 0x110 , 0x10e , 0x10c , 0x10b , 0x109 , 0x108 , 0x107 , 0x105 , 0x104 , 0x203 , 0x102 , 0x201 , 0x2a00
}; };
inline bool wsLED::canShow(void) static void ICACHE_RAM_ATTR ledTrampoline(wsLED *ptr)
{ {
return (micros() - _endtime) >= 70L; ptr->rtLed();
} }
void wsLED::show(void) void wsLED::show(void)
@ -48,8 +48,6 @@ void wsLED::show(void)
uint16_t c = (uint16_t)_color[i] * (1 + (uint16_t)_scale); uint16_t c = (uint16_t)_color[i] * (1 + (uint16_t)_scale);
color[i] = (uint8_t)(c >> 8); color[i] = (uint8_t)(c >> 8);
} }
while (!canShow())
__asm__ volatile ("nop");
#if defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP32)
rmt_item32_t led_data_buffer[LED_BUFFER_ITEMS]; rmt_item32_t led_data_buffer[LED_BUFFER_ITEMS];
@ -67,7 +65,6 @@ led_data_buffer[bit] = bit_is_set ? (rmt_item32_t) {{{T1H, 1, TL, 0}}} : (rmt_it
send_pixels_800(color, 1, _pin); send_pixels_800(color, 1, _pin);
interrupts(); interrupts();
#endif #endif
_endtime = micros();
} }
@ -126,63 +123,48 @@ void wsLED::setColor(LEDRGB color)
void ICACHE_RAM_ATTR wsLED::rtLed(void) void ICACHE_RAM_ATTR wsLED::rtLed(void)
{ {
_handler.detach();
switch (_ledState) { switch (_ledState) {
case LED_BLINK: case LED_BLINK:
_handler.detach();
if (_subState) { if (_subState) {
_subState = 0;
setColor(_color2); setColor(_color2);
} else { } else {
_subState = 1;
setColor(_color1); setColor(_color1);
} }
show(); _subState = !_subState;
_handler.attach_ms(_blinkSpeed, lh, this); _handler.attach_ms(_blinkSpeed, ledTrampoline, this);
break; break;
case LED_BREATH: { case LED_BREATH: {
_handler.detach();
++_subState; ++_subState;
_subState %= countof(LB); _subState %= countof(LB);
uint16_t val = pgm_read_word(&LB[_subState]); uint16_t val = pgm_read_word(&LB[_subState]);
_scale = (uint8_t)val; _scale = (uint8_t)val;
show();
val >>= 8; val >>= 8;
uint32_t timing = 30ul * val; uint32_t timing = 30ul * val;
_handler.attach_ms(timing, lh, this); _handler.attach_ms(timing, ledTrampoline, this);
break; break;
} }
case LED_PULSE: { case LED_PULSE: {
_handler.detach();
_ledState = _savedState; _ledState = _savedState;
_subState = 0; _subState = 0;
setColor(_color1); setColor(_color1);
show(); _handler.attach_ms(5, ledTrampoline, this); // co nejrychleji do predchoziho stavu
_handler.attach_ms(1, lh, this); // co nejrychleji do predchoziho stavu
break; break;
} }
case LED_PULSE_START: case LED_PULSE_START:
_handler.detach();
setColor(_pulseColor); setColor(_pulseColor);
show();
_ledState = LED_PULSE; _ledState = LED_PULSE;
_handler.attach_ms(_pulseDuration, lh, this); _handler.attach_ms(_pulseDuration, ledTrampoline, this);
break; break;
default: default:
_handler.detach();
break; break;
} }
} show();
void ICACHE_RAM_ATTR wsLED::lh(wsLED *ptr)
{
wsLED *pled = ptr;
pled->rtLed();
} }
void wsLED::setColors(LEDRGB color1, LEDRGB color2) void wsLED::setColors(LEDRGB color1, LEDRGB color2)
@ -205,7 +187,7 @@ void wsLED::blink(uint32_t speed)
_scale = 0xff; _scale = 0xff;
_subState = 1; _subState = 1;
_blinkSpeed = speed; _blinkSpeed = speed;
_handler.attach_ms(1, lh, this); _handler.attach_ms(5, ledTrampoline, this);
} }
} }
} }
@ -219,7 +201,7 @@ void wsLED::breath(void)
_ledState = LED_BREATH; _ledState = LED_BREATH;
_subState = 0; _subState = 0;
setColor(_color1); setColor(_color1);
_handler.attach_ms(1, lh, this); _handler.attach_ms(5, ledTrampoline, this);
} }
} }
} }
@ -242,7 +224,7 @@ void wsLED::pulse(LEDRGB color, uint32_t duration)
} }
_pulseDuration = duration; _pulseDuration = duration;
_ledState = LED_PULSE_START; _ledState = LED_PULSE_START;
_handler.attach_ms(5, lh, this); _handler.attach_ms(5, ledTrampoline, this);
} }
} }

View File

@ -129,7 +129,6 @@ protected:
LEDRGB _color1; LEDRGB _color1;
LEDRGB _color2; LEDRGB _color2;
int _order; // ColorOrder int _order; // ColorOrder
uint32_t _endtime;
uint8_t _scale; uint8_t _scale;
uint8_t _color[3]; uint8_t _color[3];
Ticker _handler; Ticker _handler;
@ -143,7 +142,6 @@ protected:
int _rmtChannel; int _rmtChannel;
#endif #endif
bool canShow(void);
void show(void); void show(void);
void setColor(LEDRGB color); void setColor(LEDRGB color);
#if defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP32)
@ -155,7 +153,6 @@ public:
wsLED(void); wsLED(void);
void begin(void); void begin(void);
void begin(int pin); void begin(int pin);
static void lh(wsLED *ptr);
void rtLed(void); // vykonna metoda void rtLed(void); // vykonna metoda
void setColors(LEDRGB color1, LEDRGB color2 = LEDRGB(0, 0, 0)); void setColors(LEDRGB color1, LEDRGB color2 = LEDRGB(0, 0, 0));
void blink(uint32_t speed = 300); void blink(uint32_t speed = 300);