취소

커뮤니티

가이드

서포트

전체

아두이노 기초 버튼으로 서보모터 제어하기

이번에는 버튼을 통해서 서보모터를 제어이다. 간단하게 버튼을 누르면 서보모터의 위치값이 변경되는 것과, 버튼을 누르면 특정 위치로 이동하는 것 두 가지로 나누어 해보자.

회로도

기존 서보모터 배선에서 버튼 배선을 추가 하는 것으로 끝이 난다.

버튼을 통해 서보모터 위치 변경제어

조건 1 > pin에 연결된 버튼 1을 누르면 위치 값 증가조건 2 > pin에 연결된 버튼 2를 누르면 위치 값 감소

#include <Servo.h>   Servo myservo;   int pos=90;   void setup() {   // put your setup code here, to run once:   myservo.attach(6);   pinMode(2, INPUT);   pinMode(3, INPUT);   myservo.write(90);   delay(500); }   void loop() {   // put your main code here, to run repeatedly:   if(digitalRead(2) == LOW) pos ++; // 2번 핀의 버튼이 눌러지면 위치 값 증가   if(digitalRead(3) == LOW) pos --; // 3번 핀의 버튼이 눌러지면 위치 값 감소     if(pos < 0) pos = 0; // 0보다 작아지면 0으로   if(pos > 180) pos = 180; // 180보다 커지면 180으로     myservo.write(pos);   delay(15); }

이 소스코드를 이용 할 경우 양쪽 다 눌러지면 입력 값이 겹쳐져서 제자리에 멈추어 있는다.

버튼을 통해서 서보모터 특정위치로 이동시키기

이번에는 버튼을 누르면 서보모터를 특정 위치로 이동시켜보자. 조건은 아래와 같다.조건 1 > 버튼 1을 누를 경우 서보모터는 180도 지점으로 이동조건 2 > 버튼 2를 누를 경우 서보모터는 0도 지점으로 이동

#include <Servo.h>   Servo myservo;   int pos=90;   void setup() {   // put your setup code here, to run once:   myservo.attach(6);   pinMode(2, INPUT);   pinMode(3, INPUT);   myservo.write(90);   delay(500); }   void loop() {   // put your main code here, to run repeatedly:   if(digitalRead(2) == LOW) myservo.write(180); // 2번 핀의 버튼이 눌러지면 180으로 이동   if(digitalRead(3) == LOW) myservo.write(0); // 3번 핀의 버튼이 눌러지면 0으로 이동   delay(15); }

소스코드에는 정답은 없다. 다양한 생각이 있듯 다양한 방법이 있으며, 그 중 하나일 뿐이다.