시리얼 통신할 때 유용한 팁!

Posted by Doony
2015. 9. 23. 20:25 아두이노 드론 프로젝트

이번엔 여러개의 값을 시리얼 통신으로 입력할 때 도움이 되는, 간단하지만 매우 유용한 팁을 하나 알려드리려고 합니다. C언어를 많이 해보신 분들은 이미 아실 내용인데요. 혹시 모르실 분이 있으실까봐 공유하고자 합니다.


난 포스팅에서 4개의 모터에 시리얼 통신을 통해 PWM 신호를 줬는데요. 


void serialEvent()

{

  while (Serial.available()) {

    r1 = Serial.parseInt();  

    r2 = Serial.parseInt();

    r3 = Serial.parseInt();

    r4 = Serial.parseInt(); 

    r5=Serial.parseInt();

  }

}


이러한 경우처럼 r1,r2,r3,r4,r5에 여러 개의 다른 값 (예를 들어, 4,5,6,7,8) 을 시리얼 통신으로 지정하려면 어떻게 해야할까요?


하나의 값을 입력할 경우에는 아래 그림처럼 시리얼 창에 값 하나를 단순히 넣으면 되었는데요. 굉장히 간단하죠. 



이에 착안해서 시리얼 창에 45678를 치게 되면 r1에만 45678라는 값이 들어가게 됩니다. 이는 저희가 원하는 값이 아닐 뿐더러 모터의 PWM 범위를 벗어나는 말이 되지 않는 값입니다. 그럼 어떻게 해야할까요? 저희도 이걸 모를 땐 처음 많이 고민했었는데요. 저희가 당시 택한 방법은 시리얼 통신을 통해 읽어드린 데이터에서 숫자만 찾는 알고리즘을 짜고 각각의 숫자를 각 변수에 저장해줬습니다. 지금 생각해보면 굉장히 비효율적인 방법인 것 같습니다. 


저희가 지금 사용하는 방법은 바로! 각각의 숫자 사이에 int형 숫자가 아닌 다른 기호를 쓰는겁니다. 엄청 간단하죠? 4!5!6!7!8! 이런 식으로요. 

!가 아닌 다른 기호도 상관 없습니다. 4@5@6@7@8@을 치더라도 각각의 r1,r2,r3,r4,r5 변수에 4,5,6,7,8이라는 변수가 저장되게 됩니다. 이 이유는 parseInt라는 함수가 int형의 데이터만 입력 받기 때문인데요. 그렇기에 4!5!6!7!8!이라는 데이터에서 처음으로 등장하는 int형인 4를 읽게 됩니다. 이후에 등장하는 !는 int형이 아니기에 저장하지 않게되구요. 그리고 다음의 경우도 마찬가지이구요. 유용한 팁이 되셨으면 좋겠습니다! 


오늘은 이만!