2017-08-24 127 views
-1

所以我在Processing中编写了一个脚本,它可以将任何给定图像的每个像素的HEX值输出到数组中。我试图让这个FastLED库读取数组和我得到这么多不同的错误。我试着将HEX的字符串改为FF和0x头的字符串。似乎没有任何工作。现在它一直说十六进制值没有在范围内声明。如果我将字符串更改为字符串,我会收到一个函数错误,告诉我他们不是叮咬。我在智慧结束。这是代码。用Arduino在LED矩阵上显示HEX值数组

#include <FastLED.h> 

#include <LEDMatrix.h> 
#include <string.h> 
// Change the next 6 defines to match your matrix type and size 

#define LED_PIN  7 
#define COLOR_ORDER GRB 
#define CHIPSET  WS2811 

#define MATRIX_WIDTH 32 // Set this negative if physical led 0 is opposite to where you want logical 0 
#define MATRIX_HEIGHT 8 // Set this negative if physical led 0 is opposite to where you want logical 0 
#define MATRIX_TYPE VERTICAL_ZIGZAG_MATRIX // See top of LEDMatrix.h for matrix wiring types 


cLEDMatrix<MATRIX_WIDTH, MATRIX_HEIGHT, MATRIX_TYPE> leds; 

char pixs [] = {{FFCE2131}, 
{FFCE1929}, 
{FFCE1929}, 
{FFCE1929}, 
{FFCE1929}, 
{FFCE1929}, 
{FFCE1929}, 
{FFCE2131}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFCE1929}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFCE1929}, 
{FFCE1929}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFCE1929}, 
{FFCE1929}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFCE1929}, 
{FFCE1929}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFC50821}, 
{FFCE1929}, 
{FFCE1929}}; 



void setup() 
{ 
    FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds[0], leds.Size()); 
    FastLED.setBrightness(15); 
    FastLED.clear(true); 
    delay(500); 
    FastLED.clear(true); 
    Serial.begin(9600); 

} 

void loop() { 



leds(0,0) = 0xCE2131; 
leds(31,0) = CRGB::White; 
leds(0,7) = CRGB::Green; 
leds(31,7) = CRGB::Yellow; 
FastLED.show(); 
delay(2000); 
FastLED.clear(true); 
delay(1000); 

int i; 
for (i = 0; i < length.pixs ; i ++){ 
    leds(0,0) = pixs[i]; 
    FastLED.show(); 
} 

} 
+2

欢迎来到Stack Overflow。请尽快阅读[关于]和[问]页面。通过用C和C++标签标记您的问题,您正在进入微妙的领域。选择你想要使用的语言,并坚持使用该标签 - C或C++,但不能同时使用。适用于一种语言的答案通常不适用于另一种语言。 –

+2

删除C语言标签。 C语言不支持模板,例如'cLEDMatrix leds;'。尝试使用C语言编译器进行编译,该语句应该会产生一些错误。同样使用范围解析运算符'::'。 –

+1

请注意,行char'[] = {{FFCE2131},'显示多个问题。您有一个一维数组,但双花括号只能用于更复杂的结构(二维数组或实际的C结构)。值“FFCE2131”是一个不是十六进制数字的标识符。你需要'0xFFCE2131'来使它成为十六进制。通常不能将4个字节的数据放入单个字节对象中。 –

回答

0

进化花了约40亿年,这是一个很好的迹象表明,随机突变编程不是一个好主意。我没有arduino,而且我没有硬件设置来测试代码,并且您的描述不足以准确猜测您将要执行的操作。这就是说:

你有什么期望

length.pixs 

可能意味着或做? C++习惯用法建议使用std :: array我想,这将使您能够优雅地获取条目数。因为你坚持C数组,长度将通过

sizeof(pixs)/sizeof(*pixs) 

来计算阵列结构是有缺陷的,在您的代码访问阵列是一维和你的类型也表示1维的。所以它应该是

unsigned long pixs [] = {0xCE2131, 0xCE1929, 0xCE1929} 

而不是你的双支撑列表。 Hex文字通过使用0x给出,没有别的。 0xCE1929而不是FFCE1929它没有任何意义(尽管它是您的代码中没有意义的标识符)

以下版本的代码至少在语法上是正确的,应为您的进一步探索提供基础。

#include <LEDMatrix.h> 
#include <string.h> 

#define MATRIX_WIDTH 32 // Set this negative if physical led 0 is opposite to where you want logical 0 
#define MATRIX_HEIGHT 8 // Set this negative if physical led 0 is opposite to where you want logical 0 
#define MATRIX_TYPE VERTICAL_ZIGZAG_MATRIX // See top of LEDMatrix.h for matrix wiring types 


cLEDMatrix<MATRIX_WIDTH, MATRIX_HEIGHT, MATRIX_TYPE> leds; 

unsigned long pixs [] = {0xCE2131, 
    0xCE1929,0xCE1929,0xCE1929,0xCE1929, 
    0xCE1929,0xCE1929,0xCE2131,0xC50821, 
    0xC50821,0xC50821,0xC50821,0xC50821, 
    0xC50821,0xC50821,0xC50821,0xCE1929, 
    0xC50821,0xC50821,0xC50821,0xC50821, 
    0xC50821,0xC50821,0xCE1929,0xCE1929, 
    0xC50821,0xC50821,0xC50821,0xC50821, 
    0xC50821,0xC50821,0xCE1929,0xCE1929, 
    0xC50821,0xC50821,0xC50821,0xC50821, 
    0xC50821,0xC50821,0xCE1929,0xCE1929, 
    0xC50821,0xC50821,0xC50821,0xC50821, 
    0xC50821,0xC50821,0xCE1929,0xCE1929}; 



void setup() 
{ 
    FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds[0], leds.Size()); 
    FastLED.setBrightness(15); 
    FastLED.clear(true); 
    delay(500); 
    FastLED.clear(true); 
    Serial.begin(9600); 
} 

void loop() { 
    leds(0,0) = 0xCE2131; 
    leds(31,0) = CRGB::White; 
    leds(0,7) = CRGB::Green; 
    leds(31,7) = CRGB::Yellow; 
    FastLED.show(); 
    delay(2000); 
    FastLED.clear(true); 
    delay(1000); 

    for (int i = 0; i < sizeof(pixs)/sizeof(*pixs) ; i ++){ 
     leds(0,0) = pixs[i]; 
     FastLED.show(); 
    } 

}