테크 지식
[커뮤니티] 아두이노 기초 - 버튼으로 서보모터 제어하기
아두이노 기초 버튼으로 서보모터 제어하기
이번에는 버튼을 통해서 서보모터를 제어이다. 간단하게 버튼을 누르면 서보모터의 위치값이 변경되는 것과, 버튼을 누르면 특정 위치로 이동하는 것 두 가지로 나누어 해보자.
회로도
기존 서보모터 배선에서 버튼 배선을 추가 하는 것으로 끝이 난다.
버튼을 통해 서보모터 위치 변경제어
조건 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); }
소스코드에는 정답은 없다. 다양한 생각이 있듯 다양한 방법이 있으며, 그 중 하나일 뿐이다.