아두이노프로그램을 이용하여 물체가 다가오면 아두이노의 내장 LED를 켜고, 직렬 통신으로 “WARNING” 메세지를 출력한 후 이후 관리자의 응답을 기다리며 대기한다. 터미널로 SPACE 키 입력이 들어오면 LED를 off하고 다시 장애물 검출을 실시한다. 원하는 키 입력이 들어오지 않으면 계속 올바른 입력이 들어올 때까지 그 상태로 대기한다. 이때 키 입력은 엔터(enter)없이 스페이스 한 개의 입력임.
# 프로그램 설명
1. 장애물회피센서 OAS를 8로 define하고 이전 상태를 저장하는 int형 지역변수 previous를 선언하고 장애물이 없는 상태인 1로 초기화 한다.
2. void setup() 부분에서 pinMode() 함수로 내장 LED인 LED_BUILTIN을 OUTPUT모드로 설정하고 장애물회피센서를 INPUT모드로 설정한다. 직렬 통신을 사용하므로 시리얼 전송 속도를 9600bps으로 설정한다.
3. void loop() 부분에서 만약 장애물회피센서에서 장애물이 검출되어 OAS의 디지털 값이 0(LOW)이고 이전 상태가 장애물이 없는 상태인 1이면 내장 LED를 켜고, 직렬 통신으로 터미널에 “WARNING” 메세지를 출력한다. 이전 상태를 장애물이 검출된 상태인 0으로 변경하고 관리자의 응답을 기다리며 대기한다.
4. Serial.available() 함수를 사용하여 터미널로 들어온 데이터가 있으면 Serial.read()로 데이터를 읽어 그 값이 space인 32값이면 터미널에 “space 입력됨.” 메세지를 출력하고 내장 LED를 끄고 이전 상태를 장애물이 없는 상태인 1으로 변경하여 다시 장애물 검출을 실시한다. 이 때, 키 입력은 enter 없이 입력 가능하게 하기 위하여 Tera Term을 사용하여 데이터를 입력한다.
5. space키 이외의 입력이 들어오면 “space 아님.” 메세지를 출력하고 계속 space가 들어올 때까지 내장 LED가 켜진 상태로 space가 들어올 때까지 대기한다. 이 때 장애물이 없어졌다가 다시 생겨도 “WARNING” 메세지가 출력되지 않는다.
6. 장애물회피센서의 전원부분(갈색)을 아두이노의 우노 3.3V에 연결하고 GND(검은색)를 아두이노 GND에 연결하고 OUT인 신호 부분(흰색)을 아두이노 8번 단자에 연결한다.
# 소스
#define OAS 8 // OAS 8로 define
int previous = 1; // 이전 상태 변수 선언하고 1로 초기화
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // 내장 LED를 출력모드로 설정
pinMode(OAS, INPUT); // OAS를 입력모드로 설정
Serial.begin(9600); // 시리얼 전송 속도 설정
}
void loop() {
if(digitalRead(OAS) == LOW){ // 장애물이 검출되면
if(previous == 1){ // 이전 상태가 1이면
digitalWrite(LED_BUILTIN, HIGH); // 내장 LED 켬
Serial.println("WARNING"); // “WARNING” 메세지 터미널에 출력
previous = 0; // 이전 상태 0으로 변경
}
}
if(Serial.available()>0){ // 터미널에 들어온 데이터가 있으면
if(Serial.read()==32){ // 들어온 값이 space(32)이면
Serial.println("space 입력 됨."); // space 입력되었다고 출력
digitalWrite(LED_BUILTIN, LOW); // 내장 LED 끔
previous = 1; // 이전 상태를 1으로 변경
}
else // 들어온 값이 space가 아니면
Serial.println("space 아님."); // space가 아니라고 출력
}
}
# 실행 결과(Tera Term)
- 장애물이 들어오고 “WARNING” 메세지 출력됨
- 1, f, d 순서대로 입력되어 “space 아님.” 메세지 출력됨
- space 입력되어 “space 입력됨.” 메세지 출력됨
- 장애물이 들어오고 “WARNING” 메세지 출력됨
- h, 8, v 순서대로 입력되어 “space 아님.” 메세지 출력됨
- space 입력되어 “space 입력됨.” 메세지 출력됨
- 장애물이 들어오고 “WARNING” 메세지 출력됨
- m, 6 순서대로 입력되어 “space 아님.” 메세지 출력됨
- space 입력되어 “space 입력됨.” 메세지 출력됨
'전공 공부 > 아두이노프로그래밍' 카테고리의 다른 글
장애물회피센서, 라인트레이서 (0) | 2021.01.18 |
---|---|
적외선 장애물회피센서, 만능기판에 설치한 LED (0) | 2021.01.18 |
터미널 에뮬레이터를 이용하여 PC 키보드 1~8의 숫자 키로 입력을 받아 한 옥타브(낮은 ‘도’~높은 ‘도’)를 연주하는 프로그램을 제작하시오. 이때 숫자를 입력할 때 enter키 입력하지 않아도.. (0) | 2021.01.17 |
serialEvent() 함수를 사용하여 터미널에서 입력한 문자를 터미널 에뮬레이터로 반환하는 프로그램 (0) | 2021.01.17 |
터미널에서 소문자를 입력하면(enter를 치지 않아도 입력됨) 아두이노가 이를 받아 대문자로 변환하여 다시 터미널로 출력하는 아두이노 프로그램 (0) | 2021.01.17 |