0

我刚刚开始使用 Arduino。我似乎经常写这样的代码:

int input_pins[] = {6, 3, 8, 2};
int input_state[4];

void setup() {                
}

void loop() {
  for (int i = 0; i < 4; i++){
    input_state[i] = digitalRead(input_pins[i]); 
  }
}

是否有预处理器(或类似的东西)来生成以下有效代码?

int input_state[4];

void setup() {                
}

void loop() {
  input_state[0] = digitalRead(6); 
  input_state[1] = digitalRead(3); 
  input_state[2] = digitalRead(8); 
  input_state[3] = digitalRead(2); 
}
4

1 回答 1

0

Arduino 编程底层有 C++,为什么要使用像预处理这样有限的东西?

如果您从以下代码开始:

///////////////////////////////////////
class DigitalRead
{
public:
    DigitalRead(int pins[]);
    int operator[](const int index);
    int len;
    int *mypins;
};


DigitalRead::DigitalRead(int pins[])
{
   mypins = pins;
   for(len = 0; pins[len] != -1; len++) {};
}

int DigitalRead::operator[](const int index)
{
    if (index > len) return -1;
    return digitalRead(mypins[index]);
}
///////////////////////////////////////

int pins[] = {6, 3, 8, 2, -1};

DigitalRead input_state = DigitalRead(pins);

void setup()
{
}

void loop()
{
   // print the state of pin 6, change as needed
   Serial.println(input_state[0]);
}

您可以改进一些事情(在 DigitalRead::DigitalRead 中设置输入引脚,例如)j。一旦工作正常,将///////行之间的内容移到库中。

于 2012-06-21T07:39:20.063 回答