c ++传递HIGH&的向量在arduino低

时间:2018-05-29 08:57:11

标签: c++ arduino

我有一个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]

2 个答案:

答案 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]);
}

请注意;使用<iiPinsReadOut

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

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

应该是:

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

因此调用ReadPins应该是:

ReadPins(PinsReadOut);