정보나눔

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

toggle 스위치를 이용해서 servomotor를 +1 움직이다 180도되면 다시 -1하는걸 움직일려고 합니다.
한걸음 | 2019-01-24
 

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

  아두이노 uno / servo motor /toggle swithch

 

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

  

 아두이노 스케치

 

3. 사용한 센서 모델명

 

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

 

 

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

  

#include <Servo.h> 

int motor = 6;    // 서보모터 핀번호
int value;        // 원형 토글스위치의 값
int angle = 0;    // 서보모터 각도 
Servo servo; 

void setup() {
  Serial.begin(9600);  //시리얼 통신, 속도는 9600
  servo.attach(motor);  //모터 시작
  pinMode(motor,OUTPUT);  //모터 출력
}

void loop() {
  value = digitalRead(A0);  // 토글 스위치의 값 읽기 
  //Serial.println(value);
  
  if(value == HIGH) {   // 토글 스위치의 값이 on 일 때
    if(angle > 180){    // 서보모터의 각도 값이 180도 이상으로 올라갈 때
      delay(10);        // 180에서 더이상 증가하지 못하도록 delay 
    }else{        // 서보모터의 각도 값이 180 이하일때 
    angle++;      // 각도 값 1씩 증가
    servo. write(angle);  // 서모모터 돌려주기
    }
  }else{        // 토글 스위치의 값이 off 일 때
    if(angle < 0){    // 서보모터의 각도 값이 0도 이하로 내려갈 때
      delay(10);      // 0도에서 더이상 감소하지 못하도록 delay 넣어주기
    }else{      // 서모모터의 각도 값이 0 이상일 때
      angle--;  // 각도 값 1씩 감소
      servo.write(angle); // 서보모터 돌려주기
    }
  }
  //Serial.println(angle);
 delay(10);   // 급격한 서보모터의 움직임을 제한하기 위한 delay값
}

 

6. 문제점 및 에러 내용

 https://m.blog.naver.com/PostView.nhn?blogId=eduino&logNo=221230081562&proxyReferer=https%3A%2F%2Fwww.google.com%2F

최근 아두이노 공부중인 학생입니다.

다른분들께서 수행하신 작업을 따라하면서 공부중인데

위에 코드/네이버블로그 나온대로  따라서

toggle switch를 이용해 on/off 왔다갔다 하면서 한번 on 하면 servomotor가 +1증가 ,여러번 on/off하다가 마지막으로 180도 되면 멈췄다가

다시 스위치를 on하면 -1감소 하면서 다시 0으로 가는걸 수행할려는데 수행이 안됩니다..

 

 

1주일동안 시간날때마다 if /else if 사용해가며 고쳐봤는데 안되서 이렇게 올려보게 됬습니다...

제발 알려주세요... 

프로필사진

kocoafab 2019-01-28 17:55:45

안녕하세요. 한걸음님

 

현재 올려주신 코드에서는 스위치가 온일 때는 각도가 + 방향으로 움직이고, 스위치가 오프일 때는 각도가 - 방향으로 움직이게 되어있습니다.

 

원하시는 동작을 하기 위해서는 스위치가 온일 때 각도가 180도로 움직이다가 180도가 넘어가면 반대방향으로 움직이도록 바꿔주셔야합니다.

 

아래 코드한번 참고해보시고 어느부분이 바뀌었는지 직접 확인해보시면 좋을 것 같습니다.

 

정확하게 테스트를 한 코드는 아니오니 직접 테스트하면서 어떻게 동작을 제어하는지 확인해보시고 문제가 있으시면 직접 수정해보세요.

 

#include <Servo.h>

int motor = 6;    // 서보모터 핀번호
int value;        // 원형 토글스위치의 값
int angle = 0;    // 서보모터 각도
Servo servo;

boolean flag = HIGH;

void setup() {
  Serial.begin(9600);  //시리얼 통신, 속도는 9600
  servo.attach(motor);  //모터 시작
  pinMode(motor, OUTPUT); //모터 출력
}

void loop() {
  value = digitalRead(A0);  // 토글 스위치의 값 읽기
  //Serial.println(value);

  if (value == HIGH) {  // 토글 스위치의 값이 on 일 때
    if (flag == HIGH) {   // 서보모터 움직임이 +일 때
      if (angle > 180) {  // 서보모터의 각도 값이 180도 이상으로 올라갈 때
        delay(10);        // 180에서 더이상 증가하지 못하도록 delay
        flag = LOW;   // 서보모터 움직임을 -로 바꿔줍니다.
      } else {       // 서보모터의 각도 값이 180 이하일때
        angle++;      // 각도 값 1씩 증가
        servo.write(angle);  // 서모모터 돌려주기
      }
    }
    if (flag == LOW) { // 서보모터 움직임이 -일 때
      if (angle < 0) {  // 서보모터의 각도 값이 180도 이상으로 올라갈 때
        delay(10);        // 180에서 더이상 증가하지 못하도록 delay
        flag = HIGH;  // 서보모터 움직임을 +로 바꿔줍니다.
      } else {       // 서보모터의 각도 값이 180 이하일때
        angle--;      // 각도 값 1씩 증가
        servo.write(angle);  // 서모모터 돌려주기
      }
    }
  } else {       // 토글 스위치의 값이 off 일 때는 아무동작 하지 않습니다.
   
  }
  //Serial.println(angle);
  delay(10);   // 급격한 서보모터의 움직임을 제한하기 위한 delay값
}

 

 

이전글   |    앱인벤터 rfid 2019-01-24
다음글   |    앱인벤터 아두이노 수치값 통신이 안되는것 같습니다. ... 2019-01-31