소스코드

아래는 소스코드입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드해봅니다.

// 아두이노 서보모터 각도제어 실험

int i,val;
char a[3];
boolean display;
#include <Servo.h>
Servo servo1;

void setup()
{
  Serial.begin(9600);
  servo1.attach(4);//서보모터를 핀4에 연결
}

void loop()
{
  if (Serial.available()){        //시리얼입력이 있으면
    delay(30);          //시리얼입력이 모두 전송되는 시간을 벌기위해 30ms 딜레이
    if (Serial.available() <= 3){ //입력된 데이터가 <=3 인경우
      while (Serial.available()){ //입력된 데이터를 모두 읽어온다
        a[i++] = Serial.read();   //a[]버퍼에 모두 저장
      }
      display = 1;                 //데이터를 모두 읽은 후 표시 플래그를 ON
    }
    else {                         //입력된 데이터가 >3 인 경우
      Serial.flush();             //시리얼버퍼 클리어
    }
  }
  
  if (a[0] == 43 && display){
    val++;
    servo1.write(val);
    Serial.println(val);
    display = 0;                  //표시 플래그 OFF
    Serial.flush();              //시리얼버퍼 클리어
    for (i = 0; i <= 3; i++)      //A[]버퍼 클리어
    {
      a[i] = 0;
    }
    i = 0;                        //i 변수 초기화
  }
  if (a[0] == 45 && display){
    val--;
    servo1.write(val);
    Serial.println(val);
    display = 0;                  //표시 플래그 OFF
    Serial.flush();              //시리얼버퍼 클리어
    for (i = 0; i <= 3; i++)      //A[]버퍼 클리어
    {
      a[i] = 0;
    }
    i = 0;                        //i 변수 초기화
}

//======================== 데이터 검증 ======================
  if (display)    //표시 플래그가 ON 이면 a[]어레이의 값을 표시
  {
    if (!a[2]){   //입력된 값이 두자리이면
      if (!a[1]){ //입력된 값이 한자리이면
         a[2] = a[0];
         a[1] = 48; //48은 ASCII 코드에서 0 에 해당
         a[0] = 48;
      }
      else {   //두자리인 경우
         a[2] = a[1];
         a[1] = a[0];
         a[0] = 48;
      }
    }
//== A[]버퍼의 값을 각도로 변환한 후 서보모터로 전송하고 화면출력 ==
    for (i=0;i<=3;i++){ //char 변수를 int 변수로 변환
      a[i] -= 48;
    }
    val = 100*a[0] + 10*a[1] + a[2];
    servo1.write(val);
    Serial.println(val);
    
    display = 0;                  //표시 플래그 초기화
    Serial.flush();              //시리얼버퍼 초기화
    for (i = 0; i <= 3; i++)      //a[]버퍼 초기화
    {
      a[i] = 0;
    }
    i = 0;                        //i변수 초기화
  }
}

아두이노 IDE에서 시리얼 모니터 창을 열어서 아래와 같이 0~180도의 각도를 입력하면 입력한 위치로 회전함을 알 수 있습니다.