i have trouble, after if condition is true but not back to void loop() ??

Hello to everyone,

I'm a newbie on Arduino.

Now the problem that I face is as follows.

I have to go back to voidloop () in the if statement when it works

Now my question is how to return to voidloop () when the if statement is successful.

below is the code and project series:

int pr1 = 10;
int pr2 = 11;
int pr3 = 12;
int pr4 = 13;

int lsb1 = 6;
int lsb2 = 7;

int lsd1 = 8;
int lsd2 = 9;

int m1 = 2;
int m2 = 3;
int m3 = 4;
int m4 = 5;



void setup() {
  
Serial.begin(9600);
// Pin Remote
pinMode(pr1, INPUT); //remote rf ch 1 pin 10
pinMode(pr2, INPUT); //remote rf ch 2 pin 11
//pinMode(pr3, INPUT);
//pinMode(pr4, INPUT);




//Pin led 1

pinMode(m1, OUTPUT); //led 1 kanan arah jam

pinMode(m2, OUTPUT); //led 2 kanan lawan jam

pinMode(m3, OUTPUT); //led 3 kiri arah jam

pinMode(m4, OUTPUT); //led 4 kiri lawan jam


//pin limit swicth belakang
pinMode(lsb1, INPUT); //limit switch belakang kanan

pinMode(lsb2, INPUT); // //limit switch belakang kiri

//Pin Limit Switch depan
pinMode(lsd1, INPUT); ////limit switch depan kanan

pinMode(lsd2, INPUT); // //limit switch depan kiri
}

 

   int limitb1 = 0;
   int limitb2 = 0;
   int limitd1 = 0;
   int limitd2 = 0;

   int remot1 = 0;
   int remot2 = 0;
   int remot3 = 0;
   int remot4 = 0;





void loop() {
  // put your main code here, to run repeatedly:

    static uint8_t off = LOW;

    uint8_t limitb1 = digitalRead(lsb1);
    uint8_t limitb2 = digitalRead(lsb2);
    uint8_t limitd1 = digitalRead(lsd1);
    uint8_t limitd2 = digitalRead(lsd2);
     
    uint8_t remot1 = digitalRead(pr1);
    uint8_t remot2 = digitalRead(pr2);
    uint8_t remot3 = digitalRead(pr3);
    uint8_t remot4 = digitalRead(pr4);
    

   if (remot1 != off ) {
         remot1 = digitalRead(pr1);
       
        if (limitb1 == LOW and limitb2 == LOW) {
          limitb1 = digitalRead(lsb1);
          limitb2 = digitalRead(lsb2);
          digitalWrite(m1, HIGH);    
          digitalWrite(m2, LOW);
          
          digitalWrite(m3, HIGH);    
          digitalWrite(m4, LOW);
          delay(10);
         }
          
          if (limitb1 != LOW)    { 
                limitb1 = digitalRead(lsb1);
                digitalWrite(m1, LOW);     
                delay(10);
                 
          }
          
          if (limitb2 != LOW)    { 
                limitb2 = digitalRead(lsb2);
                   
                digitalWrite(m3, LOW);    
                delay(10);
                 
          }
           
           if (limitb1 != LOW and limitb2 != LOW)    { 
                loop();
                 
          }

  }
  
 else if (remot2 != off ) {
     
        remot2 = digitalRead(pr2);  
           
        if (limitd1 == LOW and limitd2 == LOW) {
          limitd1 = digitalRead(lsd1);   
          limitd2 = digitalRead(lsd2);
          digitalWrite(m1, LOW);    
          digitalWrite(m2, HIGH);
          
          digitalWrite(m3, LOW);    
          digitalWrite(m4, HIGH);
          delay(10);
         }
          
          if (limitd1 != LOW)    { 
                limitd1 = digitalRead(lsd1);   
                   
                digitalWrite(m2, LOW);     
                delay(10);
                
                   
          }
          
          if (limitd2 != LOW)    { 
                limitd2 = digitalRead(lsd2);   
                   
                digitalWrite(m4, LOW);     
                delay(10);
                
          }
          
          if (limitd1 != LOW and limitd2 != LOW)    { 
                loop(); 
                 
          }        
  }
  
  else {
                digitalWrite(m1, LOW);    
                digitalWrite(m2, LOW); 
                digitalWrite(m3, LOW);    
                digitalWrite(m4, LOW); 
               delay(500);
   }
 
}

thanks

You must be careful when using recursion (calling a function from within itself); you will run out of memory if you're not careful.

The answer to the question

if(somecondition == TRUE)
{
  // do stuff
  ...
  ...

  // return to calling function
  return;
}

If you enter this if( ) the only path after is to return to the top of loop.
If you don't enter this if( ) the only path after is to return to the top of loop.
The whole thing is unnecessary.

          if (limitd1 != LOW and limitd2 != LOW)    { 
                loop(); 
                 
          }

You declare these again in loop( ) and more appropriately. You don't need to do this here.

   int limitb1 = 0;
   int limitb2 = 0;
   int limitd1 = 0;
   int limitd2 = 0;

   int remot1 = 0;
   int remot2 = 0;
   int remot3 = 0;
   int remot4 = 0;