如何让 LED 代码从键盘按下运行
How to get LED code to run from Keypad presses
我正在使用 FastLED 库和键盘库在我的 WS2812 灯上运行代码。当我只使用基本的键盘布局来打印出正在按下的键时,此代码有效。但是现在我添加了从键盘 if 语句运行代码的方法,似乎它不起作用。当我按下键盘上的数字时,灯没有任何变化。目前 LED 代码在方法中。我以前只是在键盘本身的 if 语句中使用它。我将保持此处包含的代码尽可能简洁,以免我认为不相关的内容淹没屏幕。如果您有任何问题,我可以提供其余代码的相关片段。
void setup() {
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(32);
Serial.begin(9600);
}
void christmas() {
for(int i = 0; i < 6; i++){
for(int i = 0; i > 299; i++) {
leds[i] = CRGB (0, 128, 0); //green
FastLED.show();
leds[i+1] = CRGB (255, 0, 0); //red
FastLED.show();
delay(20);
}
//the second loop turns the first light red and the second light green starting at the end
for (int i = 299; i <= 0; i--) {
leds[i] = CRGB (255, 0, 0); //green
FastLED.show();
leds[i + 1] = CRGB (0, 128, 0); //red
FastLED.show();
delay(20);
}
}
}
void loop() {
char key = keypad.getKey(); //determines what key is pressed
if (key == '1'){
christmas();
}
if (key == '2'){
dot();
}
if (key == '3'){
mavericks();
}
if (key == '4'){
rainbow();
}
if (key == '5'){
blueBar();
}
if (key == '6'){
purple();
}
需要明确的是,运行代码时没有错误。它运行良好。但是,当按下键盘上的键时,它什么也没做,我相信它应该运行调用的方法并相应地影响灯光。
编辑:
在实现Bobby Tables建议后,它在一定程度上起作用。除了现在当我按 1 时,它是:
void christmas() {
delay(10);
for(int j = 0; j < 6; j++){
delay(10);
for(int i = 0; i > 299; i++) {
delay(10);
leds[i] = CRGB::Red; //green
FastLED.show();
leds[i+1] = CRGB::Green; //red
FastLED.show();
delay(20);
}
//the second loop turns the first light red and the second light green starting at the end
for (int i = 299; i >= 0; i--) {
leds[i] = CRGB::Green; //green
FastLED.show();
leds[i + 1] = CRGB::Red;
FastLED.show();
delay(20);
}
}
}
它会立即运行,但如果我按任何其他键,它将无法完全运行。例如当我按 5 时,它是:
void blueBar() {
delay(10);
fill_solid(leds, NUM_LEDS, CRGB::White);
delay(10);
for(int j = 0; j < 6; j++) {
delay(10);
for(int i = 0; i < 299; i++) {
leds[i] = CRGB::Blue;
leds[i + 1] = CRGB::Blue;
leds[i + 2] = CRGB::Blue;
leds[i + 3] = CRGB::Blue;
leds[i + 4] = CRGB::Blue;
leds[i + 5] = CRGB::Blue;
FastLED.show();
delay(200);
leds[i] = CRGB::White;
FastLED.show();
}
}
}
它什么都不做。除非我按 5 然后按 1。它将填充最初的纯白色,然后开始运行圣诞节((。
我现在相信你的 if 语句工作正常,但由于循环条件的不正确形成,christmas()
什么也没做。我怀疑您在其他照明模式中也有类似的问题。
这是对两个循环都使用i
。此外,第二个循环永远不会运行,因为i > 299
立即为假:
for(int i = 0; i < 6; i++){
for(int i = 0; i > 299; i++) {
这也永远不会运行,因为i
立即大于 0:
for (int i = 299; i <= 0; i--) {
相关文章:
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 物理键盘上的触发器按键
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何在运行中期切换GTK CSS style_context
- 如何在MS Visual Studio 2019中运行QT UI
- 如何通过cpp程序运行shell脚本
- IPC使用多个管道和分支进程来运行Python程序
- 在 Linux 上C++:在作为 systemd 服务运行时侦听键盘输入
- 如何让 LED 代码从键盘按下运行
- 为什么如果我从键盘输入EOF克里昂不要在运行窗口打印程序的输出?
- 如何使用 Turbo C++并行运行两个功能,一个用于键盘,一个用于鼠标?
- 如何使步进电机运行,直到我按下 Arduino 上的特定键盘按钮
- 是否有一种方法可以在Vim中添加自定义键盘快捷键来运行大量命令?
- 有没有办法防止键盘宏在程序上运行?
- XGrabKeyboard仅在程序运行时阻止键盘