728x90

# 프로그램 설명

1. 시리얼 모니터 창과 Tera Term 창과의 교신을 위하여(소프트웨어 방식의 직렬통신을 구현하기 위하여) AltSoftSerial 라이브러리를 사용한다. 아두이노 라이브러리 관리의 메뉴에 들어가서 AltSoftSerial 라이브러리를 설치한다.

AltSoftSerial의 객체 altSerial를 생성한다.

 

2. setup() 부분에서 시리얼 모니터와 터미널 에뮬레이터(Tera Term)의 통신 속도를 9600bps로 설정한다.

 

3. loop() 부분과 serialEvent() 함수 부분에서 모두 사용하기 위한 전역 변수들을 선언한다.

int형 변수 inputChar(입력한 문자)와 부울형 변수 charComplete(데이터가 들어왔는지 확인하기 위함)를 선언한다.

 

4. serialEvent() 함수 부분에서 char형 변수 c를 선언하고 Serial.read() 함수를 사용하여 터미널에서 입력한 데이터를 읽어 c에 저장한다. 입력한 데이터가 무엇인지 확인하기 위하여 c를 시리얼 모니터에 출력한다. 들어온 데이터 c를 변수 inputChar에 저장하고 데이터가 들어왔으므로 charComplete 값을 true로 변경한다. serialEvent() 함수는 호출하지 않아도 데이터가 들어오면 저절로 실행된다.

 

5. loop() 부분에서 만약 charCompletetrue이면 데이터가 들어온 것이므로 예제 6.5.1 과 같은 기능(이진수 값, 아스키코드 값, 십진수 값 출력)을 수행하도록 한다. 터미널 에뮬레이터에 입력받은 데이터 inputCharwrite() 함수를 사용하여 이진수 값을 출력하고, print(inputChar, HEX) 함수를 사용하여 아스키코드 값을 출력하고, println() 함수를 사용하여 십진수 값을 출력한다. 결과를 출력한 후 데이터가 없는 상태로 바꾸기 위하여 charComplete 값을 false로 변경한다.

 

6. USB to RS-232 TTL 케이블 단자 중 흰색 케이블(RxD)을 아두이노 우노 9(TxD), 초록색 케이블(TxD)을 아두이노 우노 8(RxD), 검은색 케이블(GND)GND에 각각 연결한다.

7. 시리얼 모니터에서 데이터를 입력할 때 enter를 입력해야 하기 때문에 enter에 해당하는 값이 계속 나오므로 시리얼 모니터에서 line ending 없음으로 설정하였다.

 

# 코드

#include <AltSoftSerial.h>
AltSoftSerial altSerial;

int inputChar;
bool charComplete = false;

void setup() {
  Serial.begin(9600);      // 시리얼 모니터 통신 속도 설정
  altSerial.begin(9600);    // 터미널 에뮬레이터(Tera Term)의 통신 속도 설정
}

void loop() {
  if(charComplete){            // 들어온 데이터가 있으면
    altSerial.print("I received a character : ");
    altSerial.write(inputChar);                  // 이진수 값 출력
    altSerial.print(", whose ASCII code is ");
    altSerial.print(inputChar, HEX);            // 아스키코드 값 출력
    altSerial.print(". - FYI, DEC = ");
    altSerial.println(inputChar);                // 십진수 값 출력

    charComplete = false;     // 데이터가 없는 상태로 변경
  }
}

void serialEvent(){            // 호출하지 않아도 데이터가 들어오면 실행
   char c = Serial.read();    // 터미널에서 입력한 문자를 c에 저장
   Serial.println(c);          // 입력한 문자를 시리얼 모니터로 출력
   inputChar = c;  
   charComplete = true;     // 데이터가 들어온 상태로 변경
}

 

# 실행 결과 (터미널과 터미널 에뮬레이터 Tera Term)

- a, b, A, B, 0, 9, space를 순서대로 시리얼 모니터에 입력한 경우

결과가 터미널 에뮬레이터(Tera Term)에 출력된다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기