BASIC4MCU | 질문게시판 | 조도센서에 millis()로 특정부분 반복가능한가요?
페이지 정보
작성자 그릇 작성일2020-12-29 22:59 조회7,531회 댓글2건본문
millis()함수에 조도센서로 on off 제어하고
on일 때 (off되기 전까지) led가 반복해서 불빛이 났으면 좋겠습니다. (led 2,3,4,5가 순차 점등 후 순차점멸 -> 반복)
아래 코드로는 if (cdsValue > 930)에서 3개이상 제어가 불가능합니다 ㅠ
else if는 당연히 안되더라구요
해결방법이 있으시다면 부탁드립니다
감사합니다
#define DELAY1_TICKS 700
#define DELAY2_TICKS 1000
unsigned long int millis_ticks1;
unsigned long int millis_ticks2;
unsigned long int millis_value;
char led1_state = 0;
char led2_state = 0;
int cds = A0;
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
millis_value = millis();
millis_ticks1 = millis_value;
millis_ticks2 = millis_value;
}
void loop()
{
int cdsValue = analogRead(cds);
millis_value = millis();
// (700) 간격 동작 //어두울 때
if (cdsValue > 930) {
if ((millis_ticks1 + DELAY1_TICKS) <= millis_value)
{
millis_ticks1 = millis_value;
if (led1_state == 1)
{
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
led1_state = 0;
}
else
{
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
led1_state = 1;
}
}
}
// 1초 간격 동작 //밝을 때
if (cdsValue < 930)
if ((millis_ticks2 + DELAY2_TICKS) <= millis_value)
{
millis_ticks2 = millis_value;
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}
}
댓글 2
조회수 7,531master님의 댓글
master 작성일
int cds=A0;
//
unsigned long t1,t;
int cnt=0;
//
void setup(){
pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT);
t=t1=millis();
}
//
void off(){ digitalWrite(2,0); digitalWrite(3,0); digitalWrite(4,0); digitalWrite(5,0); }
//
void loop(){
int cdsValue=analogRead(cds);
t=millis();
//
if(cdsValue>930){ //어두울 때
if(t-t1>=700){ t1=t;
off();
switch(cnt){
case 0: digitalWrite(2,1); break;
case 1: digitalWrite(3,1); break;
case 2: digitalWrite(4,1); break;
case 3: digitalWrite(5,1); break;
}
if(++cnt>3)cnt=0;
}
}
else{ t1=t; off(); } // if(cdsValue<930) //밝을 때
}
그릇님의 댓글
그릇
답변 정말 감사합니다
덕분에 많이 배워갑니다