Arduino Uno Echo Behavior When Entering an Enter Key
아두이노에서 엔터 입력시 Echo 동작을 수행하는 프로그램 예제 입니다.
문장 단위로 메세지를 입력, 또는 특정 문자 입력까지 데이터를 받아 처리
하고 싶은 경우 본 포소트의 예제를 응용 할 수 있습니다.예제1 : Serial Echo 프로그램
코드
1 2 3 4 5 6 7 8 9 10 11 12 | /* 시리얼 인터럽트 방식 */ void setup(){ Serial.begin(9600); Serial.println("Serial Port Connected!"); } void loop(){ } /* 시리얼 수신 ISR */ void serialEvent(){ Serial.write(Serial.read()); } | cs |
serialEvent() 함수는 시리얼 통신이 수신 되면 호출 되는 ISR(Interrupt Service Routine) 입니다.
예제2 : 문장 단위 Serial Echo 프로그램
시리얼 데이터 수신시 엔터가 입력되면, 현재까지 수신된 데이터를 송신하는 프로그램입니다. 윈도우에서 시리얼 모니터 프로그램에서 엔터키가 입력 되면 캐리지리턴 \r 와 라인피드 \n 데이터가 전달됩니다. 아두이노에서는 \n 데이터가 수신 되면 줄 바꿈으로 인식하고 이전까지 수신된 데이터를 모두 송신합니다.
개행 문자
줄 바꿈을 처리할 때 사용 되는 것이 캐리지리턴(CR : Carriage Return)과 라인피드(LF : Line Feed)입니다. 개행 문자는 운영체제에 따라 다르게 사용 됩니다.
개행 문자
- LF(Line Feed) :
\n커서를 아래 줄로 이동 - CR(Carriage Return) :
\r커서를 현재 줄의 왼쪽으로 이동
운영체제 의존성
- 윈도우/DOS : CRLF
\r\n을 줄바꿈으로 정의 - Unix/Linux : LF
\n만으로 줄바꿈으로 정의
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #define buadrate 9600 #define ledPin 13 String myString; bool flag = false; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(buadrate); while(!Serial) { ; } delay(5000); Serial.println("Serial Port Connected.."); delay(1000); Serial.println("Echo Program Stated..."); Serial.print("PC $>> "); } void loop() { if(flag == true) { Serial.print("Arduino$>> "); Serial.print(myString); myString = ""; flag = false; Serial.print("PC $>> "); } } void serialEvent() { char myChar = (char)Serial.read(); myString += myChar; if(myChar == '\n') { flag = true; } } | cs |
실행 결과
시리얼 모니터는 putty 를 사용하였습니다.
부록 : Putty 설정
기본적인 Putty 프로그램은 기본적으로 엔터 입력시 LF 만 전송합니다. 하지만 다행스럽게도 아래의 링크에서 CR + LF 를 전송할 수 있는 Putty 프로그램이 있습니다. 본 예제의 실행 결과 화면과 같이 Putty 를 사용하기 위해 아래의 링크에서 다운로드 한 후 Terminal, Terminal/Keyboard 환경 설정을 아래 그림과 같이 변경하면 본 포스트의 실행 결과처럼 사용이 가능합니다.
다운로드 링크 : https://www.grzegorz.net/pliki/putty-crlf.zip
Putty CR+LF 전송, Local Echo 설정
참고자료
시리얼 통신과 관련된 기본 적인 내용은 아래의 관련포스트를 참조해주세요. 끝까지 읽어 주셔서 감사합니다.^^
'Embedded > Arduino' 카테고리의 다른 글
아두이노 코딩 : 조도센서(CDS,포토레지스터)로 LED Dimming 하기 (0) | 2020.07.26 |
---|---|
아두이노 코딩 : 히스테리시스로 아날로그 입력 노이즈 처리 (0) | 2020.07.24 |
아두이노 코딩 스위치 채터링과 디바운스 디바운싱 (4) | 2020.07.21 |
아두이노 코딩 스위치 입력 인터럽트(Interrupt) 방식으로 LED 제어 (0) | 2020.07.20 |
아두이노 코딩 스위치 입력 폴링 방식 (Switch Polling) 으로 LED 제어 (0) | 2020.07.19 |