int IR1 = 22; // 센서핀은 22번에 연결
int IR2 = 24;
int val1;
int val2;
int trig1 = 30;
int echo1 = 31;
int trig2 = 32;
int echo2 = 33;
int trig3 = 34;
int echo3 = 35;
int wheelLeftFront = 50;
int wheelLeftBack = 52;
int wheelRightFront = 51;
int wheelRightBack = 53;
void setup () {
pinMode(IR1, INPUT); // 센서값을 입력으로 설정
pinMode(IR2, INPUT); // 센서값을 입력으로 설정
pinMode(echo1, INPUT); // echo 입력
pinMode(trig1, OUTPUT); // trigPin 출력
pinMode(echo2, INPUT); // echo 입력
pinMode(trig2, OUTPUT); // trigPin 출력
pinMode(echo3, INPUT); // echo 입력
pinMode(trig3, OUTPUT); // trigPin 출력
Serial.begin(9600); // 블루투스 통신속도 9600
Serial1.begin(9600);
}
void loop ()
{
//IR센서1
val1 = digitalRead(IR1); // 센서값 읽어옴
if (val1 == LOW) { // 장애물 감지 되면
forward(); //전진
}
else { // 장애물이 감지되면
backward(); // 후진
delay(2000); // 1초 동안
right(); // 우회전
delay(1500); // 1.5초 동안
}
//IR센서2
val2 = digitalRead(IR2); // 센서값 읽어옴
if (val2 == LOW) { // 장애물 감지 되면
forward(); // 전진
}
else { // 장애물이 감지되면
backward(); // 후진
delay(2000); // 1초 동안
right(); // 우회전
delay(1500); // 1.5초 동안
}
//초음파센서1
long duration1, distance1;
digitalWrite(trig1, LOW);
delayMicroseconds(2);
digitalWrite(trig1, HIGH); // trigPin에서 초음파 발생(echoPin도 HIGH)
delayMicroseconds(10);
digitalWrite(trig1, LOW);
duration1 = pulseIn(echo1, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
distance1 = ((340 * duration1) / 1000) / 2; //거리를 mm로 출력
if(distance1 < 15){ //15mm안에 들어오면
right(); //우회전
delay(2000); //1초 동안
}
else { // 장애물이 감지안되면
forward(); // 전진
}
//초음파센서2
long duration2, distance2;
digitalWrite(trig2, LOW);
delayMicroseconds(2);
digitalWrite(trig2, HIGH); // trigPin에서 초음파 발생(echoPin도 HIGH)
delayMicroseconds(10);
digitalWrite(trig2, LOW);
duration2 = pulseIn(echo2, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
distance2 = ((340 * duration2) / 1000) / 2; //거리를 mm로 출력
if(distance2 < 15){ //15mm안에 들어오면
right(); //우회전
delay(2000); //1초 동안
}
else { // 장애물이 감지안되면
forward(); // 전진
}
//초음파센서3
long duration3, distance3;
digitalWrite(trig3, LOW);
delayMicroseconds(2);
digitalWrite(trig3, HIGH); // trigPin에서 초음파 발생(echoPin도 HIGH)
delayMicroseconds(10);
digitalWrite(trig3, LOW);
duration3 = pulseIn(echo3, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
distance3 = ((340 * duration3) / 1000) / 2; //거리를 mm로 출력
if(distance3 < 15){ //15mm안에 들어오면
right(); //우회전
delay(2000); //1초 동안
}
else { // 장애물이 감지안되면
forward(); // 전진
}
//블루투스 f전진 l좌측 r우측 b멈춤
if (Serial1.available())
{
char cmd = (char)Serial1.read();
if(cmd == 'F'){
Serial.println(1);
forward(); //전진
delay(1000);
}
else if(cmd == 'L'){
Serial.println(2);
left();
delay(1000);
}
else if(cmd == 'R'){
Serial.println(3);
right();
delay(1000);
}
else if(cmd == 'B')
{ // 후진
Serial.println(4);
backward();
delay(1000);
}
else
{
Serial.println(5);
forward();
}
}
}
//모터전,후진
void forward(){
analogWrite(wheelLeftFront, 150);
analogWrite(wheelLeftBack, 0);
analogWrite(wheelRightFront, 150);
analogWrite(wheelRightBack, 0);
}
void left(){
analogWrite(wheelLeftFront, 0);
analogWrite(wheelLeftBack, 150);
analogWrite(wheelRightFront, 150);
analogWrite(wheelRightBack, 0);
}
void right(){
analogWrite(wheelLeftFront, 150);
analogWrite(wheelLeftBack, 0);
analogWrite(wheelRightFront, 0);
analogWrite(wheelRightBack, 150);
}
void backward(){
analogWrite(wheelLeftFront, 0);
analogWrite(wheelLeftBack, 150);
analogWrite(wheelRightFront, 0);
analogWrite(wheelRightBack, 150);
}
코드는 위와같이 짜넣은 상황이고 결선도 다 했는데 블루투스를 추가하기 전에는 초음파센서가 잘 반응하더니 블루투스를 추가하니 초음파센서가 죽어버리는 상황이네요. IR센서는 정상으로 동작하는데 뭐가 잘못됬는지 혹시 알수있을까요?
|