Ошибка компиляции кода Arduino: «lvalue требуется как левый операнд присваивания» - PullRequest
0 голосов
/ 25 марта 2012

Я получаю эту ошибку при попытке скомпилировать мой код:

Значение l требуется в качестве левого операнда присваивания.

Код читается в кнопках через аналоговый порт. Вот где ошибка (в void (loop)):

while (count < 5){
    buttonPushed(analogPin) = tmp;

        for (j = 0; j < 5; j++) {
                while (tmp == 0) { tmp = buttonPushed(analogPin); }                 //something wrong with the first half of this line!

        if(sequence[j] == tmp){
                        count ++;
                }

        else { 
            lcd.setCursor(0, 1); lcd.print("Wrong! Next round:");                       delay(1000);
                        goto breakLoops;
                }

        }
}

breakLoops:
elapsedTime = millis() - startTime;

На самом верху у меня есть: int tmp;

Ответы [ 3 ]

2 голосов
/ 25 марта 2012

У вас есть эта строка:

     buttonPushed(analogPin) = tmp;

Вместо этого вы можете захотеть:

     tmp = buttonPushed(analogPin);

С помощью оператора присваивания объект слева от оператора = получает значение справа от оператора =, а не наоборот.

2 голосов
/ 25 марта 2012
buttonPushed(analogPin) = tmp;

Эта строка не работает. buttonPushed является функцией и может читать только из analogPin; Вы не можете присвоить результат функции в C. Я не уверен, что вы пытаетесь сделать, но я думаю, что вы, вероятно, хотели использовать вместо нее другую переменную.

0 голосов
/ 25 марта 2012

Проблема в том, что вы пытаетесь присвоить временное значение / значение. Назначение в C требует lvalue. Я предполагаю, что подпись вашей buttonPushed функции, по сути, следующая

int buttonPushed(int pin);

Здесь функция buttonPushed возвращает копию найденной кнопки, которую не имеет смысла назначать. Чтобы вернуть реальную кнопку против копии, вам нужно использовать указатель.

int* buttonPushed(int pin);

Теперь вы можете сделать свой код назначения следующим

int* pTemp = buttonPushed(analogPin);
*pTemp = tmp;

Здесь присвоение находится в местоположении, которое является lvalue и будет допустимым

...