- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的房间做一个 ledstip 项目。我正在使用arduino来做到这一点。对于这个项目,我想使用 C++,所以我可以使用 OOP。在我的 ledstrips 工作后,我想创建一个 cluster 类,使用 strip 类来控制 LED 灯条的特定部分。我不能让它工作。编译器没有给出错误,使用函数 Desk.rgb(0,100,0);
后我没有看到任何变化.
这是我的 .h 文件
#include <FastLED.h>
template<class T>
class Cluster {
public:
T Strip;
int first;
int last;
Cluster(T Strip, int first, int last) {
this->Strip = Strip;
this->first = first;
this->last = last;
}
void rgb(int r, int g, int b){
Strip.rgb( r, g, b, first, last);
}
};
template<byte pin, int AmountOfLeds>
class Strip {
public:
CRGB leds[AmountOfLeds];
void setup() {
FastLED.addLeds<WS2812, pin, GRB>(leds, AmountOfLeds);
rgb(0, 0, 0);
}
//hole strip
void rgb(int r, int g, int b) {
for (int i = 0; i <= AmountOfLeds - 1; i++) {
this->leds[i] = CRGB(r, g, b);
}
FastLED.show();
}
//single led
void rgb(int i, int r, int g, int b) {
this->leds[i] = CRGB(r, g, b);
FastLED.show();
}
//range
void rgb(int r, int g, int b, int f, int l) {
for (int i = f; i <= l; i++) {
this->leds[i] = CRGB(r, g, b);
}
FastLED.show();
}
void hsv(int h, int s, int v) {
for (int i = 0; i <= AmountOfLeds; i++) {
this->leds[i] = CHSV(h, s, v);
}
FastLED.show();
}
void hsv(int i, int h, int s, int v) {
this->leds[i] = CHSV(h, s, v);
FastLED.show();
}
void hsv(int h, int s, int v, int f, int l) {
for (int i = f; i <= l; i++) {
this->leds[i] = CHSV(h, s, v);
}
FastLED.show();
}
void hsvWhiteBalance(int S, int V) { //S is yellowness, V is brightness
hsv(15, S, V);
}
void rainbow(float V) {
for (int i = 0; i <= AmountOfLeds; i++) {
leds[i] = CHSV( float(i) * (255 / float(AmountOfLeds)), 255, V);
}
FastLED.show();
}
void rainbow(float p, float V) {
for (int i = 0; i <= AmountOfLeds; i++) {
leds[i] = CHSV( float(i) * (255.0 / float(AmountOfLeds) * p), 255, V);
}
FastLED.show();
}
};
这是我的 .ino 文件:
#include "LedClasses.h"
Strip<5, 190> DTVC;
Cluster<Strip<5, 190>> Desk(DTVC, 1, 42);
void setup() {
Serial.begin(9600);
DTVC.setup();
DTVC.hsvWhiteBalance(153, 50);
Desk.rgb(0,100,0);
//DTVC.rgb(Desk, 0, 100, 0);
}
提前致谢。
最佳答案
不起作用,因为在 Cluster
你采取的构造函数Strip
按拷贝上课。然后,在您的示例中,您有 2 个 Stripe
实例: 一个在全局上下文中,一个在 Cluster
中.你调用 Stripe::setup
(调用 FastLED.addLeds
)在全局上下文中的实例上(在 FastLED 库中注册 Stripe::leds
公共(public)字段的地址),但稍后您调用 rgb
在您的Cluster
中的实例上并且有不同的Stripe::leds
field 。
为了快速修复它(虽然不是很干净),您可以重新设计构造函数以接受引用而不是复制:
class Cluster {
public:
T& strip;
int first;
int last;
Cluster(T& s, int f, int l): strip(s), first(f), last(l) {}
或者,您可以重新设计您的架构,不要过多地使用模板(您可以使用
constexpr
参数代替)。
关于c++ - 如何在 Arduino C++ (FastLED) 的另一个类中使用一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62775120/
我有一个使用带 600 个 ws2812b 灯带的 fastLED 的 arduino。我正在运行以下代码: #include "FastLED.h" #define DATA_PIN 5
我正在研究一个由 Arduino 控制的圣诞树,它有 500 个完全可寻址的 LED。我正在使用 FastLED 库,目前(虽然我将更新一些动画以通过采样音频控制)我正在使用来自 http://pas
我正在为我的房间做一个 ledstip 项目。我正在使用arduino来做到这一点。对于这个项目,我想使用 C++,所以我可以使用 OOP。在我的 ledstrips 工作后,我想创建一个 clust
我遇到问题,我的代码在 w2812b 条上运行正常,但是当我沿着条运行时,出现错误。 这是错误 /home/runner/work/esp32-arduino-lib-builder/esp32-ar
我是一名优秀的程序员,十分优秀!