BASIC4MCU | 질문게시판 | 서보모터 제어 질문입니다
페이지 정보
작성자 Tell 작성일2022-12-12 16:27 조회332회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=22177
본문
cds값이 500이상일때 서보모터가 180도에서 30도씩 감소하며 0도로 돌아가야 합니다. 이때 0도가 되면 다시180도로 돌아가서 30도씩 감소하며 작동해야 되는데 0도가 되면 10도씩 증가해서 180도로 되버립니다. 이 문제을 어떻게 해결해야 하나요?
코드입니다
#include<Servo.h>
Servo myservo;
int cds=A2;
int LED = 3;
int seonsor = 13;
int flag=0;
void setup(){
myservo.attach(9);
myservo.write(0);
pinMode(LED, OUTPUT);
pinMode(13,INPUT);
Serial.begin(9600);
}
void loop(){
int cdsval=analogRead(cds);
Serial.println(cdsval);
if(500<=cdsval&& cdsval<=1023)
{ flag=0;
for(int angle =180; angle>0; angle-=30){
myservo.write(angle);
delay(200);
if(digitalRead(13)==HIGH)break;
}
myservo.write(0);
}
if(0<=cdsval<=500)
{ if(flag==0)
flag=1;
for(int a=0;a<=180; a+=10)
{ myservo.write(a);
delay(200);
if(digitalRead(13)==HIGH)break;
}
myservo.write(0);
}
delay(1000);
}
댓글 1
조회수 332master님의 댓글
master 작성일
#include<Servo.h>
Servo myservo;
//
int cds=A2,LED=3,seonsor=13;
//
void setup(){
myservo.attach(9); myservo.write(0);
pinMode(LED, OUTPUT);
pinMode(13,INPUT);
Serial.begin(9600);
}
//
void loop(){
int cdsval=analogRead(cds); Serial.println(cdsval);
//
if(cdsval>=500){
for(int angle=180;angle>=0; angle-=30){ myservo.write(angle); delay(200); if(digitalRead(13))break; }
}
else{
for(int a=0;a<=180;a+=10){ myservo.write(a); delay(200); if(digitalRead(13))break; }
}
}