BASIC4MCU | 질문게시판 | 아두이노 서보모터 무한회전 문제 해결을 어떻게 해야할까요
페이지 정보
작성자 GinGer 작성일2022-05-27 19:28 조회626회 댓글0건본문
#include <Servo.h>
#include <SoftwareSerial.h>
Servo servo;
int motor=9,pin=8;
int Tx=2,Rx=3;
int rain = A0; // 빗물 감지 센서 pin번호
char output;
int angle=0;
int RainSenReading=0;
unsigned long duration,starttime, sampletime_ms=30000,lowpulseoccupancy=0;
float ratio=0,concentration=0,ugm3=0;
SoftwareSerial mySerial(Tx,Rx);
String str=" ";
void setup() {
pinMode(motor,OUTPUT);
servo.attach(motor);
Serial.begin(9600);
mySerial.begin(9600);
starttime=millis();
}
void loop(){
duration=pulseIn(pin,LOW);
lowpulseoccupancy=lowpulseoccupancy+duration;
if((millis()-starttime)>sampletime_ms){
RainSenReading = analogRead(rain); // 센서로 아날로그값 ~1023을 입력받음
ratio=lowpulseoccupancy/(sampletime_ms*10.0);
concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62;
ugm3=concentration*100/13000;
lowpulseoccupancy=0;
if(ugm3<30){
delay(5);
if(RainSenReading <= 500){ // 빗물 센서로 받은 아날로그 값이 500 이하이면 비가 오는것으로 간주
while(angle>0){angle--;servo.write(angle);delay(15);} //닫음
}else{ // 500 이상이면
while(angle<180){angle++; servo.write(angle);delay(15);}//열림
}
}else{while(angle>0){angle--;servo.write(angle);delay(15);}}
mySerial.print(ugm3);
mySerial.print(",");
mySerial.print(angle);
mySerial.print(",");
mySerial.print(RainSenReading);
if(Serial.available()){output=Serial.read();}
starttime=millis();
}
}
코드는 다음과 같이 작성을 하였습니다
이게 작동을 하기는 합니다
한두번 정도는 제대로 작동을 하는데
그 이후로는 모터가 무한히 회전을 하는 오류가 발생을 합니다
어디에서 문제가 발생하는지, 해결을 어떻게 해야하는지 알고 싶습니다
댓글 0
조회수 626등록된 댓글이 없습니다.