이렇게 짰는데 저가 아직 초짜라서 뭐가 틀렸는지 모르겠네요 ㅠ 아예 초음파센서가 작동을 안하고 서보모터가 둘다 안움직이네요 ㅠ 주제는 전에 처럼 초음파센서가 물체를 감지하면 servo1이 움직이고 그다음 복귀하면 바로 servo2가 다시 작동하는 그런건데요 ㅠ
죄송하지만 시간되시면 science7687@naver.com으로 소스좀 변경해서 보내주실수 있으신가요 ㅠ
시간상 안되면 밑에 댓글에 뭘 바꿔야하는지 부탁드려요 ㅠ
#include <Servo.h>
Servo myservo; //서보모터 객체 생성
Servo myservo2;
int pos = 0;
int echoPin = 7;
int trigPin = 8;
//초음파 센서의 핀번호를 설정한다.
float duration;
float distance = 100;
void setup() {
myservo.attach(9);//서보모터 핀번호를 9번으로 설정
myservo2.attach(10);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// trig를 출력모드로 설정, echo를 입력모드로 설정
}
void loop() {
digitalWrite(trigPin, HIGH);
delay(10);
digitalWrite(trigPin, LOW);
// 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
duration = pulseIn(echoPin, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
distance = ((float)(340 * duration) / 10000) / 2; // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
//초음파 센서로 측정한 거리가 20cm미만일 경우(쓰레기통에 근접하는 물체가 감지 될 경우)
if (distance < 20) {
//쓰레기통의 문을 연다
for (pos = 10; pos < 100; pos += 2)
{
myservo.write(pos);
delay(10);
}
delay(3000); //3초의 지연시간을 주고 난 뒤 쓰레기통의 문을 닫는다
for (pos = 100; pos >= 10; pos -= 2)
{
myservo.write(pos);
delay(10);
}
}
delay(50);
delay(3000);
myservo2.write(pos);
delay(10);
delay(3000); //3초의 지연시간을 주고 난 뒤 쓰레기통의 문을 닫는다
for (pos = 100; pos >= 10; pos -= 2)
myservo.write(pos);
delay(10);
}
|