控制RGB LED的开/关-比使用“ if”更聪明的方法吗? (Arduino,C ++)

问题描述 投票:0回答:1

我想控制三个RGB LED的颜色(总共有9个LED)以及是否打开或关闭。我正在将Arduino与PlatformIO和FastLED库一起使用,以使用FastLED.show();

打开它们。

我的显示屏上有六个按钮LED1LED2LED3红色绿色蓝色(双状态按钮)给我

true按下时和

[false发行时

void bt0PopCallback(void *ptr){uint32_t dual_state; NexDSButton *btn = (NexDSButton *)ptr; bt0.getValue(&dual_state); if(dual_state){ LED1 = true; } else{ LED1 = false; } }
void bt1PopCallback(void *ptr){uint32_t dual_state; NexDSButton *btn = (NexDSButton *)ptr; bt1.getValue(&dual_state); if(dual_state){ LED2 = true; } else{ LED2 = false; } }
void bt2PopCallback(void *ptr){uint32_t dual_state; NexDSButton *btn = (NexDSButton *)ptr; bt2.getValue(&dual_state); if(dual_state){ LED3 = true; } else{ LED3 = false; } }
按下LED1按钮时

例如:LED1 = true,当释放按钮时<< LED1 = false。

如果LED1 =真,RED =真,则该指示灯将变为红色。当释放红色并按下绿色时,LED1现在变为绿色。如果释放LED1并按下LED2,则LED1熄灭,LED2呈绿色点亮。

我想到了这个:

if(BLUE == true){BLUEV = 255;} else { BLUEV = 0;} if(RED == true){REDV = 255;} else { REDV = 0;} if(GREEN == true){GREENV = 255;} else { GREENV = 0;} if(LED1 == true){leds[0] = CRGB(REDV, GREENV, BLUEV); } else { leds[0] = CRGB(0, 0, 0); } if(LED2 == true){leds[1] = CRGB(REDV, GREENV, BLUEV); } else { leds[1] = CRGB(0, 0, 0); } if(LED3 == true){leds[2] = CRGB(REDV, GREENV, BLUEV); } else { leds[2] = CRGB(0, 0, 0); } FastLED.show();

但是我认为这显然是不完美的。 

任何人都有建议如何对其进行更好的编码?也许使用开关盒?

干杯!

c++ if-statement arduino switch-statement led
1个回答
0
投票
void bt0PopCallback( void* ptr ) { uint32_t dual_state; NexDSButton* btn = (NexDSButton*) ptr; bt0.getValue( &dual_state ); LED1 = dual_state; // direct assignment }

对于颜色代码中的其他if-else变体,您可以使用三元运算符?:像这样来清除内容:

BLUEV = BLUE ? 255 : 0; REDV = RED ? 255 : 0; GREENV = GREEN ? 255 : 0;

并且,要设置leds数组的值,请使用for循环。可以使用LED1LED2LED3std::array分组,以便在循环中使用std::array的相应值。

这里是leds的示例:

std::array

#include <array> const std::array<decltype(LED1), NUM_LEDS> LED { LED1, LED2, LED3 }; for ( int i = 0; i < NUM_LEDS; ++i ) // loop to set the colors of LEDs { leds[i] = LED[i] ? CRGB(REDV, GREENV, BLUEV) : CRGB(0, 0, 0); } 表示NUM_LEDS数组的大小,即:

leds

© www.soinside.com 2019 - 2024. All rights reserved.