【问题标题】:c++ Passing vector of HIGH & LOW in arduinoc ++在arduino中传递HIGH和LOW的向量
【发布时间】:2018-05-29 08:57:10
【问题描述】:

我有一个 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中的cmets来修复这个错误。

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

【问题讨论】:

  • 为什么你有一个指向数组PinsReadOut的指针?这就是您的警告的来源。
  • @Yksisarvinen 它实际上是指针数组而不是指向数组的指针
  • @bartop 对不起,你当然是对的。
  • 我试过了,但结果是另一个错误。经过google,我发现很多人提到为了在函数之间传递一个向量。我应该使用指针。猜我用错了

标签: c++ arduino


【解决方案1】:

如何让它工作

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

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 开始的。

【讨论】:

  • 我尝试的第一件事,但最终出现了这个错误。警告:从 'int' 到 'int*' [-fpermissive] 的无效转换。
  • @Hojo.Timberwolf 扩展了我的答案。希望现在它可以帮助更多
  • 这工作没有任何错误。谢谢。我现在最大的问题是为什么??
  • @Hojo.Timberwolf 添加了一些解释。希望它有所帮助;)
【解决方案2】:

您的代码存在一些问题:

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

你可能想要:

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

注意;&lt;的使用

这里也一样:

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

你可能想要:

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

注意;&lt;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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多