c ++ Передача вектора HIGH & LOW в Arduino - PullRequest
0 голосов
/ 29 мая 2018

У меня есть 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 , чтобы исправить эту ошибку.

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

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

У вас есть несколько проблем с вашим кодом:

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);
0 голосов
/ 29 мая 2018

Как заставить это работать

Я предлагаю Вам использовать массив целых вместо массивов указателей на целые.Это источник предупреждения.Так что измените это:

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

На это:

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

Также вы неправильно передаете массив здесь:

ReadPins(PinsReadOut[6]);

Вы должны изменить егоto:

ReadPins(PinsReadOut);

Почему это не сработало

Ну, во-первых - как говорилось в предупреждении - Вы пытались сравнить int * с int, что недопустимобез -fpermissive опции компилятора.Поэтому вместо сохранения указателей в массиве я предложил сохранить значения int.

Во-вторых, вместо передачи массива в функцию, принимающую массив, вы пытались передать определенное значение из этого массива, значение в позиции 7. Потому чтов контексте вызова функции array[6] означает - значение в позиции 7 массива (которое выходит за границы массива и вызывает неопределенное поведение), поскольку массивы в C (++) основаны на 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...