//오른쪽 바퀴 int A_1A = 6; int A_1B = 11; //오른쪽 바퀴 int B_1A = 3; int B_1B = 5; /* 초음파센서 초음파센서 TRIG - D8 초음파센서 ECHO - D9 */ int trigPin = 8; int echoPin = 9; int speed = 100; //자동차 속도 int speedPin = 100; long duration = 0; long leftDistance = 0; long rightDistance = 0; /** 왼쪽,오른쪽 모터를 정회전하여 전진합니다. */ void forward() { //모터A 정회전 analogWrite(A_1A, speed); analogWrite(A_1B, 0); //모터B 정회전 analogWrite(B_1A, speed); analogWrite(B_1B, 0); } /** 왼쪽,오른쪽 모터를 역회전하여 후진합니다. */ void back() { //모터A 역회전 analogWrite(A_1A, 0); analogWrite(A_1B, speed); //모터B 역회전 analogWrite(B_1A, 0); analogWrite(B_1B, speed); } /** 오른쪽 모터를 정회전, 왼쪽 모터를 정지하여 우회전합니다. */ void right() { //모터A 정회전 analogWrite(A_1A, speed); analogWrite(A_1B, 0); //모터B 정지 analogWrite(B_1A, 0); analogWrite(B_1B, 0); } /** 오른쪽 모터를 정지, 왼쪽모터를 정회전하여 좌회전합니다. */ void left() { //모터A 정지 analogWrite(A_1A, 0); analogWrite(A_1B, 0); //모터B 정회전 analogWrite(B_1A, speed); analogWrite(B_1B, 0); } /** 오른쪽,왼쪽모터를 모두 정지합니다. */ void stop() { //모터A 정지 analogWrite(A_1A, 0); analogWrite(A_1B, 0); //모터B 정지 analogWrite(B_1A, 0); analogWrite(B_1B, 0); } /** 초음파센서를 이용해서 벽까지의 거리(mm)를 구합니다. */ float getDistanceCM() { digitalWrite(echoPin, LOW); digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // 거리값을 저장합니다. float distance = pulseIn(echoPin, HIGH) / 29.0 / 2.0; return distance; } void setup() { //핀을 초기화합니다. //L298 모터드라이버의 핀들을 출력으로 변경합니다. pinMode(A_1A, OUTPUT); pinMode(A_1B, OUTPUT); pinMode(B_1A, OUTPUT); pinMode(B_1B, OUTPUT); digitalWrite(A_1A, LOW); digitalWrite(A_1B, LOW); digitalWrite(B_1A, LOW); digitalWrite(B_1B, LOW); //초음파센서를 초기화합니다. pinMode(trigPin, OUTPUT); // Trigger is an output pin pinMode(echoPin, INPUT); // Echo is an input pin } void loop() { //30cm이내에 벽이 있다면 아래의 코드를 실행합니다. if (getDistanceCM() < 30) { //1초간 정지합니다. stop(); delay(1000); // 1초간 후진합니다. back(); delay(1000); // 오른쪽으로 2초간 운영 right(); delay(5000); } else { forward(); } }
2017년 3월 12일 일요일
car
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기