我想要创建一个使用Adafruit_NeoPixel库的LED动画。不幸的是,我正为一件可能是垃圾桶的事而挣扎。由于某些原因,当使用某个数组访问if (led_states[pixel] > 0) {时,该条不再工作。这意味着即使是安装程序中的strip.clean() + strip.show()也不再工作了。请你告诉我我做错了什么,因为我真的不明白。PS:如果这有帮助的话,我使用的是ATTiny85和arduino框架。
#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();
}
}发布于 2021-12-21 23:00:28
我可能会发现这个问题。似乎SoftwareSerial和Neopixel库都使用了这两种中断,从而破坏了近地天体像素的通信。
在此发现:新阿片-问题/540057/2
https://stackoverflow.com/questions/70253171
复制相似问题