정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

서보모터 제어 질문이요!!!
jessi | 2015-11-18

안녕하세요~ 블루투스로 조종하는 서보모터 제어에 대해 궁금한 것이 있습니다.

제가 원하는 서보모터 제어는

예를 들어, 오른쪽 버튼을 누를때마다 10도씩 계속 움직이는 제어를 하고 싶습니다.

보통 인터넷에 오픈되어 있는 소스는 블루투스 통해 주어지는 값에 지정된 각도로 모터가 움직인 뒤 더이상 움직이지가 않더라고요....

제가 원하는 제어를 하기 위해서는 어떤 식으로 코딩을 하여야 할까요??

아래는 코코아팹에서 본 서보모터 제어 소스 입니다.

 

#include  <SoftwareSerial.h>
#include  <Servo.h>

SoftwareSerial BTSerial(6, 7);
byte buffer[1024];
int bufferPosition;

Servo servo;

int motorAngle = 0;
int servoVal = 0;
int servoAngle = 90;

void setup () {
  servo.attach(10);

  BTSerial.begin(9600);
  Serial.begin(9600);
  bufferPosition = 0;
}

void loop () {
  if (BTSerial.available()) {
    byte data = BTSerial.read();
    buffer[bufferPosition++] = data;

    Serial.println(data);


    switch(data){     
    case '1':
      angleWrite(45);
      break;

    case '2':
      angleWrite(180);
      break;

    case '\n':
      bufferPosition = 0;
      break;
    }
  }
}

void angleSet(boolean flag){
  if(buffer[0] != 10){
    if (bufferPosition == 4) {
      motorAngle = (buffer[0]-48)*100 + (buffer[1]-48)*10 + (buffer[2]-48);
    }
    else if (bufferPosition == 3) {
      motorAngle = (buffer[0]-48)*10 + (buffer[1]-48);
    }
    else if (bufferPosition == 2) {
      motorAngle = buffer[0] - 48;
    }

    if(flag){
      motorAngle *= -1;
    }

    Serial.print("motorAngle = ");
    Serial.println(motorAngle);

    motorAngle = map(motorAngle, 150, -150, 30, 150);
    servo.write(motorAngle);
  }
}

void angleWrite(int angle){
  servo.write(angle);
}

이전글   |    밑에 DC랑 서보모터 블루투스로 조정하려고 글올렸었는데요... 2015-11-18
다음글   |    아두이노 블루투스 앱인벤터 센서값 송수신 코드 질문드립니다!... 2015-11-19