首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino使用neopixel卡住控制ledstrip

Arduino使用neopixel卡住控制ledstrip
EN

Stack Overflow用户
提问于 2019-07-19 00:32:25
回答 1查看 187关注 0票数 1

我试着用我的pi 3控制一个rgb ws2812b led条带,效果很好。现在我想用我的Arduino Nano来做这件事。控件本身是有效的。如果我将一些代码放入循环函数中,一切都会正常工作。但是如果我想通过一个函数调用代码,比如void colorWipe(){ change color },我在循环中调用colorWipe(),它就不会再改变颜色了。为什么?

代码如下:

代码语言:javascript
复制
#include <Adafruit_NeoPixel.h>
#define shortStrip 2
#define longStrip 3
#define led_count_short 23
#define led_count_long 277

Adafruit_NeoPixel strip_short = Adafruit_NeoPixel(led_count_short, shortStrip, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_long = Adafruit_NeoPixel(led_count_long, longStrip, NEO_GRB + NEO_KHZ800);

void setup(){
  Serial.begin(9600);

  strip_short.begin();
  strip_short.setBrightness(50);
  strip_short.show();
  Serial.println("Short strip is running!");
  delay(50);

  strip_long.begin();
  strip_long.setBrightness(50);
  strip_long.show();
  Serial.println("Long strip is running!");
  delay(50);
}

void loop(){
  colorWipe(10, strip_long, led_count_long, 255, 255, 255);
  Serial.println("Finished Long");
  delay(1000);
  colorWipe(10, strip_long, led_count_long, 255, 0, 0);
  Serial.println("This too Long");
  delay(1000);
}

void colorWipe(uint8_t wait, Adafruit_NeoPixel strip, int led_count, int r, int g, int b){
 Serial.print("1");
 for(int i = 0; i < led_count; i++){
  strip.setPixelColor(i, strip.Color(r,g,b));
  strip.show();
  delay(wait);
 } 
 Serial.print("2");
 return;
}

是的,我确实有2个led条带,但在循环中只调用了1个。我的串行监视器可以完美地打印所有内容,但颜色就是不变。我试过多种颜色。第一个colorWipe()起作用,之后的所有颜色擦除都不起作用。

请帮帮忙

非常感谢

EN

回答 1

Stack Overflow用户

发布于 2019-07-19 20:47:32

你试过使用引用吗?将colorWipe更改为

代码语言:javascript
复制
void colorWipe(uint8_t wait, Adafruit_NeoPixel & strip, int led_count, int r, int g, int b)

我的猜测是,当您正在制作strip对象的副本时,访问setPixelColorshow将不再可能。您应该使用在代码开头声明的对象,这可以使用引用来完成。

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

https://stackoverflow.com/questions/57099084

复制
相关文章

相似问题

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