ATtiny85 + Adafruit_NeoPixel 不适用于数组
Posted
技术标签:
【中文标题】ATtiny85 + Adafruit_NeoPixel 不适用于数组【英文标题】:ATTiny85 + Adafruit_NeoPixel not working with array 【发布时间】: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 灯条在工作。
我知道它是否正常工作,因为条带在闪烁过程中被点亮。因此,当它再次关闭时,它可以工作。如果没有,它没有
【参考方案1】:
我可能会发现问题。似乎 SoftwareSerial 和 Neopixel 库都在使用这两种中断,这会破坏 Neo 像素通信。
在这里找到:https://forum.arduino.cc/t/arduino-nano-softwareserial-adafruit_neopixel-problem/540057/2
【讨论】:
以上是关于ATtiny85 + Adafruit_NeoPixel 不适用于数组的主要内容,如果未能解决你的问题,请参考以下文章