c++ 在 arduino 中传递 HIGH 和 LOW 的向量



我有一个arduino,它通过6个单独的输入引脚监听高电平和低电平的特定组合。我计划将侦听与引脚分开,因为我将根据附加功能定期调用引脚。下面的代码概述了我到目前为止的设置

const int InPins[6] = {3,4,5,6,7,8}; 
int *PinsReadOut[6] = {0,0,0,0,0,0};
CntlLP = -1;
void setup() {
Serial.begin(115200);
for (int ii = 0, ii > 6, ii++) {
pinMode(InPins[ii],INPUT)
}
}
void loop(){
switch(CntlLP)
case -1:
Serial.println("Waiting for Command");
while (Serial.available()==0){}
CntlLP=Serial.parseInt();
break;
case 1:
ReadPins(PinsReadOut[6]);
CntlLP = -1;
break;
case 2:
if (PinsReadOut[0] == 1) && (PinsReadOut[1] == 1) {
Serial.println("Received 1 & 2");
}
if (PinsReadOut[2] == 1) && (PinsReadOut[3] == 1) {
Serial.println("Received 3 & 4");
}
if (PinsReadOut[4] == 1) && (PinsReadOut[5] == 1) {
Serial.println("Received 5 & 6");
}
CntlLP = -1;
break;
}
void ReadPins(int PinsReadOut[6]) {
for (int ii = 0, ii > 6, ii++) {
PinsReadOut[0] = digitalRead(InPins[ii])
}
}

此代码引发以下错误

warning: ISO C++ forbids comparison between pointer and integer [-fpermissive]

我认为也许将 if 语句更改为 == HIGH,但它会导致不同的错误

if (PinsReadOut[0] == HIGH) && (PinsReadOut[1] == HIGH) {
Serial.println("Received 1 & 2");
}

导致此错误

#define HIGH 0x1

编辑:更新问题 我遇到了这个错误。这就是我使用 * 的原因。我尝试按照arduino表单中的注释来修复此错误。

warning: invalid conversion from 'int' to 'int*' [-fpermissive]

如何使其工作

我建议你使用整数数组而不是指向整数的指针数组。这是警告的来源。所以改变这个:

int *PinsReadOut[6] = {0,0,0,0,0,0};

对此:

int PinsReadOut[6] = {0,0,0,0,0,0};

此外,您在此处以错误的方式传递数组:

ReadPins(PinsReadOut[6]);

您应该将其更改为:

ReadPins(PinsReadOut);

为什么它不起作用

首先 - 正如警告告诉您的那样 - 您试图将int *int进行比较,如果没有编译器选项-fpermissive这是不允许的。因此,我建议不要在数组中存储指针,而是存储 int 值。

其次,您尝试从该数组传递一个特定值,即位置 7 的值,而不是将数组传递给函数获取数组。因为在函数调用的上下文中,array[6]意味着数组位置 7 的值(顺便说一下,这超出了数组的范围并导致未定义的行为(,因为 C(++( 中的数组是从 0 开始的。

你的代码有几个问题:

for (int ii = 0, ii > 6, ii++) {
pinMode(InPins[ii],INPUT)
}

您可能想要:

for (int ii = 0; ii < 6; ii++) {
pinMode(InPins[ii],INPUT);
}

注意使用;<

这里也一样:

for (int ii = 0, ii > 6, ii++) {
PinsReadOut[0] = digitalRead(InPins[ii])
}

您可能希望:

for (int ii = 0; ii < 6; ii++) {
PinsReadOut[ii] = digitalRead(InPins[ii]);
}

注意使用;<ii进行PinsReadOut

当然,后者只有在将PinsReadOut声明为ints数组而不是指向ints的指针数组时才有可能,即

int *PinsReadOut[6] = {0,0,0,0,0,0};

应该是:

int PinsReadOut[6] = {0,0,0,0,0,0};

因此,对 ReadPins 的后续调用应该是:

ReadPins(PinsReadOut);

最新更新