用数组填充数组?

时间:2014-11-27 10:58:53

标签: c gcc raspberry-pi

我正在做一些电子设备:我有一个圆形的12个RGB LED(我称之为脚跟轮)。我将按照预定义的“水平”“脉冲”每种LED颜色:见下文,LEVEL02例如意味着LED的颜色将每10个周期脉冲两次...代码将循环通过所有12个LED一次一个。 1周期= 12个LED ... 10周期=一个色阶环

基本上我要做的就是说pixel[1] = colour1pixel[5] = colour9等......其中pixel是我的数组heelwheelcolour是一组常量char数组clREDclRRG等......好的,更详细:

// Color Level Definitions

#define LEVEL00 "0000000000" 
#define LEVEL01 "1000000000" 
#define LEVEL02 "1000010000"

等......直到LEVEL10

char heelwheel[12][3]; //wheel pixel: LED, Colour (Red, Green, Blue)

// Colour Definitions: defining mix of colour levels for 12 standard colours 
//(12 coincidentally == the number of LEDs: no particular reason)

const char *clRED[3] = {LEVEL10, LEVEL00, LEVEL00} ; // full red
const char *clRRB[3] = {LEVEL06, LEVEL00, LEVEL04} ; // mostly red, bit of blue
const char *clRAB[3] = {LEVEL05, LEVEL00, LEVEL05} ; // purple

等...适用于12种颜色

所以我想要做的是通过指定12种颜色中的1种来设置每个12“像素”......例如。

heelwheel[0] = clRED ;
heelwheel[1] = clRRB ;

我希望很清楚我正在尝试做什么...我的理论是我将heelwheel定义为二维数组:而不是在第二维中单独设置三个值,我想要只是说these three values = the three values contained in the three-value colour arrays

gcc error = "incompatible types when assigning to type char *[3] from type const char **"... 

我试图理解C中阵列上的众多资源,有些东西是“坚持”,但我是C的初学者,所以我很快就会到达头痛领域。

2 个答案:

答案 0 :(得分:0)

不要为此使用类似字符串的数据类型,因为字符串在C中表示为数组,而数组不可分配。

将颜色编码为整数,对于完整的24位RGB,典型选择为uint32_t,备用8位。

然后你就是:

uint32_t heelwheel[12];

颜色定义如下:

/* these assume red in the msbs, blue in the lsbs. */
const uint32_t red = 0xff0000;
const uint32_t purple = 0xff00ff;
const uint32_t yellow = 0xffff00;
/* and so on */

你可以直接分配,没有问题:

heelwheel[0] = red;
heelwheel[1] = purple;

答案 1 :(得分:0)

  

数组不能包含数组?

一个数组可以包含一个数组(事实上,当你定义char heelwheel[12][3]时,你得到一个包含12个3个字符数组的数组),它不可能通过一个数组分配一个数组larray = rarray,因为C标准在 Lvalues,数组和函数指示符部分中说明了:

  

除非它是sizeof运算符的操作数,_Alignof   运算符,或一元&运算符,或者是用于的字符串文字   初始化一个数组,一个类型为'' type ''数组的表达式   转换为类型为''指向 type '指针的表达式   到数组对象的初始元素,而不是左值。

但是你可以通过定义

来实现你想要的
const char **heelwheel[12]; //wheel pixel: LED, Colour (Red, Green, Blue)

与你的const char *clRED[3]等兼容,因为clRED等类型''指向const char'的指针数组''被转换为类型''指向const char'的指针''反过来可以通过像

这样的表达式来分配
heelwheel[0] = clRED;
heelwheel[1] = clRRB;

完成这些任务后e。 G。 heelwheel[1][2]LEVEL04