我目前遇到一个问题,与使用Arduino Uno控制的红外遥控器有关。
我将原始数据信号包含在数组中:
Samsung_power[68] = {4500, 243, .... and so on};
由于事实上,三星遥控器上有相当多的功能,我会发现它比从UART接收命令时容易得多,比如0到20之间的值,然后是将在表中查找数字,并选择适当的原始数据数组。
所以:
FunctionArray[20] = {Samsung_power, Channel_1, Channel_2, Channel_3.. etc};
然而,编译器绝不让我这样做,所以我可以想象这里完全错误:)。所以我希望你们中的一些人有一个想法,如何解决这个特殊的问题:
伪代码:
receive = UART_READ();
sendRawDataToIRLED(FunctionArray[receive]);
答案 0 :(得分:3)
如果您不想声明辅助结构,则至少需要一个数组来存储数据数组的大小,并将此长度传递给该函数。您可以方便地使用sizeof来确保正确计算它们。我在arduino中尝试了以下代码并构建:
#include "Arduino.h"
//bii:#entry_point()
void setup(){
}
void sendRawDataToIRLED(int array[], int len){
//your code here
}
void loop()
{
int Samsung_power[] = {4500, 243, 23};
int Channel_1[] = {450, 23, 233, 44, 55};
int* FunctionArray[2] = {Samsung_power, Channel_1};
int sizeArray[] = {sizeof(Samsung_power)/sizeof(int), sizeof(Channel_1)/sizeof(int)};
int index = 0;//whatever your index
sendRawDataToIRLED(FunctionArray[index], sizeArray[index]);
}
答案 1 :(得分:1)
你不能做一个函数数组,但你可以做一个指向函数的数组。 但是数组中的函数必须具有相同的输入参数。
答案 2 :(得分:0)
定义一个struct
,它的第一个字段是一个数组,它将Samsung_power
保存在结构中的数组中。
答案 3 :(得分:0)
在C中声明数组数组的语法非常简单:
int twodee[OUTER_SIZE][INNER_SIZE];
查找同样简单:
twodee[3]; // This is the 4th INNER_SIZE-element array in the table.
// It's of type int[INNER_SIZE].
如果查找表中的所有数组大小相同,请使用它。如果它们不是,您将需要一种方法指向不同大小的数组与您的表。最好的方法是使用结构:
struct array
{
int len;
int data[];
};
struct array *table[NUMBER_OF_ARRAYS];
这样,您可以使用指向数组的指针填充表,并跟踪指向的数组的大小。要将struct array a
分配给查找表,只需执行以下操作:
table[n] = &a;