BASIC4MCU | 질문게시판 | 답변 : millis()? 질문드립니다.
페이지 정보
작성자 master 작성일2022-06-13 20:51 조회685회 댓글2건본문
void loop(){
unsigned long currentMillis=millis();
unsigned long currentMillis2=millis();
int dur;
float dis;
digitalWrite(TRIGPIN,HIGH);
digitalWrite(TRIGPIN,LOW);
dur=pulseIn(ECHOPIN,HIGH);
dis=(float)dur*0.017;
Serial.print(dis); Serial.println("cm");
if(dis<10){
if(currentMillis-previousMillis >=interval){ previousMillis=currentMillis;
tone(5,530,250); // <--------------------------- 250ms
}
pickDigit(1); one(); delay(5);
pickDigit(2); zero(); delay(7);
pickDigit(3); zero(); delay(7);
}
else if(dis<20){
if(currentMillis2-previousMillis2 >=interval2){ previousMillis2=currentMillis2;
myservo.write(160); delay(1000); myservo.write(20); // <------- 1000ms
}
pickDigit(2); nine(); delay(5);
pickDigit(3); zero(); delay(5);
}
}
//---------------------
아래처럼 딜레이를 제거하고 그 시간만큼 세그먼트를 표시합니다.
void loop(){
unsigned long currentMillis=millis();
unsigned long currentMillis2=millis();
int dur;
float dis;
digitalWrite(TRIGPIN,HIGH);
digitalWrite(TRIGPIN,LOW);
dur=pulseIn(ECHOPIN,HIGH);
dis=(float)dur*0.017;
Serial.print(dis); Serial.println("cm");
if(dis<10){
if(currentMillis-previousMillis >=interval){ previousMillis=currentMillis;
tone(5,530);
for(int i=0;i<12;i++){ // 20ms*12=240ms
pickDigit(1); one(); delay(6);
pickDigit(2); zero(); delay(7);
pickDigit(3); zero(); delay(7);
}
noTone(5);
}
pickDigit(1); one(); delay(6);
pickDigit(2); zero(); delay(7);
pickDigit(3); zero(); delay(7);
}
else if(dis<20){
if(currentMillis2-previousMillis2 >=interval2){ previousMillis2=currentMillis2;
myservo.write(160);
for(int i=0;i<100;i++){ // 10ms*100=1000ms
pickDigit(2); nine(); delay(5);
pickDigit(3); zero(); delay(5);
}
myservo.write(20);
}
pickDigit(2); nine(); delay(5);
pickDigit(3); zero(); delay(5);
}
}
댓글 2
조회수 685브링미히어님의 댓글
브링미히어 작성일
감사합니다. master님
고쳐주신 코드를 적용해보니 깜빡임은 사라졌지만...
서보가 운동을 마치고 각도에 도달하는 그 잠깐의 순간에만 세그먼트위에 숫자가
90이 아닌 100을 나타냅니다...
시리얼 모니터를 봐도 그 잠깐의 순간에만 물체와의 거리가 0cm대로 찍히고요...
어떻게 해야 할까요...?
master님의 댓글
master
for(int i=0;i<12;i++){ // 20ms*12=240ms
240ms라서 짧다는 말인가요?
for(int i=0;i<120;i++){ // 20ms*120=2400ms
for 루프문 조금만 수정하면 2400ms로 늘어납니다.