BASIC4MCU | 질문게시판 | 라인트레이서+초음파센서 텍스트로 업로드했슴다!!(수정)
페이지 정보
작성자 영스기 작성일2019-11-30 11:36 조회4,501회 댓글0건본문
// 라인트레이서 //
// 라인을 따라 움직이도록 하며 중간에 장애물 발견시 정지한다.
// 장애물을 치우면 다시 전진하는 코드를 작성할 것
int Left_motor_back=9; //(IN1)
int Left_motor_go=5; //(IN2)
int Right_motor_go=6; //(IN3)
int Right_motor_back=10; //(IN4)int key=A0;
int beep=13;
int Echo=12;
int trig=11;const int SensorRight = A2;
const int SensorLeft = A3;int SL;
int SR;void setup()
{
Serial.begin(9600);
pinMode(Echo, INPUT);
pinMode(trig, OUTPUT);
pinMode(Left_motor_go,OUTPUT); // PIN 5 (PWM)
pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)
pinMode(Right_motor_go,OUTPUT); // PIN 6 (PWM)
pinMode(Right_motor_back,OUTPUT);// PIN 10 (PWM)
pinMode(key,INPUT);
pinMode(beep,OUTPUT);
pinMode(SensorRight, INPUT);
pinMode(SensorLeft, INPUT);
}//void run(int time)
void run()
{
digitalWrite(Right_motor_go,HIGH);
digitalWrite(Right_motor_back,LOW);
analogWrite(Right_motor_go,2);
analogWrite(Right_motor_back,0);
digitalWrite(Left_motor_go,HIGH);
digitalWrite(Left_motor_back,LOW);
analogWrite(Left_motor_go,1);
analogWrite(Left_motor_back,0);
//delay(time * 100);
}//void brake(int time)
void brake()
{
digitalWrite(Right_motor_go,LOW);
digitalWrite(Right_motor_back,LOW);
digitalWrite(Left_motor_go,LOW);
digitalWrite(Left_motor_back,LOW);
//delay(time * 100);
}//void left(int time)
void left()
{
digitalWrite(Right_motor_go,HIGH);
digitalWrite(Right_motor_back,LOW);
analogWrite(Right_motor_go,2);
analogWrite(Right_motor_back,0);
digitalWrite(Left_motor_go,LOW);
digitalWrite(Left_motor_back,LOW);
analogWrite(Left_motor_go,0);
analogWrite(Left_motor_back,0);
//delay(time * 100);
}
//void right(int time)
void right()
{
digitalWrite(Right_motor_go,LOW);
digitalWrite(Right_motor_back,LOW);
analogWrite(Right_motor_go,0);
analogWrite(Right_motor_back,0);
digitalWrite(Left_motor_go,HIGH);
digitalWrite(Left_motor_back,LOW);
analogWrite(Left_motor_go, 1);
analogWrite(Left_motor_back,0);
//delay(time * 100);
}
//void back(int time)
void back(int time)
{
digitalWrite(Right_motor_go,LOW);
digitalWrite(Right_motor_back,HIGH);
analogWrite(Right_motor_go,0);
analogWrite(Right_motor_back,3);
digitalWrite(Left_motor_go,LOW);
digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0);
analogWrite(Left_motor_back,2);
delay(time * 100);
}
//==========================================================void keysacn()
{
int val;
val=digitalRead(key);
while(!digitalRead(key))
val=digitalRead(key);
while(digitalRead(key))
{
delay(10);
val=digitalRead(key);
if(val==HIGH)
digitalWrite(beep,HIGH); //부저 소리 남
while(!digitalRead(key))
digitalWrite(beep,LOW); // 부저 소리 없음
}
else
digitalWrite(beep,LOW);
}
}void loop()
{
keysacn(); //키를 누르면 동작 시작
while(1)
{
float duration,distance;
digitalWrite(trig,HIGH);
delay(10);
digitalWrite(trig,LOW);
duration=pulseIn(Echo,HIGH);
distance=((float)(340*duration)/10000)/2;
Serial.print("\nDIstance: ");
Serial.println(distance);SR = digitalRead(SensorRight);
SL = digitalRead(SensorLeft);
if (SL == LOW && SR== LOW) // LOW = 센서on // 둘 다 켜졌을 때, 전진
run();
else if (SL == HIGH & SR == LOW) // 오른쪽만 켜졌을 때, 왼쪽 회전
left();
else if (SR == HIGH & SL == LOW) // 왼쪽만 켜졌을 때, 오른쪽 회전
right();
else if(distance<20) //장애물 20cm 이내발견되면 정지
brake();
else
run(); //장애물 치웠을 때, 다시 전진
}
}
-------------------------------
목적: 라인트레이서+초음파센서를 동시에 작동시켜 장애물 발견시 정지 후 장애물 제거시 다시 전진하는 자동차
현재 동작 상태: 저희는 keysacn버튼=모터 동작버튼으로 누르면 센서의 불빛에 따라 모터가 동작하기 시작합니다.
문제: void loop() 안에 둘을 동시에 동작하게 하려는 과정에서 초음파 센서 코딩을 넣으면
초음파 센서는 작동하고 라인센서가 불은 들어오지만 모터가 동작(전진,좌회전,우회전)을 하지 않는 상태입니다.
(키버튼을 안눌러서 동작하지 않는 그런문제가 아니예요,,코딩후 당연히 키버튼 눌렀습니다!ㅎㅎ 그런데 작동하지 않습니다.. )
(라인트레이서는 정상적으로 작동 확인, 초음파센서도 정상적으로 작동 확인하는 건 각각 확인한 상태입니다.)
void loop()안에 while은 라인트레이서가 정상적으로 작동하도록 코딩한 것입니다.
while 안에다가 추가로 초음파 센서 코딩하였으나 적상작동되지 않는 상태인데
왜 동작하지 않는지 궁금하고 이에 대해 코딩을 해결해주시면 감사하겠습니다. ㅠㅠ!!
댓글 0
조회수 4,501등록된 댓글이 없습니다.