我正在做一些电子设备:我有一个圆形的12个RGB LED(我称之为脚跟轮)。我将按照预定义的“水平”“脉冲”每种LED颜色:见下文,LEVEL02例如意味着LED的颜色将每10个周期脉冲两次...代码将循环通过所有12个LED一次一个。 1周期= 12个LED ... 10周期=一个色阶环
基本上我要做的就是说pixel[1] = colour1
或pixel[5] = colour9
等......其中pixel
是我的数组heelwheel
,colour
是一组常量char
数组clRED
,clRRG
等......好的,更详细:
// 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的初学者,所以我很快就会到达头痛领域。
答案 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
。