Arduino代码编译错误:“左值作为赋值的左操作数”

时间:2012-03-25 14:38:12

标签: c loops while-loop arduino

当我尝试编译代码时出现此错误:

  

左值作为赋值的左操作数。

代码通过模拟端口读取按钮。这是错误的地方(在void(循环)中):

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 个答案:

答案 0 :(得分:2)

buttonPushed(analogPin) = tmp;

此行不起作用。 buttonPushed是一个功能,只能从analogPin读取;你不能在C中分配一个函数的结果。我不确定你要做什么,但我认为你可能想要使用另一个变量。

答案 1 :(得分:2)

你有这一行:

     buttonPushed(analogPin) = tmp;

您可能需要:

     tmp = buttonPushed(analogPin);

使用赋值运算符,=运算符左侧的对象获取=运算符右侧的值,而不是相反的值。

答案 2 :(得分:0)

这里的问题是你试图分配一个临时/右值。 C中的赋值需要左值。我猜你的buttonPushed函数的签名基本上是以下

int buttonPushed(int pin);

这里buttonPushed函数返回找到的按钮的副本,该按钮没有意义分配给。为了返回实际按钮与副本,您需要使用指针。

int* buttonPushed(int pin);

现在,您可以将作业代码设为以下内容

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

这里的任务分配到一个左值的位置,并且是合法的