티스토리 뷰

Arduino Uno Echo Behavior When Entering an Enter KeyArduino Uno Echo Behavior When Entering an Enter Key

Arduino Uno Echo Behavior When Entering an Enter Key

  아두이노에서 엔터 입력시 Echo 동작을 수행하는 프로그램 예제 입니다. 

문장 단위로 메세지를 입력, 또는 특정 문자 입력까지 데이터를 받아 처리

하고 싶은 경우 본 포소트의 예제를 응용 할 수 있습니다. 

예제1 : Serial Echo 프로그램

시리얼 수신 인터럽트 serialEvent() 함수를 사용하여 수신된 데이터를 바로 송신하는 기본적인 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 전송 설정Putty CR+LF 전송, Local Echo 설정


참고자료

시리얼 통신과 관련된 기본 적인 내용은 아래의 포스트를 참조해주세요.

관련포스트

2020/07/03 - [Arduino/Basic] - 아두이노 강좌 #4 시리얼 통신 1. 개요 및 Hello World 출력

2020/07/04 - [Arduino/Basic] - 아두이노 강좌 #5 시리얼 통신 2. UART 초기화 및 송신 프로그래밍

2020/07/05 - [Arduino/Basic] - 아두이노 강좌 #6 시리얼 통신 3. UART 수신 프로그래밍

2020/07/10 - [Arduino/Basic] - 아두이노 강좌 #11 시리얼 UART 수신 인터럽트 serialEvent()

끝까지 읽어 주셔서 감사합니다.^^


댓글
댓글쓰기 폼
최근에 올라온 글
«   2020/10   »
        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
Total
10,493
Today
9
Yesterday
229