BASIC4MCU | 질문게시판 | 현재 회로도에서 스위치를 달고싶습니다!
페이지 정보
작성자 Ptype4 작성일2022-11-26 06:11 조회1,190회 댓글4건본문
현재 회로도에서 자율주행을 하기까지 만들었는데 스위치 버튼으로 켰다/껐다 를 하고 싶습니다.
스위치는 평범한 ON/OFF에 vcc gnd 선 달려있는 걸로 구매할려고 합니다. 거기에 맞춰서 회로도와 코딩을 수정하고 싶은데
스위치를 아래 그림처럼 연결하면되나요?
아니라면 댓글로 알려주시면 감사하겠습니다..
그리고 코딩은 ON했을때 전체 동작하고 OFF할때는 동작들이 다 멈추는 것을 하고 싶습니다.
#include //시리얼 통신 라이브러리 호출
//모터 PIN 설정
#define LEFT_A1 7 //왼쪽 바퀴
#define LEFT_B1 6 //왼쪽 바퀴
#define RIGHT_A2 5 //오른쪽 바퀴
#define RIGHT_B2 4 //오른쪽 바퀴
//L298N 속도
#define ENA 9
#define ENB 10
//초음파 센서 PIN 설정
#define IR_TRIG 13 //TRIG 핀 설정 (초음파 보내는 핀)
#define IR_ECHO 12 //ECHO 핀 설정 (반사된 초음파 받는 핀)
//모터 fan PIN 설정
#define coolingfan 3 //쿨링팬 핀 설정
void setup() {
Serial.begin(9600); //시리얼모니터
//모터 핀모드 설정
pinMode(LEFT_A1, OUTPUT);
pinMode(RIGHT_A2, OUTPUT);
pinMode(LEFT_B1, OUTPUT);
pinMode(RIGHT_B2, OUTPUT);
//초음파 센서 핀모드 설정
pinMode(IR_TRIG, OUTPUT);
pinMode(IR_ECHO, INPUT);
//모터 fan 핀모드 설정
pinMode(coolingfan, OUTPUT);
//모터 속도
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}
void loop() {
float duration, distance;
digitalWrite(IR_TRIG, HIGH);
delay(10);
digitalWrite(IR_TRIG, LOW);
// echoPin 이 HIGH를 유지한 시간
duration = pulseIn(IR_ECHO, HIGH);
// HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
// 340은 초당 초음파(소리)의 속도, 10000은 밀리세컨드를 세컨드로, 왕복거리이므로 2로 나눠주면 거리가 cm 로 나옴
distance = ((float)(340 * duration) / 10000) / 2;
Serial.print("\nDIstance : ");
Serial.println(distance);
if (distance < 20) { //장애물 감지 (20cm 이내)
Serial.println("stop");
stop(); //정지(1초)
Serial.println("backward");
backward(); //후진(0.5초)
int rnd = random(0, 2); //장애물 감지시 좌/우회전 랜덤처리
if (rnd == 0) {
Serial.println("left");
right();
} else {
Serial.println("right");
left();
}
} else { //장애물 없음
Serial.println("forward");
forward();
}
}
void forward() {
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, HIGH);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, HIGH);
digitalWrite(coolingfan,HIGH);
analogWrite(ENA, 255/8);
analogWrite(ENB, 255/8);
delay(1000);
}
void backward() {
digitalWrite(LEFT_A1, HIGH);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, HIGH);
digitalWrite(RIGHT_B2, LOW);
digitalWrite(coolingfan,HIGH);
analogWrite(ENA, 255/8);
analogWrite(ENB, 255/8);
delay(500);
}
void left() {
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, HIGH);
digitalWrite(RIGHT_A2, HIGH);
digitalWrite(RIGHT_B2, LOW);
digitalWrite(coolingfan,HIGH);
analogWrite(ENA, 255/8);
analogWrite(ENB, 255/8);
delay(1000);
}
void right() {
digitalWrite(LEFT_A1, HIGH);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, HIGH);
digitalWrite(coolingfan,HIGH);
analogWrite(ENA, 255/8);
analogWrite(ENB, 255/8);
delay(1000);
}
void stop() {
digitalWrite(LEFT_A1, LOW);
digitalWrite(LEFT_B1, LOW);
digitalWrite(RIGHT_A2, LOW);
digitalWrite(RIGHT_B2, LOW);
digitalWrite(coolingfan,LOW);
delay(1000);
}
위 코딩은 전체 동작하게 하는 코딩입니다. 여기서 스위치 ON/OFF를 위한 코드를 어디에다 무엇을 삽입하면 되나요?
댓글 4
조회수 1,190master님의 댓글
master 작성일
배터리 + 선을 스위치로 ON/OFF 시키세요
코드는 건드릴 것이 없습니다.
Ptype4님의 댓글
Ptype4
어..어떤 말씀이신지 이해가 잘 안되었는데 모터드라이버에 넣은 배터리 +단자를 스위치로 ON/OFF가 어떻게 하라는건가여?...죄송함니다.ㅠㅠ 지식이 많이 딸려서..
master님의 댓글
master
Ptype4님의 댓글
Ptype4
아 무슨 말씀인지 이해 된것같습니다. 한번 사서 시도해보겠습니다. 감사합니다~!!!