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