Using a stepper combined with sonar for a 2 wheeler

#include <Stepper.h>
#define BRX RX
#define BTX TX
#define IN1  2
#define HBRE 3
#define IN2  4
#define HBM4 5
#define HBM3 6
#define IN3  7
#define IN4  8
#define HBM2 9
#define HBM1 10
#define HARE 11
#define ETRIG 12
#define EECHO 13
 
#define TURN_DELAY 200
int OBST_D=25;
int duration;

int distance;
int Steps = 4096;
boolean Direction1 = true; 
unsigned long last_time;
unsigned long currentMillis ;
int steps_left=4096;
long time;

int value[8];
int goP;

void setup(){
 pinMode(HBM4, OUTPUT);//Links motor
 pinMode(HBM3, OUTPUT);//links motor
 pinMode(HBM2, OUTPUT);//rechts motor
 pinMode(HBM1, OUTPUT);// rechts motor

Serial.begin(9600);
 pinMode(ETRIG, OUTPUT);// attach pin 12 to Trig
 pinMode(EECHO, INPUT);//attach pin  13 to Echo
pinMode(HARE, OUTPUT);
pinMode(HBRE, OUTPUT);
pinMode(IN1, OUTPUT); 
 pinMode(IN2, OUTPUT); 
 pinMode(IN3, OUTPUT); 
 pinMode(IN4, OUTPUT); 

// delay(1000);
}


 void Sonar(){
//    for(int index; index < 8; index++){
 digitalWrite(ETRIG, HIGH);
 delayMicroseconds(10); // tijd dat het sensor neemt om een waarde aantenemen
 digitalWrite(ETRIG, LOW);
 duration = pulseIn(EECHO, HIGH);
 distance = (duration/2) /29.1;
  Serial.print(distance);
 Serial.print("cm   ");
 Serial.println();
  currentMillis = micros();
 delay(250);  
 }
 
 
void Step1(){ // 45 degrees
 while (steps_left>0){currentMillis = micros(); if(currentMillis-last_time>=1000){
Stepper(1);   
  time=time+micros()-last_time;
  last_time=micros();
  steps_left++;
 }}
 Direction1=!Direction1;
  steps_left=520;// steps van het totaal die het aantal graden aangeeft(45 gr).
 

}


void Step2(){
while (steps_left>520){currentMillis = micros(); if(currentMillis-last_time>=1000){
  Stepper(1);   
  time=time+micros()-last_time;
  last_time=micros();
  steps_left++;
 }}
 Direction1=!Direction1;
  steps_left=1040;
  
 }
 


void Step3(){
 while (steps_left>1040){currentMillis = micros(); if(currentMillis-last_time>=1000){
 Stepper(1);   
  time=time+micros()-last_time;
  last_time=micros();
  steps_left--;
 }}
 Direction1=!Direction1;
  steps_left=1560;
}


void Step4(){
 while (steps_left>1560){currentMillis = micros(); if(currentMillis-last_time>=1000){
  Stepper(1);   
  time=time+micros()-last_time;
  last_time=micros();
  steps_left--;
 }}
 Direction1=!Direction1;
  steps_left=2080;
}


void Step5(){
 while (steps_left>2080){currentMillis = micros(); if(currentMillis-last_time>=1000){
Stepper(1);   
  time=time+micros()-last_time;
  last_time=micros();
  steps_left--;
 }}
 Direction1=!Direction1;
  steps_left=2600;
}

void Step6(){
 while (steps_left>2600){currentMillis = micros(); if(currentMillis-last_time>=1000){
 Stepper(1);   
  time=time+micros()-last_time;
  last_time=micros();
  steps_left--;
 }}
 Direction1=!Direction1;
  steps_left=3120;
}
void Step7(){
 while (steps_left>3120){currentMillis = micros(); if(currentMillis-last_time>=1000){
Stepper(1);   
  time=time+micros()-last_time;
  last_time=micros();
  steps_left--;
 }}
 Direction1=!Direction1;
  steps_left=3640;
}
void Step8(){
 while (steps_left>3640){currentMillis = micros(); if(currentMillis-last_time>=1000){
Stepper(1);   
  time=time+micros()-last_time;
  last_time=micros();
  steps_left--;
 }}
 Direction1=!Direction1;
  steps_left=4096;
}


void Stop(){
 
{digitalWrite(HBM1, LOW); digitalWrite(HBM3, LOW); digitalWrite(HBM2, LOW); digitalWrite(HBM4, LOW); digitalWrite(HARE, LOW); digitalWrite(HBRE, LOW);}
}
void GO(){

{digitalWrite(HBM1, HIGH); digitalWrite(HBM3, HIGH); digitalWrite(HBM2, LOW); digitalWrite(HBM4, LOW); digitalWrite(HARE, HIGH); digitalWrite(HBRE, HIGH);}
}
void left(){
{digitalWrite(HBM2, HIGH); digitalWrite(HBM3, HIGH); digitalWrite(HBM1, LOW); digitalWrite(HBM4, LOW); digitalWrite(HARE, HIGH); digitalWrite(HBRE, HIGH);(180);}
}
void right(){

{digitalWrite(HBM1, HIGH); digitalWrite(HBM4, HIGH); digitalWrite(HBM2, LOW); digitalWrite(HBM3, LOW); digitalWrite(HARE, HIGH); digitalWrite(HBRE, HIGH); delay (180);}
}
void back(){
 
{digitalWrite(HBM2, HIGH); digitalWrite(HBM4, HIGH); digitalWrite(HBM1, LOW); digitalWrite(HBM3, LOW); digitalWrite(HARE, HIGH); digitalWrite(HBRE, HIGH); delay (120);}
}
void left45(){
 
 {digitalWrite(HBM2, HIGH); digitalWrite(HBM3, HIGH); digitalWrite(HBM1, LOW); digitalWrite(HBM4, LOW); digitalWrite(HARE, HIGH); digitalWrite(HBRE, HIGH); delay (140);}
}
void right45(){
 
 {digitalWrite(HBM1, HIGH); digitalWrite(HBM4, HIGH); digitalWrite(HBM2, LOW); digitalWrite(HBM3, LOW); digitalWrite(HARE, HIGH); digitalWrite(HBRE, HIGH); delay(140);}
}
void left135(){
{digitalWrite(HBM2, HIGH); digitalWrite(HBM3, HIGH); digitalWrite(HBM1, LOW); digitalWrite(HBM4, LOW); digitalWrite(HARE, HIGH); digitalWrite(HBRE, HIGH); delay (210);}
} 
void right135(){

{digitalWrite(HBM1, HIGH); digitalWrite(HBM4, HIGH); digitalWrite(HBM2, LOW); digitalWrite(HBM3, LOW); digitalWrite(HARE, HIGH); digitalWrite(HBRE, HIGH); delay(220 );}
}  
  
  // totaal is 4096 aan de hand van aantal bepaal je graden
void Stepper(int xw){
  for (int x=0;x<xw;x++){
switch(Steps){
   case 0:
     digitalWrite(IN1, LOW); 
     digitalWrite(IN2, LOW);
     digitalWrite(IN3, LOW);
     digitalWrite(IN4, HIGH);
   break; 
   case 1:
     digitalWrite(IN1, LOW); 
     digitalWrite(IN2, LOW);
     digitalWrite(IN3, HIGH);
     digitalWrite(IN4, HIGH);
   break; 
   case 2:
     digitalWrite(IN1, LOW); 
     digitalWrite(IN2, LOW);
     digitalWrite(IN3, HIGH);
     digitalWrite(IN4, LOW);
   break; 
   case 3:
     digitalWrite(IN1, LOW); 
     digitalWrite(IN2, HIGH);
     digitalWrite(IN3, HIGH);
     digitalWrite(IN4, LOW);
   break; 
   case 4:
     digitalWrite(IN1, LOW); 
     digitalWrite(IN2, HIGH);
     digitalWrite(IN3, LOW);
     digitalWrite(IN4, LOW);
   break; 
   case 5:
     digitalWrite(IN1, HIGH); 
     digitalWrite(IN2, HIGH);
     digitalWrite(IN3, LOW);
     digitalWrite(IN4, LOW);
   break; 
     case 6:
     digitalWrite(IN1, HIGH); 
     digitalWrite(IN2, LOW);
     digitalWrite(IN3, LOW);
     digitalWrite(IN4, LOW);
   break; 
   case 7:
     digitalWrite(IN1, HIGH); 
     digitalWrite(IN2, LOW);
     digitalWrite(IN3, LOW);
     digitalWrite(IN4, HIGH);
   break; 
   default:
     digitalWrite(IN1, LOW); 
     digitalWrite(IN2, LOW);
     digitalWrite(IN3, LOW);
     digitalWrite(IN4, LOW);
   break; 
   
}

SetDirection1();
}
} 
void SetDirection1(){
if(Direction1==1){ Steps++;}
if(Direction1==0){ Steps--; }
if(Steps>7){Steps=0;}
if(Steps<0){Steps=7; }
 }


void loop(){
for(goP=2;goP <2000; goP++);{
 Sonar();
 Step1(); 
 if distance > OBST_D 
 Go();
 else if (distance < OBST_D){
 right();
}

I have managed that each device works separate but when combined together. still working that out.

the "car" function;
stepper+ sonar goes on
it gets distance.
if distance is bigger he can go foward. if not
Radar ( sonar+stepper) goes to find where its possible to ride

How can I reach this goal with this program??

Moderator edit:
</mark> <mark>[code]</mark> <mark>

</mark> <mark>[/code]</mark> <mark>
tags added.

What is this stuff for

switch(Steps){
   case 0:
     digitalWrite(IN1, LOW);
     digitalWrite(IN2, LOW);
     digitalWrite(IN3, LOW);
     digitalWrite(IN4, HIGH);
   break;

It looks like you are trying to control the current on the stepper coils. That is totally unnecessary if you use the Stepper or AccelStepper library.

And if you want to manage more than one motor it is almost certain that you need to get rid of all these WHILEs

void Step1(){ // 45 degrees
 while (steps_left>0){currentMillis = micros(); if(currentMillis-last_time>=1000){
Stepper(1);  
  time=time+micros()-last_time;
  last_time=micros();
  steps_left++;
 }}
 Direction1=!Direction1;
  steps_left=520;// steps van het totaal die het aantal graden aangeeft(45 gr).

}

You probably need to reorganize the code so it moves each motor one step at a time towards its target position. That is easily done with AccelStepper because you just set the destination and the call to stepper.run() causes it to move if it needs to move.

...R

Okay, if I have understood correctly .

#inlcude <Stepper.h>

Remove=
void stepper
While function

(void Step1(){ // 45 degrees
while (steps_left>0){currentMillis = micros(); if(currentMillis-last_time>=1000){
Stepper(1);
time=time+micros()-last_time;
last_time=micros();

and activate stepper.run();

ashtonlopez:
and activate stepper.run();

Stepper.run() is part of the AccelStepper library - not part of the Stepper library.

The stepper library just uses stepper.step(number of steps).

I think you will find the AccelStepper library better for your project but you could do what you want with the Stepper library just using stepper.step(1) every time.

You may find something useful in stepper motor basics - but it only deals with the use of stepper drivers that only require step and direction signals. I suspect you are using a h-bridge.

...R