Error ultrasonic hc-sr04 and stepper motor 28byj-48 matching problem.

Hello everyone,

I'm building a simple Wall-E obstacle avoiding robot with:

  • 2 stepper motor (28byj-48 5V)
  • 1 ultrasoon sensor (hc-sr04)
  • a solderless breadboard
  • battery
  • arduino UNO

since i am no good in programming, i tried to combine a good working stepper moter code with a good working ultra sonic sensor. the biggest problem is that i dont get the stepper moter to communicate with the senor.

my question is what does the error mean? and how can i maybe make it work?
or are there maybe other code's what could work?

I'll be happy for any help i can get.

Oke thanks for your fast response, sorry for the inconvienend placed code like that.

 //Stepper1
    #define IN11 8
    #define IN12 9
    #define IN13 10
    #define IN14 11

 //Stepper2
    #define IN21 4
    #define IN22 5
    #define IN23 6
    #define IN24 7

    #define leftBumper 2
    #define rightBumper 3


    int trigPin = 12;
    int echoPin = 13;
    long duration, cm, inches;

    int Steps1 = 0;
    int Steps2 = 0;

 //defaults to forward
    boolean Direction1 = false;// gre
    boolean Direction2 = true;// gre
 //dir1=1 dir2=0 goes backwards
 //dir1=1 dir2=1 turns right
 //dir1=0 dir2=0 turns left
 //dir1=0 dir2=1 goes forward

    unsigned long last_time;
    unsigned long currentMillis ;
    int steps_left1=4095; //4095 is a whole rotation
    int steps_left2=4095; //4095 is a whole rotation
    long time;


void setup()

 {
    //Serial.begin(115200);
    pinMode(IN11, OUTPUT);
    pinMode(IN12, OUTPUT);
    pinMode(IN13, OUTPUT);
    pinMode(IN14, OUTPUT);
   
 // delay(1000);

    pinMode(IN21, OUTPUT);
    pinMode(IN22, OUTPUT);
    pinMode(IN23, OUTPUT);
    pinMode(IN24, OUTPUT);

    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);

  }
    
void loop()

{
    while(1>0)
   {
    //check bumpers
    int readLeft = digitalRead(leftBumper);
    int readRight = digitalRead(rightBumper);
    }

 currentMillis = micros();
 if(currentMillis-last_time>=1000)

  {
    //moving forward
    //defaults to moving forward
    Direction1 = false;
    Direction2 = true;
    stepper1(1);
    stepper2(1);
    time=time+micros()-last_time;
    last_time=micros();
   }

    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(4);
    digitalWrite(trigPin, LOW);

    pinMode(echoPin, INPUT);
    duration = pulseIn(echoPin, HIGH);

// converts the time to a distance
    cm = (duration / 2) / 29.1;
    inches = (duration / 2) / 74;
    delay(250);

//Sets object detection distance to 4.5
    if (inches < 4.5) {
    //back up a bit
    steps_left1=1024;
    steps_left2=1024;
    while(steps_left1>0)
{
  //dir1=1 dir2=0 goes backwards
    Direction1 = true;
    Direction2 = false;
    currentMillis = micros();
   
    if(currentMillis-last_time>=1000)
  {
    stepper1(1);                                        //Here was the error
    stepper2(1);
    time=time+micros()-last_time;
    last_time=micros();
    steps_left1--;
    steps_left2--;
   }

 delay(1000);
 //turn right
    steps_left1=1024;
    steps_left2=1024;
 //dir1=1 dir2=1 turns right
    while(steps_left1>0)

{
    Direction1 = true;
    Direction2 = true;
    currentMillis = micros();
    if(currentMillis-last_time>=1000)

  {
    stepper1(1);
    stepper2(1);
    time=time+micros()-last_time;
    last_time=micros();
    steps_left1--;
    steps_left2--;
    }

    delay(1500);

  } //end if statement

}//ends loop

    void stepper1(int xw)

{

    for (int x=0;x<xw;x++)

 {
    switch(Steps1)

   {
    
case 0:
    digitalWrite(IN11, LOW);
    digitalWrite(IN12, LOW);
    digitalWrite(IN13, LOW);
    digitalWrite(IN14, HIGH);
    break;
   
 case 1:
    digitalWrite(IN11, LOW);
    digitalWrite(IN12, LOW);
    digitalWrite(IN13, HIGH);
    digitalWrite(IN14, HIGH);
    break;
   
 case 2:
    digitalWrite(IN11, LOW);
    digitalWrite(IN12, LOW);
    digitalWrite(IN13, HIGH);
    digitalWrite(IN14, LOW);
    break;
    
case 3:
    digitalWrite(IN11, LOW);
    digitalWrite(IN12, HIGH);
    digitalWrite(IN13, HIGH);
    digitalWrite(IN14, LOW);
    break;
    
case 4:
    digitalWrite(IN11, LOW);
    digitalWrite(IN12, HIGH);
    digitalWrite(IN13, LOW);
    digitalWrite(IN14, LOW);
    break;
    
case 5:
    digitalWrite(IN11, HIGH);
    digitalWrite(IN12, HIGH);
    digitalWrite(IN13, LOW);
    digitalWrite(IN14, LOW);
    break;
    
case 6:
    digitalWrite(IN11, HIGH);
    digitalWrite(IN12, LOW);
    digitalWrite(IN13, LOW);
    digitalWrite(IN14, LOW);
    break;
    
case 7:
    digitalWrite(IN11, HIGH);
    digitalWrite(IN12, LOW);
    digitalWrite(IN13, LOW);
    digitalWrite(IN14, HIGH);
    break;
    
default:
    digitalWrite(IN11, LOW);
    digitalWrite(IN12, LOW);
    digitalWrite(IN13, LOW);
    digitalWrite(IN14, LOW);
    break;
   }
    SetDirection1();
  }

}

    void stepper2(int xw)

{

    for (int x=0;x<xw;x++)

 {

    switch(Steps2)
    
  {
    
case 0:
    digitalWrite(IN21, LOW);
    digitalWrite(IN22, LOW);
    digitalWrite(IN23, LOW);
    digitalWrite(IN24, HIGH);
    break;
    
case 1:
    digitalWrite(IN21, LOW);
    digitalWrite(IN22, LOW);
    digitalWrite(IN23, HIGH);
    digitalWrite(IN24, HIGH);
    break;
   
 case 2:
    digitalWrite(IN21, LOW);
    digitalWrite(IN22, LOW);
    digitalWrite(IN23, HIGH);
    digitalWrite(IN24, LOW);
    break;
    
case 3:
    digitalWrite(IN21, LOW);
    digitalWrite(IN22, HIGH);
    digitalWrite(IN23, HIGH);
    digitalWrite(IN24, LOW);
    break;
    
case 4:
    digitalWrite(IN21, LOW);
    digitalWrite(IN22, HIGH);
    digitalWrite(IN23, LOW);
    digitalWrite(IN24, LOW);
    break;
    
case 5:
    digitalWrite(IN21, HIGH);
    digitalWrite(IN22, HIGH);
    digitalWrite(IN23, LOW);
    digitalWrite(IN24, LOW);
    break;
    
case 6:
    digitalWrite(IN21, HIGH);
    digitalWrite(IN22, LOW);
    digitalWrite(IN23, LOW);
    digitalWrite(IN24, LOW);
    break;
    
case 7:
    digitalWrite(IN21, HIGH);
    digitalWrite(IN22, LOW);
    digitalWrite(IN23, LOW);
    digitalWrite(IN24, HIGH);
    break;
    
default:
    digitalWrite(IN21, LOW);
    digitalWrite(IN22, LOW);
    digitalWrite(IN23, LOW);
    digitalWrite(IN24, LOW);
    break;
   }
    SetDirection2();
  }
 
}


    void SetDirection1()

{
    if(Direction1==1){ Steps1++;}

    if(Direction1==0){ Steps1--; }

    if(Steps1>7){Steps1=0;}

    if(Steps1<0){Steps1=7; }
}
    

void SetDirection2()
{
    if(Direction2==1){ Steps2++;}

    if(Direction2==0){ Steps2--; }

    if(Steps2>7){Steps2=0;}

    if(Steps2<0){Steps2=7; }

}

Hope this will do better!

the ERROR:

Arduino: 1.6.7 (Windows 10), Board:"Arduino/Genuino Uno"

C:\Users\name\Documents\Arduino\test_eindskets_1\test_eindskets_1.ino: In function 'void loop()':

test_eindskets_1:74: error: 'stepper1' was not declared in this scope

stepper1(1);

^

test_eindskets_1:75: error: 'stepper2' was not declared in this scope

stepper2(1);

^

test_eindskets_1:105: error: 'stepper1' was not declared in this scope

stepper1(1);

^

test_eindskets_1:106: error: 'stepper2' was not declared in this scope

stepper2(1);

^

test_eindskets_1:122: error: 'stepper1' was not declared in this scope

stepper1(1);

^

test_eindskets_1:123: error: 'stepper2' was not declared in this scope

stepper2(1);

^

test_eindskets_1:136: error: a function-definition is not allowed here before '{' token

void stepper1(int xw){

^

test_eindskets_1:272: error: expected '}' at end of input

}

^

test_eindskets_1:272: error: expected '}' at end of input

exit status 1
'stepper1' was not declared in this scope

the biggest problem is that i dont get the stepper moter to communicate with the senor.

What, exactly, do you expect the stepper motor to tell the senor?

Your code is incorrectly posted. You clearly did not read the two stickies at the top of the forum.

Your code looks like shit. NOTHING follows a {. Everywhere that you do that, you need to fix the code. Put a carriage return after the {.

It would be far easier to see what the code was doing if you put every { on a new line all by itself. At a minimum, itdoesnotbelongjammedupagainsttherestofthecode.

Use Tools + Auto Format before posting your code again.

Even when you fix all the errors, you code won't do anything.

void loop()
{
   while(1>0)
   {
      //check bumpers
      int readLeft = digitalRead(leftBumper);
      int readRight = digitalRead(rightBumper);
   }

But, regardless of the state of the bumpers, you don't exit the while loop, so the code will never do anything but read, and forget, the state of the bumpers.

Oke thanks for your fast response, sorry for the inconvienend placed code like that.

 //Stepper1
    #define IN11 8
    #define IN12 9
    #define IN13 10
    #define IN14 11

 //Stepper2
    #define IN21 4
    #define IN22 5
    #define IN23 6
    #define IN24 7

    #define leftBumper 2
    #define rightBumper 3


    int trigPin = 12;
    int echoPin = 13;
    long duration, cm, inches;

    int Steps1 = 0;
    int Steps2 = 0;

 //defaults to forward
    boolean Direction1 = false;// gre
    boolean Direction2 = true;// gre
 //dir1=1 dir2=0 goes backwards
 //dir1=1 dir2=1 turns right
 //dir1=0 dir2=0 turns left
 //dir1=0 dir2=1 goes forward

    unsigned long last_time;
    unsigned long currentMillis ;
    int steps_left1=4095; //4095 is a whole rotation
    int steps_left2=4095; //4095 is a whole rotation
    long time;


void setup()

 {
    //Serial.begin(115200);
    pinMode(IN11, OUTPUT);
    pinMode(IN12, OUTPUT);
    pinMode(IN13, OUTPUT);
    pinMode(IN14, OUTPUT);
   
 // delay(1000);

    pinMode(IN21, OUTPUT);
    pinMode(IN22, OUTPUT);
    pinMode(IN23, OUTPUT);
    pinMode(IN24, OUTPUT);

    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);

  }
    
void loop()

{
    while(1>0)
   {
    //check bumpers
    int readLeft = digitalRead(leftBumper);
    int readRight = digitalRead(rightBumper);
    }

 currentMillis = micros();
 if(currentMillis-last_time>=1000)

  {
    //moving forward
    //defaults to moving forward
    Direction1 = false;
    Direction2 = true;
    stepper1(1);
    stepper2(1);
    time=time+micros()-last_time;
    last_time=micros();
   }

    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(4);
    digitalWrite(trigPin, LOW);

    pinMode(echoPin, INPUT);
    duration = pulseIn(echoPin, HIGH);

// converts the time to a distance
    cm = (duration / 2) / 29.1;
    inches = (duration / 2) / 74;
    delay(250);

//Sets object detection distance to 4.5
    if (inches < 4.5) {
    //back up a bit
    steps_left1=1024;
    steps_left2=1024;
    while(steps_left1>0)
{
  //dir1=1 dir2=0 goes backwards
    Direction1 = true;
    Direction2 = false;
    currentMillis = micros();
   
    if(currentMillis-last_time>=1000)
  {
    stepper1(1);                                        //Here was the error
    stepper2(1);
    time=time+micros()-last_time;
    last_time=micros();
    steps_left1--;
    steps_left2--;
   }

 delay(1000);
 //turn right
    steps_left1=1024;
    steps_left2=1024;
 //dir1=1 dir2=1 turns right
    while(steps_left1>0)

{
    Direction1 = true;
    Direction2 = true;
    currentMillis = micros();
    if(currentMillis-last_time>=1000)

  {
    stepper1(1);
    stepper2(1);
    time=time+micros()-last_time;
    last_time=micros();
    steps_left1--;
    steps_left2--;
    }

    delay(1500);

  } //end if statement

}//ends loop

    void stepper1(int xw)

{

    for (int x=0;x<xw;x++)

 {
    switch(Steps1)

   {
    
case 0:
    digitalWrite(IN11, LOW);
    digitalWrite(IN12, LOW);
    digitalWrite(IN13, LOW);
    digitalWrite(IN14, HIGH);
    break;
   
 case 1:
    digitalWrite(IN11, LOW);
    digitalWrite(IN12, LOW);
    digitalWrite(IN13, HIGH);
    digitalWrite(IN14, HIGH);
    break;
   
 case 2:
    digitalWrite(IN11, LOW);
    digitalWrite(IN12, LOW);
    digitalWrite(IN13, HIGH);
    digitalWrite(IN14, LOW);
    break;
    
case 3:
    digitalWrite(IN11, LOW);
    digitalWrite(IN12, HIGH);
    digitalWrite(IN13, HIGH);
    digitalWrite(IN14, LOW);
    break;
    
case 4:
    digitalWrite(IN11, LOW);
    digitalWrite(IN12, HIGH);
    digitalWrite(IN13, LOW);
    digitalWrite(IN14, LOW);
    break;
    
case 5:
    digitalWrite(IN11, HIGH);
    digitalWrite(IN12, HIGH);
    digitalWrite(IN13, LOW);
    digitalWrite(IN14, LOW);
    break;
    
case 6:
    digitalWrite(IN11, HIGH);
    digitalWrite(IN12, LOW);
    digitalWrite(IN13, LOW);
    digitalWrite(IN14, LOW);
    break;
    
case 7:
    digitalWrite(IN11, HIGH);
    digitalWrite(IN12, LOW);
    digitalWrite(IN13, LOW);
    digitalWrite(IN14, HIGH);
    break;
    
default:
    digitalWrite(IN11, LOW);
    digitalWrite(IN12, LOW);
    digitalWrite(IN13, LOW);
    digitalWrite(IN14, LOW);
    break;
   }
    SetDirection1();
  }

}

    void stepper2(int xw)

{

    for (int x=0;x<xw;x++)

 {

    switch(Steps2)
    
  {
    
case 0:
    digitalWrite(IN21, LOW);
    digitalWrite(IN22, LOW);
    digitalWrite(IN23, LOW);
    digitalWrite(IN24, HIGH);
    break;
    
case 1:
    digitalWrite(IN21, LOW);
    digitalWrite(IN22, LOW);
    digitalWrite(IN23, HIGH);
    digitalWrite(IN24, HIGH);
    break;
   
 case 2:
    digitalWrite(IN21, LOW);
    digitalWrite(IN22, LOW);
    digitalWrite(IN23, HIGH);
    digitalWrite(IN24, LOW);
    break;
    
case 3:
    digitalWrite(IN21, LOW);
    digitalWrite(IN22, HIGH);
    digitalWrite(IN23, HIGH);
    digitalWrite(IN24, LOW);
    break;
    
case 4:
    digitalWrite(IN21, LOW);
    digitalWrite(IN22, HIGH);
    digitalWrite(IN23, LOW);
    digitalWrite(IN24, LOW);
    break;
    
case 5:
    digitalWrite(IN21, HIGH);
    digitalWrite(IN22, HIGH);
    digitalWrite(IN23, LOW);
    digitalWrite(IN24, LOW);
    break;
    
case 6:
    digitalWrite(IN21, HIGH);
    digitalWrite(IN22, LOW);
    digitalWrite(IN23, LOW);
    digitalWrite(IN24, LOW);
    break;
    
case 7:
    digitalWrite(IN21, HIGH);
    digitalWrite(IN22, LOW);
    digitalWrite(IN23, LOW);
    digitalWrite(IN24, HIGH);
    break;
    
default:
    digitalWrite(IN21, LOW);
    digitalWrite(IN22, LOW);
    digitalWrite(IN23, LOW);
    digitalWrite(IN24, LOW);
    break;
   }
    SetDirection2();
  }
 
}


    void SetDirection1()

{
    if(Direction1==1){ Steps1++;}

    if(Direction1==0){ Steps1--; }

    if(Steps1>7){Steps1=0;}

    if(Steps1<0){Steps1=7; }
}
    

void SetDirection2()
{
    if(Direction2==1){ Steps2++;}

    if(Direction2==0){ Steps2--; }

    if(Steps2>7){Steps2=0;}

    if(Steps2<0){Steps2=7; }

}

Hope this will do better!

Maybe once the code compiles it will do better. You still have mismatched braces. You would know that if you had followed the advice of PaulS to use the auto format tool (Tools, Auto format or Ctrl-T) before posting.

In the IDE, if you put the cursor to the right of a brace and click, the matching brace will be highlighted.

The endless loop that PaulS pointed out is still there.

   while(1>0)
   {
    //check bumpers
    int readLeft = digitalRead(leftBumper);
    int readRight = digitalRead(rightBumper);
    }
		}//ends loop

The comment is wrong. That is NOT the end of loop().