【发布时间】:2022-01-12 02:46:20
【问题描述】:
我想使用 Adafruit_NeoPixel 库创建一个 LED 动画。
不幸的是,我正在为一个可能倾倒的事情而苦苦挣扎。由于某种原因,当使用某个数组访问 if (led_states[pixel] > 0) { 时,条带不再起作用。这意味着即使 strip.clean() + strip.show() 在安装程序中也不再起作用。愿你能告诉我我做错了什么,因为我真的不明白。 PS:如果有帮助,我正在使用带有 arduino 框架的 ATtiny85。
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#include <SoftwareSerial.h>
#define LED_AMOUNT 30
#define LED_DATA_PIN PB1
SoftwareSerial SWSERIAL(0, PB3); // RX, TX
Adafruit_NeoPixel strip(LED_AMOUNT, LED_DATA_PIN, NEO_GRB + NEO_KHZ800);
int step = 2;
int max = 255 - step;
int led_states[LED_AMOUNT] = { 0 };
int led_values[LED_AMOUNT] = { 0 };
unsigned long last_frame = 0;
unsigned long last_change = 0;
void led_test_setup() {
delay(5000);
SWSERIAL.begin(9600);
SWSERIAL.println("Setup");
randomSeed(analogRead(0));
strip.begin();
strip.clear();
strip.show();
}
void led_test_loop() {
unsigned long now = millis();
if (last_change + 200 < now) {
int pixel = random(0, LED_AMOUNT);
led_states[pixel] = 1;
led_values[pixel] = 0;
last_change = now;
}
if (last_frame + 10 < now) {
for (int pixel = 0; pixel < LED_AMOUNT; pixel++) {
if (led_states[pixel] > 0) { // <---- strip works when commenting this block
SWSERIAL.printf("V: %i\n", led_values[pixel]);
}
strip.setPixelColor(pixel, led_values[pixel], led_values[pixel], led_values[pixel]);
}
last_frame = now;
strip.show();
}
}
【问题讨论】:
-
尝试改变
if (led_states[pixel] > 0) { // ..to 只是...SWSERIAL.printf("V: %i\n", led_values[pixel]);...看看是否可行。 (我的猜测是不会) -
注释掉
if (led_state[pixel] > 0) {但保留printf有效。条带仍然可以控制。一旦我再次取消注释 if ,就无法再控制条带了。不知道这有什么关系 o.O 为什么你会期望那时不起作用?奇怪的是也没有异常,代码仍然按预期运行并记录,但只是条带函数不起作用。 -
led_values中的值始终为 0,因此 LED 始终处于关闭状态。我不确定您是否认为 LED 灯条在工作。 -
我知道它是否正常工作,因为条带在闪烁过程中被点亮。因此,当它再次关闭时,它可以工作。如果没有,它没有
标签: c++ arduino attiny neopixel