How to code arudino car mission

  1. Spin right 360 dgree
  2. Spin left 360 degree
  3. go straight until find wall
  4. if find wall, spin left 90 and follow wall once around
  5. Once it's done, spin left 180 and follow wall once around
  6. go center
  7. 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()

Is there a loop() function in the code you posted? Sun is in my eyes here, not seeing it.

a7

Hello orimu
Do you think it is good idea to have 20 functions calls of delay() that is blocking the needed realtime behaiviour of the sketch?

Line  81:   delayMicroseconds(10);
	Line  87:   spin_right2(); delay(1500); brake(); delay(500);
	Line  88:   spin_left2(); delay(1500); brake();
	Line  93:   spin_left2(); delay(1750); brake();
	Line 103:     brake(); delay(500);
	Line 104:     spin_left2(); delay(400);
	Line 105:     brake(); delay(500);
	Line 107:     servo.write(10);delay(500);
	Line 109:     Distance = Distance_sensing(); delay(5);
	Line 117:   delay(800);
	Line 118:   brake(); delay(500);
	Line 119:   servo.write(170);delay(500);
	Line 129:   Distance = Distance_sensing(); delay(5);
	Line 137:     brake(); delay(500);
	Line 138:     spin_left2(); delay(500);
	Line 139:     brake(); delay(500);
	Line 151:   Distance = Distance_sensing(); delay(5);
	Line 159:     brake(); delay(500);
	Line 160:     spin_right2(); delay(500);
	Line 161:     brake(); delay(500);

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.