#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.