我有一个arduino,通过6个独立的输入引脚监听HIGH和LOW的特定组合。我打算将引脚分开,因为我会根据其他功能定期调用引脚。下面的代码概述了我到目前为止设置的内容
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 form中的评论来修复此错误。
warning: invalid conversion from 'int' to 'int*' [-fpermissive]
答案 0 :(得分:2)
我建议您使用整数数组而不是整数指针数组。这是警告的来源。所以改变这个:
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开始的。
答案 1 :(得分:2)
您的代码存在一些问题:
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);