【问题标题】:ATTiny85 + Adafruit_NeoPixel not working with arrayATtiny85 + Adafruit_NeoPixel 不适用于数组
【发布时间】: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] &gt; 0) { // ..to 只是... SWSERIAL.printf("V: %i\n", led_values[pixel]); ...看看是否可行。 (我的猜测是不会)
  • 注释掉 if (led_state[pixel] &gt; 0) { 但保留 printf 有效。条带仍然可以控制。一旦我再次取消注释 if ,就无法再控制条带了。不知道这有什么关系 o.O 为什么你会期望那时不起作用?奇怪的是也没有异常,代码仍然按预期运行并记录,但只是条带函数不起作用。
  • led_values 中的值始终为 0,因此 LED 始终处于关闭状态。我不确定您是否认为 LED 灯条在工作。
  • 我知道它是否正常工作,因为条带在闪烁过程中被点亮。因此,当它再次关闭时,它可以工作。如果没有,它没有

标签: c++ arduino attiny neopixel


【解决方案1】:

我可能会发现问题。似乎 SoftwareSerial 和 Neopixel 库都在使用这两种中断,这会破坏 Neo 像素通信。

在这里找到:https://forum.arduino.cc/t/arduino-nano-softwareserial-adafruit_neopixel-problem/540057/2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-03
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    相关资源
    最近更新 更多