반응형

 

계속해서 아두이노(Arduino) 스케치를 이용하여 프로그램을 코딩할 때 사용하는 명령어에 대해 알아보고 있는데요, 처음 아두이노를 시작할 때 접했던 생소한 느낌보다는 조금은 익숙해지고 있을 거라 생각됩니다. 익숙해지려면 계속 사용하고 적용하는 방법이 제일 빠르더라고요 ^^ 그럼 오늘도 지난번 포스팅에 이어 프로그램을 코딩할 때 유용한 몇 가지 명령어를 알아보겠습니다.

 

지난번 알아보았던 pinMode, digitalWrite, if 명령어들은 아래 링크 걸어놓을 테니 참고 부탁드립니다.

 

아두이노(Arduino) 프로그램 코딩 초급 (pinMode, digitalWrite, if 명령어)

지난 시간 스케치로 프로그램을 코딩할 때 자주 사용되는 꼭 필요한 명령어 몇 가지를 알아보았습니다. IT 비전공자가 프로그램 언어를 기본부터 완전히 이해하면서 배우는 것은 쉬운 일은 아닙

it-g-house.tistory.com


 

명령어 기능 사용법
Serial.read 시리얼 통신으로 수신된 데이터를 읽음  변수 = Serial.read();
millis 시간 카운팅 변수 = millis();
char 문자형 값을 처리하기 위한 변수 설정  char 변수;

 

1. Serial.read( );

 

아두이노 Serial.read() 함수는 아두이노가 수신한 데이터를 읽어오는데 사용하는 명령어입니다. 보통 시리얼 통신을 통해 아두이노로 데이터를 송신할 수 있고, 가장 쉽게 시리얼 모니터에서 입력한 text를 아두이노가 수신할 수 있습니다. Serial.read() 명령어를 사용하여 호출 시 1바이트씩만 읽어오며 유효한 데이터가 있을 때까지 반복됩니다.

 

아래와 같이 코드를 입력하고 시리얼 모니터를 실행해 보겠습니다. void setup에서 Serial.begin에 통신속도 9600으로 설정하고, void loop에는 다른 명령어를 설정하지 않았습니다.

 

void setup(){
 Serial.begin(9600);
 }
 
void serialEvent(){
    char Input;
    Input = Serial.read();
    Serial.println(Input);
}

void loop(){
}

 

void serialEvent 안에 Input이라고 char 변수를 설정하고 Input에 시리얼 통신으로 수신된 데이터를 Serial.read()로 읽어 Serial.println 명령어로 Input을 출력하라고 프로그래밍하였습니다. serialEvent는 시리얼통신에 대해서 우선적으로 응답할 때 사용하는데, 명령어가 loop 안에 있지 않아도 시리얼 통신으로 데이터가 수신되거나 하면 자동으로 호출되어 명령어를 실행합니다. 자세한 내용은 다음에 다루도록 하겠습니다.

 

스케치를 통해 아두이노로 업로드 후 시리얼 모니터를 실행시켜 상단 입력창에 text를 입력하면 아래와 같이 입력한 문자의 1바이트씩 출력되는 것을 확인할 수 있습니다. 차례로 a, ok, IT-G-House를 입력하였습니다. 

 

아두이노(Arduino) 프로그램 코딩 초급 II : (Serial.read, millis, char)

 


 

2. millis( );

 

아두이노를 사용하다 보면 타이머나 시간을 설정하는 경우가 있습니다. millis() 명령어는 millisecond (1/1000) 초를 말하며, 아두이노가 동작한 시점으로부터 millisecond 단위로 나타내어 줍니다. 시간을 잴 수 있는 최대 값은 약 49.7일이며, 이 시간이 지나면 0부터 다시 시작합니다.

 

아쉬운 점은 아두이노가 시작하는 시점부터 시간을 잰다는 거라서 간혹 중간에 전원 공급이 끊긴다거나 어떠한 사정으로 리셋되면 아두이노가 재시작되면서 0부터 시작하는 큰 단점과 실제 시각과 맞추기 어렵다는 점입니다. 인터넷이 된다면 실시간과 맞춰 시간을 설정할 수 있지만 시계열 동작이나 측정이 필요한 경우는 보통은 DS1302 RTS 같은 시계 모듈을 사용합니다.

 

아래와 같이 코드를 입력하고 아두이노에 업로드하면 변수 now에 시간이 기록되고 시리얼 모니터에서 "time: 아두이노가 시작한 후 경과한 시간"을 볼 수 있습니다.

 

unsigned long now;

void setup(){
 Serial.begin(9600);
 }
 

void loop(){
  now = millis();
  Serial.print("time: ");
  Serial.println(now);
}

 

아두이노(Arduino) 프로그램 코딩 초급 II : (Serial.read, millis, char)

 


 

3. char

 

char는 character(문자)의 약자로 문자형 변수를 설정할 때 사용합니다. 8비트 정수형 처리 변수로 -128~127까지의 숫자를 취급할 수 있습니다.

 

char는 if 문이나 조건에서 같다면을 표시하는 '=='을 사용할 수 있지만 String은 사용하더라도 원하는 결과와 달라질 수 있기 때문에 필요에 따라 char 또는 String을 적절하게 사용할 수 있습니다. char 사용 예시는 Serial.read() 예시에서 보셨으니 String 예시와 비교하여 살펴보면 좋을 것 같습니다.

 

아래와 같이 코드를 입력하고 아두이노에 업로드한 후 시리얼 모니터에 a, ok, IT-G-House를 입력하였습니다.

void setup(){
 Serial.begin(9600);
 }
 
void serialEvent(){
    String Input;
    Input = Serial.readString();
    Serial.println(Input);
}

void loop(){
  
}

 

아두이노(Arduino) 프로그램 코딩 초급 II : (Serial.read, millis, char)

 

char로 변수를 입력했을 때와 다르게 1바이트씩 출력되는 게 아니라 입력한 그대로 출력되는 것을 볼 수 있습니다.

 


 

오늘은 아두이노(Arduino) 프로그램 코딩에 필요한 'Serial.read()', 'millis()', 'char'에 대해 알아보았습니다. 이런 명령어를 통해 시간제어를 한다던지 시리얼 통신으로 수신된 데이터를 신호를 통해 제어를 하는 등의 프로그램을 코딩할 수 있습니다. 최근 진행 중인 실내 식물 재배기 프로젝트를 예시로 응용 부분에서 더 자세하게 다루어 보겠습니다.

 

다음번 포스팅에도 더 쓰임이 좋은 명령어를 소개드리겠습니다.

긴 글 읽어 주셔서 감사합니다. 질문이나 추가적으로 필요하신 내용 있으면 언제든지 댓글로 남겨주세요~ ^^

 

 

반응형

+ Recent posts