BASIC4MCU | 질문게시판 | 아두이노 졸음 운전 방지 코딩 질문
페이지 정보
작성자 심플민 작성일2020-03-05 15:57 조회6,149회 댓글0건첨부파일
본문
졸음운전을 방지하는 아두이노 동작을 하고 싶은데 일단 구글링 해서 기초적인 틀은 만든 것 같습니다.
원하는 행동이 열차기관사의 졸음운전방지처럼 일정시간 이상 버튼이 안눌리면 경보를 울리는 동작인데
어떤식으로 코딩을 해야될지 모르겠습니다. 초입 방식이라도 제시해주신다면 감사하겠습니다..
int in1 = 7;
int in2 = 8;
int in3 = 4;
int in4 = 5;
const int buttonPin = 2;int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the button
int startPressed = 0; // the time button was pressed
int endPressed = 0; // the time button was released
int timeHold = 0; // the time button is hold
int timeReleased = 0; // the time button is released
void setup() {
pinMode(in1, OUTPUT); // Motor A 방향설정1
pinMode(in2, OUTPUT); // Motor A 방향설정2
pinMode(in3, OUTPUT); // Motor B 방향설정1
pinMode(in4, OUTPUT); // Motor B 방향설정2
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}void loop() {
if (Serial.available()) {
char in_data;
in_data = Serial.read();
if (in_data == '1') {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(9, 127);
analogWrite(3, 127); // 최대속도의 50%
}
else if (in_data == '2') {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(9, 179);
analogWrite(3, 179); // 최대속도의 70%
}
else if (in_data == '3') {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(9, 255);
analogWrite(3, 255); // 최대속도
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
startPressed = millis();
timeReleased = startPressed - endPressed;
if (timeReleased >= 500 && timeReleased < 1000) {
Serial.println("Button idle for half a second");
}
else if (timeReleased >= 1000) {
Serial.println("Button idle for one second or more");
}
}
else {
endPressed = millis();
timeHold = endPressed - startPressed;
if (timeHold >= 500 && timeHold < 1000) {
Serial.println("Button hold for half a second");
}
else if (timeHold >= 1000) {
Serial.println("Button hold for one second or more");
}
}
}
lastButtonState = buttonState;}
else {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
}
}
댓글 0
조회수 6,149등록된 댓글이 없습니다.