본문 바로가기

Arduino

[Arduino] 서보모터 실습: 시리얼 통신으로 서보모터 제어하기 (오류)

반응형

시리얼 통신으로 서보모터 제어하기 (오류)


(준비물)

아두이노 우노(Arduino Uno)

USB 케이블

서보모터

▲ 아두이노 우노, USB 케이블, 서보모터


(회로 연결)


#include <Servo.h>

Servo myServo;
int servo = 9;  // 서보모터의 ~PWM 아두이노 핀 번호를 선언한다.

void setup(){
  myServo.attach(servo);
  Serial.begin(115200);
  Serial.println("Strat!");
}

void loop(){	// "Wrong Number" 문자열이 계속해서 출력되는 오류 발생
    char data = Serial.read();
  
    if(data == '1'){
      myServo.writeMicroseconds(500);
    }
    else if(data == '2'){
      myServo.writeMicroseconds(1000);
    }
    else if(data == '3'){
      myServo.writeMicroseconds(1500);
    }
    else if(data == '4'){
      myServo.writeMicroseconds(2000);
    }
    else if(data == '5'){
      myServo.writeMicroseconds(2500);
    }
    else{
      Serial.println("Wrong Number");
    }
}

 


오류 1: if 조건문을 사용하여 '1', '2', '3', '4', '5'까지의 문자로 서보모터를 제어할 수 있도록 하였다. 하지만 마지막 "else"에 '아무것도 입력되지 않을 때'의 조건이 걸리면서 시리얼 모니터에는 항상 "Wrong Number"가 출력된다.

※ Serial.available() 함수는 시리얼 포트에서 읽은 바이트 수를 반환해 주는 함수이다. 즉 시리얼 통신으로 데이터가 들어오면 버퍼에 저장하고, 버퍼 안에 저장된 바이트 수를 반환해 준다. 따라서 아래와 같이 if 조건문으로 사용하게 된다.

 


오류 2: if 조건문을 사용하여 '1', '2', '3', '4', '5'까지의 문자로 서보모터를 제어할 수 있도록 하였다. 따라서 문자가 아닌 문자열에 조건문의 문자 데이터가 포함되면 동일하게 서보모터를 제어할 수 있다. 즉, '10'과 같은 문자열을 입력하게 되면 '1' 이 포함되어 있어 '1'에 해당하는 제어 값으로 서보모터를 제어하게 된다.

반응형