BASIC4MCU | 질문게시판 | 아두이노 코딩수정
페이지 정보
작성자 dabdab 작성일2018-09-30 19:29 조회7,565회 댓글0건본문
태양빛을 따라서 서보모터를 회전시키려고 하는데
저는 서보모터 1개와 조도센서 3개만 사용하려고 합니다.
코드 수정하려고 하는데 어떤식으로 바꿔야 할지 몰라서 여쭤봅니다.
가로 축으로 회전 하게끔 하려고 하는데 어떻게 바꿔야 하나요?
/*
이 소스코드는 kocoafab에서 작성하였습니다.
소스코드 배포시에는 출처를 남겨주시기 바랍니다.
E mail : contact@kocoa.or.kr
*/
#include <Servo.h> // 서보 라이브러리를 불러옵니다.
Servo horizontal; //가로축 서보를 설정합니다.
int servoh = 90; // 가로축 서보의 기본값은 90으로 설정합니다.
Servo vertical; // 세로축 서보를 설정합니다.
int servov = 90; // 세로축 서보의 기본값은 90으로 설정합니다.
// 조도센서를 연결합니다.
// 조도센서의 이름 = 아날로그 핀번호;
int ldrlt = 0; //LDR 왼쪽 위
int ldrrt = 1; //LDR 오른쪽 위
int ldrld = 2; //LDR 왼쪽 아래
int ldrrd = 3; //ldr 오른쪽 아래
void setup() {
Serial.begin(9600);
// 서보를 연결합니다.
// name.attacht(pin);
horizontal.attach(9);
vertical.attach(10);
}
void loop() {
int lt = analogRead(ldrlt); // 왼쪽 탑
int rt = analogRead(ldrrt); // 오른쪽 탑
int ld = analogRead(ldrld); // 왼쪽 다운
int rd = analogRead(ldrrd); // 오른쪽 다운
int dtime = analogRead(4) / 20; //속도는 아날로그 4번 가변저항값을 읽고 20으로 나누어 줍니다.
int tol = analogRead(5) / 4; //반경은 아날로그 5번 가변저항값을 읽고 4로 나누어 줍니다.
int avt = (lt + rt) / 2; // 위쪽의 평균값을 구합니다.
int avd = (ld + rd) / 2; // 아래쪽의 평균값을 구합니다.
int avl = (lt + ld) / 2; // 왼쪽의 평균값을 구합니다.
int avr = (rt + rd) / 2; // 오른쪽의 평균값을 구합니다.
int dvert = avt - avd; // 위쪽과 아래쪽의 차이를 구합니다.
int dhoriz = avl - avr;// 왼쪽과 오른쪽의 차이를 구합니다.
if (-1 * tol > dvert || dvert > tol) { // check if the diffirence is in the tolerance else change vertical angle
if (avt < avd) {
servov = ++servov;
if (servov > 180) {
servov = 180;
}
}
else if (avt > avd) {
servov = --servov;
if (servov < 0) {
servov = 0;
}
}
vertical.write(servov);
}
if (-1 * tol > dhoriz || dhoriz > tol) {// check if the diffirence is in the tolerance else change horizontal angle
if (avl > avr) {
servoh = --servoh;
if (servoh < 0) {
servoh = 0;
}
}
else if (avl < avr) {
servoh = ++servoh;
if (servoh > 180) {
servoh = 180;
}
}
else if (avl == avr) {
// nothing
}
horizontal.write(servoh);
}
delay(dtime);
}
댓글 0
조회수 7,565등록된 댓글이 없습니다.