- Spin right 360 dgree
- Spin left 360 degree
- go straight until find wall
- if find wall, spin left 90 and follow wall once around
- Once it's done, spin left 180 and follow wall once around
- go center
- spin right 360
void setup() {
Wire.begin();
accelgyro.initialize();
pinMode(Echo, INPUT);
pinMode(Trig, OUTPUT);
servo.write(90);
servo.attach(7); // attaches the servo on pin 7
pinMode(L_M_back, OUTPUT); pinMode(L_M_go, OUTPUT);
pinMode(R_M_go, OUTPUT); pinMode(R_M_back, OUTPUT);
Bluetooth.begin(9600);
unsigned long start=millis();
}
void go() {
analogWrite(R_M_go,150); analogWrite(R_M_back,0);
analogWrite(L_M_go,120); analogWrite(L_M_back,0);
}
void brake() {
analogWrite(R_M_go,0); analogWrite(R_M_back,0);
analogWrite(L_M_go,0); analogWrite(L_M_back,0);
}
void left() {
analogWrite(R_M_go,150); analogWrite(R_M_back,0);
analogWrite(L_M_go,0); analogWrite(L_M_back,0);
}
void right() {
analogWrite(R_M_go,0); analogWrite(R_M_back,0);
analogWrite(L_M_go,120); analogWrite(L_M_back,0);
}
void spin_right() {
analogWrite(R_M_go,0); analogWrite(R_M_back,120);
analogWrite(L_M_go,120); analogWrite(L_M_back,0);
}
void back() {
analogWrite(R_M_go,0); analogWrite(R_M_back,120);
analogWrite(L_M_go,0); analogWrite(L_M_back,120);
}
void spin_left(unsigned int Spin_angle) {
analogWrite(R_M_go,120); analogWrite(L_M_back,120);
for(Yaw_angle=0, t_prev=millis(); (Spin_angle - 10)>abs(Yaw_angle); )
getYaw_angle();
digitalWrite(R_M_go,0); digitalWrite(L_M_back,0);
}
void spin_right(unsigned int Spin_angle) {
analogWrite(R_M_back,120); analogWrite(L_M_go,120);
for(Yaw_angle=0, t_prev=millis(); (Spin_angle - 10)>abs(Yaw_angle); )
getYaw_angle();
digitalWrite(R_M_back,0); digitalWrite(L_M_go,0);
}
void spin_left2() {
analogWrite(R_M_go,150); analogWrite(R_M_back,0);
analogWrite(L_M_go,0); analogWrite(L_M_back,120);
}
void spin_left22() {
analogWrite(R_M_go,150); analogWrite(R_M_back,0);
analogWrite(L_M_go,0); analogWrite(L_M_back,120);
}
void spin_right2() {
analogWrite(R_M_go,0); analogWrite(R_M_back,120);
analogWrite(L_M_go,150); analogWrite(L_M_back,0);
}
void go_straight(unsigned char speed) {
getYaw_angle();
if(Yaw_angle > 1) left(); // 허용각도 (±1도)는 조절 필요
else if(Yaw_angle <-1) right();
else go();
}
unsigned long int Distance_sensing() {
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
return pulseIn(Echo, HIGH, 10000)*340/1000/2;
}
void First1turn(){
spin_right2(); delay(1500); brake(); delay(500);
spin_left2(); delay(1500); brake();
}
void First2turn(){
spin_left2(); delay(1750); brake();
}
void Findwall(){
go();
bool FrontSensorL=digitalRead(16);
bool FrontSensorR=digitalRead(17);
if(FrontSensorL==0 || FrontSensorR==0 ) {
brake(); delay(500);
spin_left2(); delay(400);
brake(); delay(500);
a=10;
servo.write(10);delay(500);
unsigned char DistanceSet = 140;
Distance = Distance_sensing(); delay(5);
}
}
void changeRoute(){
spin_left2();
delay(800);
brake(); delay(500);
servo.write(170);delay(500);
}
void Follow1() {
servo.write(10);
bool FrontSensorL=digitalRead(16);
bool FrontSensorR=digitalRead(17);
unsigned char DistanceSet = 140;
Distance = Distance_sensing(); delay(5);
if (Distance) {
int Error = DistanceSet - Distance;
if (Error > 5) left();
else if (Error < -5) right();
else go();
}
if(FrontSensorL==0 || FrontSensorR==0 ) {
brake(); delay(500);
spin_left2(); delay(500);
brake(); delay(500);
}
}
void Follow2() {
servo.write(170);
bool FrontSensorL=digitalRead(16);
bool FrontSensorR=digitalRead(17);
unsigned char DistanceSet = 150;
Distance = Distance_sensing(); delay(5);
if (Distance) {
int Error = DistanceSet - Distance;
if (Error > 5) right();
else if (Error < -5) left();
else go();
}
if(FrontSensorL==0 || FrontSensorR==0 ) {
brake(); delay(500);
spin_right2(); delay(500);
brake(); delay(500);
}
}
i made code step by step, but it doesn't work if more than one step enters the void loop()