For loop problems

Hello there. I'm working on an arduino nano project, however I am completely new to arduino programing and have a problem.

I am trying to use a for loop the following way:

for (LValue = 0; LValue < 16; LValue++){}

For what I understand, it should be increasing LValue by 1 and running the code inside it until LValue reaches 15 and then the loop should end. But with my code inside it doesn't. If I add Serial.println(LValue); to the loop, LValue is 0, then 2 and remains 2 forever. Nothing inside the loop has anything to do with LValue. Please tell me what I'm missing because it's driving me crazy.

Thank you in advance.

P. S. here's the entire code if that helps:


void setup() {

// put your setup code here, to run once:

#define US_0 2

#define US_1 3

#define US_2 4

#define US_3 5

#define LS_0 12

#define LS_1 11

#define LS_2 10

#define LS_3 9

#define EN_1 8

#define EN_2 7

#define EN_3 6

#define SIG_1 A1

#define SIG_2 A2

#define SIG_3 A3

#define BTN A0

pinMode(US_0, OUTPUT);

pinMode(US_1, OUTPUT);

pinMode(US_2, OUTPUT);

pinMode(US_3, OUTPUT);

pinMode(LS_0, OUTPUT);

pinMode(LS_1, OUTPUT);

pinMode(LS_2, OUTPUT);

pinMode(LS_3, OUTPUT);

pinMode(EN_1, OUTPUT);

pinMode(EN_2, OUTPUT);

pinMode(EN_3, OUTPUT);

Serial.begin(9600);

Serial.println("Start");

}

void loop() {

// put your main code here, to run repeatedly:

int UValue = 0;

int LValue;

if (analogRead(BTN) > 1000){

Serial.println("btn");

int Delay = 50;

int RNumber;

digitalWrite(EN_1, HIGH);

digitalWrite(EN_2, HIGH);

digitalWrite(EN_3, HIGH);

delay(Delay);

int LNumber = 1 ; //Number of left pin

RNumber = 1 ; //Number of right pin

//----------

for (UValue = 0; UValue < 16; ++UValue){

Serial.println("uv");

if (UValue = 1){

digitalWrite(US_0, LOW);

digitalWrite(US_1, LOW);

digitalWrite(US_2, LOW);

digitalWrite(US_3, LOW);

Serial.println("uv1");

}

else if (UValue = 2){

digitalWrite(US_0, HIGH);

digitalWrite(US_1, LOW);

digitalWrite(US_2, LOW);

digitalWrite(US_3, LOW);

Serial.println("uv2");

}

else if (UValue = 3){

digitalWrite(US_0, LOW);

digitalWrite(US_1, HIGH);

digitalWrite(US_2, LOW);

digitalWrite(US_3, LOW);

Serial.println("uv3");

}

else if (UValue = 4){

digitalWrite(US_0, HIGH);

digitalWrite(US_1, HIGH);

digitalWrite(US_2, LOW);

digitalWrite(US_3, LOW);

}

else if (UValue = 5){

digitalWrite(US_0, LOW);

digitalWrite(US_1, LOW);

digitalWrite(US_2, HIGH);

digitalWrite(US_3, LOW);

}

else if (UValue = 6){

digitalWrite(US_0, HIGH);

digitalWrite(US_1, LOW);

digitalWrite(US_2, HIGH);

digitalWrite(US_3, LOW);

}

else if (UValue = 7){

digitalWrite(US_0, LOW);

digitalWrite(US_1, HIGH);

digitalWrite(US_2, HIGH);

digitalWrite(US_3, LOW);

}

else if (UValue = 8){

digitalWrite(US_0, HIGH);

digitalWrite(US_1, HIGH);

digitalWrite(US_2, HIGH);

digitalWrite(US_3, LOW);

}

else if (UValue = 9){

digitalWrite(US_0, LOW);

digitalWrite(US_1, LOW);

digitalWrite(US_2, LOW);

digitalWrite(US_3, HIGH);

}

else if (UValue = 10){

digitalWrite(US_0, HIGH);

digitalWrite(US_1, LOW);

digitalWrite(US_2, LOW);

digitalWrite(US_3, HIGH);

}

else if (UValue = 11){

digitalWrite(US_0, LOW);

digitalWrite(US_1, HIGH);

digitalWrite(US_2, LOW);

digitalWrite(US_3, HIGH);

}

else if (UValue = 12){

digitalWrite(US_0, HIGH);

digitalWrite(US_1, HIGH);

digitalWrite(US_2, LOW);

digitalWrite(US_3, HIGH);

}

else if (UValue = 13){

digitalWrite(US_0, LOW);

digitalWrite(US_1, LOW);

digitalWrite(US_2, HIGH);

digitalWrite(US_3, HIGH);

}

else if (UValue = 14){

digitalWrite(US_0, HIGH);

digitalWrite(US_1, LOW);

digitalWrite(US_2, HIGH);

digitalWrite(US_3, HIGH);

}

else if (UValue = 15){

digitalWrite(US_0, LOW);

digitalWrite(US_1, HIGH);

digitalWrite(US_2, HIGH);

digitalWrite(US_3, HIGH);

}

else if (UValue = 16){

digitalWrite(US_0, HIGH);

digitalWrite(US_1, HIGH);

digitalWrite(US_2, HIGH);

digitalWrite(US_3, HIGH);

Serial.println("uv16");

}

RNumber = 1;

for (LValue = 0; LValue < 16; LValue++){     //   HERE  IT  IS !!! 

Serial.println("lv");

Serial.println(LValue);

if (LValue = 1){

digitalWrite(LS_0, LOW);

digitalWrite(LS_1, LOW);

digitalWrite(LS_2, LOW);

digitalWrite(LS_3, LOW);

Serial.println("lv1");

}

else if (LValue = 2){

digitalWrite(LS_0, HIGH);

digitalWrite(LS_1, LOW);

digitalWrite(LS_2, LOW);

digitalWrite(LS_3, LOW);

Serial.println("lv2");

}

else if (LValue = 3){

digitalWrite(LS_0, LOW);

digitalWrite(LS_1, HIGH);

digitalWrite(LS_2, LOW);

digitalWrite(LS_3, LOW);

}

else if (LValue = 4){

digitalWrite(LS_0, HIGH);

digitalWrite(LS_1, HIGH);

digitalWrite(LS_2, LOW);

digitalWrite(LS_3, LOW);

}

else if (LValue = 5){

digitalWrite(LS_0, LOW);

digitalWrite(LS_1, LOW);

digitalWrite(LS_2, HIGH);

digitalWrite(LS_3, LOW);

}

else if (LValue = 6){

digitalWrite(LS_0, HIGH);

digitalWrite(LS_1, LOW);

digitalWrite(LS_2, HIGH);

digitalWrite(LS_3, LOW);

}

else if (LValue = 7){

digitalWrite(LS_0, LOW);

digitalWrite(LS_1, HIGH);

digitalWrite(LS_2, HIGH);

digitalWrite(LS_3, LOW);

}

else if (LValue = 8){

digitalWrite(LS_0, HIGH);

digitalWrite(LS_1, HIGH);

digitalWrite(LS_2, HIGH);

digitalWrite(LS_3, LOW);

}

else if (LValue = 9){

digitalWrite(LS_0, LOW);

digitalWrite(LS_1, LOW);

digitalWrite(LS_2, LOW);

digitalWrite(LS_3, HIGH);

}

else if (LValue = 10){

digitalWrite(LS_0, HIGH);

digitalWrite(LS_1, LOW);

digitalWrite(LS_2, LOW);

digitalWrite(LS_3, HIGH);

}

else if (LValue = 11){

digitalWrite(LS_0, LOW);

digitalWrite(LS_1, HIGH);

digitalWrite(LS_2, LOW);

digitalWrite(LS_3, HIGH);

}

else if (LValue = 12){

digitalWrite(LS_0, HIGH);

digitalWrite(LS_1, HIGH);

digitalWrite(LS_2, LOW);

digitalWrite(LS_3, HIGH);

}

else if (LValue = 13){

digitalWrite(LS_0, LOW);

digitalWrite(LS_1, LOW);

digitalWrite(LS_2, HIGH);

digitalWrite(LS_3, HIGH);

}

else if (LValue = 14){

digitalWrite(LS_0, HIGH);

digitalWrite(LS_1, LOW);

digitalWrite(LS_2, HIGH);

digitalWrite(LS_3, HIGH);

}

else if (LValue = 15){

digitalWrite(LS_0, LOW);

digitalWrite(LS_1, HIGH);

digitalWrite(LS_2, HIGH);

digitalWrite(LS_3, HIGH);

}

else if (LValue = 16){

digitalWrite(LS_0, HIGH);

digitalWrite(LS_1, HIGH);

digitalWrite(LS_2, HIGH);

digitalWrite(LS_3, HIGH);

Serial.println("lv16");

}

delay(Delay);

digitalWrite(EN_1, LOW);

delay(Delay);

if (analogRead(SIG_1) > 5){

Serial.println(LNumber);

Serial.println(RNumber);

Serial.println(analogRead(SIG_1));

Serial.println("---");

}

if (analogRead(SIG_2) > 5){

Serial.println(LNumber + 1);

Serial.println(RNumber);

Serial.println(analogRead(SIG_2));

Serial.println("---");

}

if (analogRead(SIG_3) > 5){

Serial.println(LNumber + 2);

Serial.println(RNumber);

Serial.println(analogRead(SIG_3));

Serial.println("---");

}

++RNumber;

digitalWrite(EN_1, HIGH);

digitalWrite(EN_2, LOW);

delay(Delay);

if (analogRead(SIG_1) > 5){

Serial.println(LNumber);

Serial.println(RNumber);

Serial.println(analogRead(SIG_1));

Serial.println("---");

}

if (analogRead(SIG_2) > 5){

Serial.println(LNumber + 1);

Serial.println(RNumber);

Serial.println(analogRead(SIG_2));

Serial.println("---");

}

if (analogRead(SIG_3) > 5){

Serial.println(LNumber + 2);

Serial.println(RNumber);

Serial.println(analogRead(SIG_3));

Serial.println("---");

}

++RNumber;

digitalWrite(EN_2, HIGH);

digitalWrite(EN_3, LOW);

delay(Delay);

if (analogRead(SIG_1) > 5){

Serial.println(LNumber);

Serial.println(RNumber);

Serial.println(analogRead(SIG_1));

Serial.println("---");

}

if (analogRead(SIG_2) > 5){

Serial.println(LNumber + 1);

Serial.println(RNumber);

Serial.println(analogRead(SIG_2));

Serial.println("---");

}

if (analogRead(SIG_3) > 5){

Serial.println(LNumber + 2);

Serial.println(RNumber);

Serial.println(analogRead(SIG_3));

Serial.println("---");

}

++RNumber;

digitalWrite(EN_3, HIGH);

}

++LNumber;

++LNumber;

++LNumber;

}

Serial.println("End");

delay(10000);

}

}

Pay attention to your use of "=". That is NOT how you write a compare instruction.

1 Like

Thanks for posting the entire sketch. Hopefully you have it properly formatted/indented in your copy -- makes it a lot easier to read.

All the comparisons need to use double-equal ==.

A single equal sign is assignment; the result of that expression is the value assigned. In your case

  • start loop with 0
  • print 0
  • assign 1
  • 1 evaluates to true; skip all the result of the else
  • back to the top; increment to 2
  • print 2
  • assign 1

and repeat

2 Likes

(And every other if you have)

Go and study the difference between = and ==, then you will find your problem.
(Common beginner mistake)

Edit
@kenb4 and @Paul_KD7HB beat me to it.

1 Like

When you fix that I suggest you next study what switch / case does.
Hint: it makes your long if / else / if a lot tidier.

1 Like

Yeah, but now the OP does not have to hunt for the answer. Perhaps it is better because AI would also know the answer.

nothing like the feeling of being stupid I guess, thank you all

had to go afk, sorry for that

IT WORKS!!!
Thank you so much everyone!

2 Likes

You can avoid that feeling by using a little bit of debugging. We all have been there!

1 Like

Yeah, but I feel like that feeling still gets all of us sometimes :slight_smile:

We avoid that feeling by writing a single section of code at a time and then add serial.Print() statements to prove that one new bit of code actually works as intended. Then repeat for the next piece of code.

Here's one of my stupid mistakes, enjoy:

@petr0

Hi

Your code looks like a binary counter of sorts.
Here's a little Wokwi
I'm feeling generous, because I like playing around on Wokwi :grin:
Your code can be crunched to the method you will find over there, just a few lines if you remove the Serial prints

Yep, I'm familiar with current and volage limits XD

You ever had an incandescent light bulb melt open on you?)

Look at the quote on my profile.

To cut down on repetitive code without it getting ti complicated you could make a method to call

void OutputPinsLS(bool value0, bool value1, bool value2, bool value3)
{
  digitalWrite(LS_0, value0);
  digitalWrite(LS_1, value1);
  digitalWrite(LS_2, value2);
  digitalWrite(LS_3, value3);
}

Then you could call it with

else if (LValue = 2){
  OutputPinsLS(HIGH, LOW, LOW, LOW);
}

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