BASIC4MCU | 질문게시판 | w.a.s.d 를 사용하여 서보모터제어
페이지 정보
작성자 용레기 작성일2020-11-18 17:59 조회14,462회 댓글2건본문
#include <Servo.h> //헤더파일 포함Servo servo1; //servo1 변수 선언Servo servo2; //servo2 변수 선언int motor1 = 3; //motor1을 입출력 3번 핀에 연결int motor2 = 5; //motor2을 입출력 5번 핀에 연결int angle1 = 90; //초기 각도값 설정int angle2 = 90; //초기 각도값 설정void setup() {servo1.attach(motor1); //servo1에 입출력 3번 핀을 지정servo2.attach(motor2); //servo2에 입출력 5번 핀을 지정Serial.begin(9600); //시리얼 모니터 사용Serial.println("Enter the w,a,s,d ");}void loop() {if(Serial.available()) //시리얼 통신이 가능할 경우{char input = Serial.read(); //시리얼 모니터 입력 값을 읽어옴if(input =='w') //입력값이 W일 경우{Serial.print("+30");for(int i = 0; i <30; i++) // 30번 반복{angle1 = angle1 + 1; // angle1의 값에 1씩 30번을 더함if(angle1 >=180) // angle1이 180보다 커지거나 같아질 경우angle1 = 180; // angle1을 180으로 고정servo1.write(angle1); // servo1을 angle1 값에 맞추어 동작delay(10);}Serial.print("\t\t");Serial.println(angle1);}else if(input =='a') //입력값이 a일 경우{Serial.print("+30");for(int j = 0; j <30; j++){angle2 = angle2 + 1;if(angle2 >=180)angle2 = 180;servo2.write(angle2);delay(10);}Serial.print("\t\t");Serial.println(angle2);}else if(input == 's') //입력값이 s일 경우{Serial.print("\t-30\t");for(int i = 0; i <30; i++) // 30번 반복{angle1 = angle1 -1; // angle1의 값에 1씩 30번을 빼기if(angle1 <= 0) // angle1이 0보다 작아지거나 같을 경우angle1 = 0; // angle1을 0으로 고정servo1.write(angle1); // servo1을 angle 값에 맞추어 동작delay(10);}Serial.println(angle1);}else if(input == 'd') //입력값이 d일 경우{Serial.print("\t-30\t");for(int j = 0; j <30; j++){angle2 = angle2 -1;if(angle2 <= 0)angle2 = 0;servo2.write(angle2);delay(10);}Serial.println(angle2);}}}--------------------------------------------------------------------------------------------질문드립니다.위의 코딩은 w,s를 사용하여 서보모터1번을 30도 회전/역회전a,d를 사용하여 서보모터2번을 30도 회전/역회전 하는 코딩입니다.q.e를 추가로 사용하여 서보모터3번을 30도 회전/역회전하고싶은데 계속해서 따라해도 오류가 발생합니다.------------------------------------------------결론 기존 wasd를 사용하여 서보모터2개를 제어q.e 를 사용하여 서보모터3개를 제어하고싶습니다. 도움부탁드립니다.
댓글 2
조회수 14,462master님의 댓글
master 작성일
//
#include <Servo.h> //헤더파일 포함
//
Servo servo1;
Servo servo2;
Servo servo3;
//
int motor1=3,motor2=5,motor2=6;
//
int angle1=90,angle2=90,angle3=90;
//
void setup() {
servo1.attach(motor1);
servo2.attach(motor2);
servo3.attach(motor3);
Serial.begin(9600);
Serial.println("Enter the w,a,s,d,q,e");
}
//
void loop() {
if(Serial.available()){
char input=Serial.read();
if(input=='w'){ Serial.print("w1+30");
for(int i=0; i <30; i++){ if(++angle1>180)angle1=180; servo1.write(angle1); delay(10); }
Serial.println(angle1);
}
else if(input=='s'){ Serial.print("s1-30");
for(int i=0; i <30; i++){ if(--angle1<0)angle1=0; servo1.write(angle1); delay(10); }
Serial.println(angle1);
}
else if(input=='a'){ Serial.print("a2+30");
for(int j=0; j <30; j++){ if(++angle2>180)angle2=180; servo2.write(angle2); delay(10); }
Serial.println(angle2);
}
else if(input=='d'){ Serial.print("d2-30");
for(int j=0;j<30;j++){ if(--angle2<0)angle2=0; servo2.write(angle2); delay(10); }
Serial.println(angle2);
}
else if(input=='q'){ Serial.print("q3+30");
for(int j=0; j <30; j++){ if(++angle3>180)angle3=180; servo3.write(angle3); delay(10); }
Serial.println(angle3);
}
else if(input=='e'){ Serial.print("e3-30");
for(int j=0;j<30;j++){ if(--angle3<0)angle3=0; servo3.write(angle3); delay(10); }
Serial.println(angle3);
}
}
}
용레기님의 댓글
용레기
항상 감사함을 마음속 깊이 느끼고 있습니다. master님 건강하세요