Error: 1value required as left operand of assignment exit status 1

I'm having some trouble with this code, and I can't quite figure out what the problem is. I've tried only writing one single q==//a number , then I tried it with two, so q===//a number||q==//a number , but that didnt work either.
Here's my code:

int i;
int melodieRefrain[] = {233,233,233,233,294,294,294,294,262,262,262,262,349,349,349,349,392,392,392,392,392,392,392,392,392,392,392,392,262,233,220,175};
int notenWertRefrain[] = {8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8};
int tonDauer;
int pauseZwischenNoten;
int melodie[] = {196,196,294,262,233,220,220,220,262,233,220,196,196,493,440,493,440,493,196,196,493,440,493,440,493,196,196,294,262,247,220,220,220,262,233,220,196,196,493,440,493,440,493,196,196,493,440,493,440,493,196,196,294,262,247,220,220,220,262,233,220,196,196,293,440,493,440,493,196,196,493,440,493,440,493};
int notenWert[] = {4,8,8,4,4,4,8,8,4,8,8,4,8,8,8,8,8,8,4,8,8,8,8,8,8,4,8,8,4,4,4,8,8,4,8,8,4,8,8,8,8,8,8,4,8,8,8,8,8,8,4,8,8,4,4,4,8,8,4,8,8,4,8,8,8,8,8,8,4,8,8,8,8,8,8};
int melodieAmAnfang[] = {196,196,196,196,196,196,196,196,196,196,196,196,196,233,233,233,233,233,233,233,233,233,233,233,233,233};
int notenWertAmAnfang[] = {8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,};
void setup()
{
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
pinMode(1, OUTPUT);
pinMode(0, OUTPUT);
for (int i = 0; i < 26; i = i + 1) {
if(i<12){
digitalWrite(5, HIGH);
delay(125);
digitalWrite(5, LOW);
} else {
digitalWrite(4, HIGH);
delay(125);
digitalWrite(4, LOW);
}
tone(13, melodieAmAnfang[i]);
tonDauer = 1000 / notenWertAmAnfang[i];
delay(tonDauer);
noTone(13);
pauseZwischenNoten = tonDauer * 0.33;
delay(pauseZwischenNoten);
}
}

void loop(){
refrain();
for (int q = 0; q < 75; q = q + 1){
tonDauer = 1240 / notenWert[q];

//THIS IS THE PART THAT DOESN'T WORK

//if(q==0||q==3||q==8||q==14||q==15||q==20||q==24||q==27||q==30||q==36||q==37||q==41||q==42||q==45||q==50||q==54||q==56||q==59||q=64||q==67||q==70||q==73)  { 

//digitalWrite(3, HIGH);
//delay(tonDauer);
//digitalWrite(3, LOW);
// }
tone(13, melodie[q]);
delay(tonDauer);
noTone(13);
pauseZwischenNoten = tonDauer * 0.33;
delay(pauseZwischenNoten);
}
}

void refrain(){
for (int o = 0; o < 32; o = o + 1) {
tone(13, melodieRefrain[o]);
tonDauer = 1240 / notenWertRefrain[o];
delay(tonDauer);
noTone(13);
pauseZwischenNoten = tonDauer * 0.33;
delay(pauseZwischenNoten);
}
}

Any help would be greatly aprreciated thank you :v:

It's not "1value" it's "lvalue" (lowercase L)

Please remember to use code tags when posting code. And cut and paste the actual error message, don't post what you think it says.

Oops ...

You should post code by using code-tags
There is an automatic function for doing this in the Arduino-IDE
just three steps

  1. press Ctrl-T for autoformatting your code
  2. do a rightclick with the mouse and choose "copy for forum"
  3. paste clipboard into write-window of a posting

best regards Stefan

thanks, i'll remember that for next time

ah, there it is! thank you so much!

Looks like you fixed it. Compiles without error for me:

int i;
int melodieRefrain[] = {233, 233, 233, 233, 294, 294, 294, 294, 262, 262, 262, 262, 349, 349, 349, 349, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 262, 233, 220, 175};
int notenWertRefrain[] = {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8};
int tonDauer;
int pauseZwischenNoten;
int melodie[] = {196, 196, 294, 262, 233, 220, 220, 220, 262, 233, 220, 196, 196, 493, 440, 493, 440, 493, 196, 196, 493, 440, 493, 440, 493, 196, 196, 294, 262, 247, 220, 220, 220, 262, 233, 220, 196, 196, 493, 440, 493, 440, 493, 196, 196, 493, 440, 493, 440, 493, 196, 196, 294, 262, 247, 220, 220, 220, 262, 233, 220, 196, 196, 293, 440, 493, 440, 493, 196, 196, 493, 440, 493, 440, 493};
int notenWert[] = {4, 8, 8, 4, 4, 4, 8, 8, 4, 8, 8, 4, 8, 8, 8, 8, 8, 8, 4, 8, 8, 8, 8, 8, 8, 4, 8, 8, 4, 4, 4, 8, 8, 4, 8, 8, 4, 8, 8, 8, 8, 8, 8, 4, 8, 8, 8, 8, 8, 8, 4, 8, 8, 4, 4, 4, 8, 8, 4, 8, 8, 4, 8, 8, 8, 8, 8, 8, 4, 8, 8, 8, 8, 8, 8};
int melodieAmAnfang[] = {196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233};
int notenWertAmAnfang[] = {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,};
void setup()
{
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(0, OUTPUT);
  for (int i = 0; i < 26; i = i + 1)
  {
    if (i < 12)
    {
      digitalWrite(5, HIGH);
      delay(125);
      digitalWrite(5, LOW);
    }
    else
    {
      digitalWrite(4, HIGH);
      delay(125);
      digitalWrite(4, LOW);
    }
    tone(13, melodieAmAnfang[i]);
    tonDauer = 1000 / notenWertAmAnfang[i];
    delay(tonDauer);
    noTone(13);
    pauseZwischenNoten = tonDauer * 0.33;
    delay(pauseZwischenNoten);
  }
}

void loop()
{
  refrain();
  for (int q = 0; q < 75; q = q + 1)
  {
    tonDauer = 1240 / notenWert[q];

        if (q == 0 || q == 3 || q == 8 || q == 14 || q == 15 || q == 20 || q == 24 || 
    q == 27 || q == 30 || q == 36 || q == 37 || q == 41 || q == 42 || q == 45 || 
    q == 50 || q == 54 || q == 56 || q == 59 || q == 64 || q == 67 || q == 70 || 
    q == 73)
    {
      digitalWrite(3, HIGH);
      delay(tonDauer);
      digitalWrite(3, LOW);
    }
    tone(13, melodie[q]);
    delay(tonDauer);
    noTone(13);
    pauseZwischenNoten = tonDauer * 0.33;
    delay(pauseZwischenNoten);
  }
}

void refrain()
{
  for (int o = 0; o < 32; o = o + 1)
  {
    tone(13, melodieRefrain[o]);
    tonDauer = 1240 / notenWertRefrain[o];
    delay(tonDauer);
    noTone(13);
    pauseZwischenNoten = tonDauer * 0.33;
    delay(pauseZwischenNoten);
  }
}

That's because the OP commented out the problematic line.

Ah. That does explain it.

I don't see why it would be a problem, unless the q was on the right of the assignment.

Or is it an operator precedence issue?

I'm posting from my phone, so I can't try it.

Assignment has lower precedence than || and ==:

    if (q == 0 || q = 64)

is equivalent to

    if ((q == 0 || q) = 64)

and (q == 0 || q) is an lvalue.
Edit: and (q == 0 || q) is not an lvalue.

I think you meant

(q == 0 || q) is not an lvalue.

1 Like

Of course, my bad.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.