[아두이노 기초] 전체 글 목록


이번시간에는 시리얼통신을 사용하는 방법과 시리얼통신을 활용해 led등의 장치를 조작해보는 일을 해보도록 하겠습니다.

시리얼(RS232) 통신은 무엇인가?

rs232 통신은 주로 ibm 호환 pc에서 쓰이는 시리얼 통신 방법입니다.

예전에는 모뎀연결에 rs232통신을 많이 사용하였으며 최장 1.5m정도로 다소 짧은 통신 거리를 가지고 있습니다.

최근에 나오는 노트북들은 두께,무게를 줄이기 위해서 UART포트를 없애고 있는 추세입니다.

아두이노에서는 기본으로 제공하고 있는 usb포트를 이용해서 UART통신이 가능합니다.

빨간부분이 시리얼통신을 가능하게 해주는 칩입니다.


시리얼 통신 시작하기

1. 우노보드와 pc를 동봉되어있는 usb케이블로 연결합니다.

2. pc에 연결된 usb의 포트번호를 아두이노 ide에서 설정해 줍니다.

3. 아래의 코드를 작성해 줍니다.

void setup()

{

Serial.begin(9600);//시리얼 통신을 보드레이트 9600으로 시작

// Serial.println(“Hellow Arduino”);

}

 

void loop()

{

char read_data;

 

if (Serial.available())//시리얼통신으로 수신된 데이터가 있을때 true

{

read_data = Serial.read();//read_data에 Serial.read()함수로 한글자 불러와 저장

Serial.print(read_data);//read_data를 시리얼로 출력

}

delay(10);

}

설명 : ide의 시리얼통신 창에서 메세지를 입력하면 그메세지가 그대로 ide의 시리얼통신창에 뜨도록 하는 코드입니다.

10ms마다 반복하며 수신된 데이터가 있을때 다시 그데이터를 송신해주는 방식입니다.

4. ide의 시리얼 모니터 실행후 메세지 입력

시리얼 모니터 - 오른쪽위의 돋보기아이콘

5. 시리얼 모니터에 메세지 출력되는지 확인


시리얼 통신으로 LED제어하기

우리는 위에서 시리얼통신이 이상없이 동작하는 것을 확인하였습니다.

그럼 이번에는 시리얼로 아두이노에 명령을 입력했을때 아두이노에서 그 명령에 맞는 동작을 할수 있도록 만들어 보도록 합시다.


1. 회로구성

기본 LED제어 회로와 다른것이 없습니다.

2. 코드 작성

int led1 = 7;

int led2 = 6;

int led1_status = LOW; // LED1 상태

int led2_status = LOW; // LED2 상태

void setup()

{

pinMode(led1, OUTPUT);//핀모드 설정 출력

pinMode(led2, OUTPUT);

digitalWrite(led1, LOW);//핀의 초기값 LOW = LED OFF

digitalWrite(led2, LOW);

Serial.begin(9600);//시리얼 통신 시작

}

void loop()

{

char read_data;

if (Serial.available())

{

read_data = Serial.read();//시리얼통신으로 수신한데이터 read_data에 저장


if( read_data == '1' && led1_status == LOW)//read_data값이 1이고 led1이 off상태일때

{

digitalWrite(led1, HIGH);//led1 on

led1_status = HIGH;

Serial.println("LED1 ON");

}

else if( read_data == '1' && led1_status == HIGH )//led1이 on상태일때

{

digitalWrite(led1, LOW);//led2 on

led1_status = LOW;

Serial.println("LED1 OFF");

}

if( read_data == '2' && led2_status == LOW)

{

digitalWrite(led2, HIGH);

led2_status = HIGH;

Serial.println("LED2 ON");

}

else if( read_data == '2' && led2_status == HIGH )

{

digitalWrite(led2, LOW);

led2_status = LOW;

Serial.println("LED2 OFF");

}

}

delay(10);

}

 


설명 : 시리얼로 메세지를 받아 1일때는 led1에대한 동작을 하고 2일때는 led2에대한 동작을 하도록 하였고 동작정보를 시리얼로 출력하도록 하였다.

이때 led현재상태를 저장하는 변수(led1_status, led2_status)를 만들어 off상태일때는 on하고 on상태일때는 off하도록 설정 하였다.

코드를 업로드 한뒤 시리얼모니터에 1 또는 2를 입력하면 아두이노에 연결된 led가 동작할 것이다.

또한 위와 같이 시리얼로 아두이노가 어떤 동작을 하였는지 출력되는 것을 볼수 있다.


시리얼 통신 복습하기

1. LED를 전 후 좌 우 4방향에 배치 한뒤 숫자키패드의 화살표 키를 이용하여 4개의 LED를 제어하기

위의 코드의 if문만 조금 수정하면 쉽게 성공하실수 있을 것입니다.


오늘은 시리얼 통신에 대해 알아보았습니다. pc와 아두이노 간의 통신이 생각보다 정말 간단하죠.

다음시간에는 아날로그 입출력에 대해 공부해보도록 하겠습니다.


+ Recent posts