정보나눔

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

servo 예제) 모터 작동 및 출력 결과 오류 관련 질문
컴솜솜 | 2020-04-30

1. 프로젝트 사용한 보드 종류 

아두이노 UNO

 

2. 사용한 개발 프로그램명

sketch

  

3. 사용한 센서 모델명

  (센서 모델명을 자세하게 적어 주실 경우 더 정확하게 확인할 수 있습니다.)

 Tower Pro tm/Micro Servo 9g/SG 90

 

4. 연결한 회로 설명 (또는 이미지)

 5V, GND, 9번 포트 사용했습니다.

 

5. 소스코드 (주석 필수)

  (원하는 기능의 코드를 전부 작성해 드리긴 어렵습니다. 기초부터 차근차근 공부해보면서 코드를 만들어 보세요.)

 

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

void setup() {
  myservo.attach(9);  // 데이터 번호
  Serial.begin(9600); //초당 9600 비트의 속도로 통신 설정
  Serial.println("Servo Motor Version 1 ");
}

void loop() {
  String szTemp = ""; // 입력값 받을 변수
  if (Serial.available()) { // 시리얼 창에 입력받은 값이 존재할 경우 실행
    for (int i=0; i < Serial.available(); i++){ // 입력받은 값이 길이만큼 반복문 실행
      char cRead = Serial.read(); // 입력값을 한 바이트씩 읽는다
      szTemp += cRead;
    }
    Serial.print(szTemp); // 삭제할 주석 : szTemp 잘 들어갔는지 확인
    int input = szTemp.toInt(); // szTemp int로 타입변형
     myservo.write(input); // servo 객체에 정보 올림
     Serial.print("Move to: "); Serial.println(input); // input 제대로 들어갔는지 확인
  }
}

 

 

6. 문제점 및 에러 내용

  (소스코드 문제일 경우 에러 내용도 같이 올려주세요.)

 

<현재 시리얼 모니터 결과값 : 100을 입력한 결과>

Servo Motor Version 1 
1Move to: 1
0Move to: 0
0Move to: 0

Move to: 0

 

<원하는 결과값 : 100을 입력한 결과>

// 삭제할 주석을 삭제한경우

Servo Motor Version 1 
Move to: 100

 

<문제점>

1) 100을 입력한 결과 100으로 출력되지 않고 한칸한칸 따로 출력됨

2) servo 객체에 올린 경우, 실행이 1회만 적용됨

// 추가적으로 여러 케이스(예:50, 90)을 입력할 경우 servo 모터에 반응 없음

3) 100을 입력했는데 마지막에 0이 한번더 출력됨

 

<궁금한 점>

이 부분 : Serial.print(szTemp); // 삭제할 주석 : szTemp 잘 들어갔는지 확인

1) szTemp에 char을 한자씩 잘 넣어줬는데 왜 100이 출력이 안되고 한자씩 출력되는지

2) 마지막 추가적으로 출력되는 0의 출처

3) loop로 무한 반복되는데 입력에 대한 작동이 왜 1번만 이루어지는지

이전글   |    아두이노 gps와 블루투스 연결 2020-04-27
다음글   |    exit status 1 보드 Arduino Uno 컴파일 에러 / 이유를 모르겠습니다 ... 2020-05-01