-1

我目前遇到一个问题,与使用 Arduino Uno 控制的 IR 遥控器有关。

我将原始数据信号包含在数组中:

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]);
4

4 回答 4

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]);
}
于 2014-02-03T16:46:31.810 回答
1

你不能做一个函数数组,但是你可以做一个 POINTER TO FUNCTION 数组。但数组中的函数必须具有相同的输入参数。

请参阅如何使用函数指针数组?

于 2014-02-03T16:04:19.767 回答
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];

这样,您可以用指向数组的指针填充表并跟踪指向的数组的大小。要将 a 分配struct array a给查找表,只需执行以下操作:

table[n] = &a;
于 2014-02-03T16:11:46.407 回答
0

定义一个struct具有作为其第一个字段的数组,该数组将Samsung_power在结构中的数组中保存您的数组。

于 2014-02-03T16:00:43.530 回答