아두이노

Make IT! Arduino -#06 코딩하기

오징어땅콩2 2020. 8. 4. 21:56
반응형

이번것도 조립에 비해 코딩은 별다른 어려움은 없다.

지금까지 잘못된 초음파 센서 코딩도 정확하게 되어 있다.

그리고 5번 코딩과 거의 유사 하기 때문에 약간만 수정하면 되기 때문에 큰 어려움은 없다.

약간의 설명을 하면 전진 하다가 초음파 센서로 앞에 장애물이 발생하면 후진하고 위회전 하고 전진하는 개념이다.

코딩을 보면 쉽게 알수 있을것 같다.

이것도 코딩에 대한 오류는 발견하지 못했다.

 

 
#define RMOTOR1 9
#define RMOTOR2 10
#define LMOTOR1 5
#define LMOTOR2 6
#define speed HIGH
#define  epin  3 //초음파 에코
#define  tpin  2 //초음파 트리거
 
void setup() 
{
  pinMode(RMOTOR1 , OUTPUT);
  pinMode(RMOTOR2 , OUTPUT);
  pinMode(LMOTOR1 , OUTPUT);
  pinMode(LMOTOR2 , OUTPUT);   
 
  digitalWrite(RMOTOR1, LOW);
  digitalWrite(RMOTOR2, LOW);
  digitalWrite(LMOTOR1, LOW);
  digitalWrite(LMOTOR2, LOW);
   
  Serial.begin(115200);
}
 
void loop() 
  if(GetDistanceCM() < 25
  {
    move_stop();
    delay(300); 
    
    move_back();
    delay(300); 
    
    turn_left();
    delay(300);            
  }
  else move_forward();
  
  delay(10);              
}
 
float GetDistanceCM()
  float duration;
  float distance;  
  digitalWrite(epin, LOW);
  digitalWrite(tpin, LOW);
  
  delayMicroseconds(2); 
  digitalWrite(tpin, HIGH);
  delayMicroseconds(10); 
  digitalWrite(tpin, LOW);   
   
  duration = pulseIn(epin,HIGH);
  //distance = (340.0*duration/1000/2/10);     
  distance = (duration/58.8);  
 
  //Serial.print(distance);  
  //Serial.println(" cm.");
 
  return distance;
}
 
void move_forward()
{
  //전진
  Motor_Control(speed, 0, speed, 0);
}
 
void move_back()
{
  //후진
  Motor_Control( 0, speed,  0, speed);
}
 
void turn_right()
{
  //우회전
  Motor_Control( 0, speed,  speed, 0);
}
 
void turn_left()
{
  //죄회전
  Motor_Control( speed, 0,  0, speed);
}
 
void move_stop()
{
  //정지
  Motor_Control( 00,  00);
}
 
void Motor_Control(int SR1, int SR2, int SL1, int SL2)
{
  digitalWrite(RMOTOR1, SR1);
  digitalWrite(RMOTOR2, SR2);
  digitalWrite(LMOTOR1, SL1);
  digitalWrite(LMOTOR2, SL2);  
}