首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ATTiny85 + Adafruit_NeoPixel不使用数组

ATTiny85 + Adafruit_NeoPixel不使用数组
EN

Stack Overflow用户
提问于 2021-12-06 23:23:41
回答 1查看 78关注 0票数 0

我想要创建一个使用Adafruit_NeoPixel库的LED动画。不幸的是,我正为一件可能是垃圾桶的事而挣扎。由于某些原因,当使用某个数组访问if (led_states[pixel] > 0) {时,该条不再工作。这意味着即使是安装程序中的strip.clean() + strip.show()也不再工作了。请你告诉我我做错了什么,因为我真的不明白。PS:如果这有帮助的话,我使用的是ATTiny85和arduino框架。

代码语言:javascript
复制
#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();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-12-21 23:00:28

我可能会发现这个问题。似乎SoftwareSerial和Neopixel库都使用了这两种中断,从而破坏了近地天体像素的通信。

在此发现:新阿片-问题/540057/2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70253171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档