BASIC4MCU | 질문게시판 | rgb 색상감지센서 딜레이 관련 질문
페이지 정보
작성자 아두이노초보자 작성일2020-11-04 22:27 조회6,988회 댓글4건본문
tcs3200 rgb색상감지센서를 사용해서 시리얼모니터에 r,g,b 값을 받아오는 코드입니다.
그런데 시리얼모니터에 값이 너무 빠르게 나타나서 보기가 힘듭니다.
제가 아는 상식선에서 delay문구를 넣어줬으나 속도가 변하지 않습니다ㅠㅠ
어디에 delay를 주어야 시리얼모니터에 값이 천천히 나타날까요?
int s0=3,s1=4,s2=5,s3=6;
int out=2;
int flag=0;
byte counter=0;
byte countR=0,countG=0,countB=0;
void setup()
{
Serial.begin(115200);
pinMode(s0,OUTPUT);
pinMode(s1,OUTPUT);
pinMode(s2,OUTPUT);
pinMode(s3,OUTPUT);
}
void TCS()
{
flag=0;
digitalWrite(s1,HIGH);
digitalWrite(s0,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
attachInterrupt(0, ISR_INTO, CHANGE);
timer0_init();
delay(1000);
}
void ISR_INTO()
{
counter++;
}
void timer0_init(void)
{
TCCR2A=0x00;
TCCR2B=0x07; //the clock frequency source 1024 points
TCNT2= 100; //10 ms overflow again
TIMSK2 = 0x01; //allow interrupt
}
int i=0;
ISR(TIMER2_OVF_vect)//the timer 2, 10ms interrupt overflow again. Internal overflow interrupt executive function
{
TCNT2=100;
flag++;
if(flag==1)
{
countR=counter;
Serial.print("red=");
Serial.println(countR,DEC);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
}
else if(flag==2)
{
countG=counter;
Serial.print("green=");
Serial.println(countG,DEC);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
}
else if(flag==3)
{
countB=counter;
Serial.print("blue=");
Serial.println(countB,DEC);
Serial.println("\n");
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
}
else if(flag==4)
{
flag=0;
}
counter=0;
}
void loop()
{
TCS();
while(1);
}
댓글 4
조회수 6,988master님의 댓글
master 작성일
ISR(TIMER2_OVF_vect){ // 10ms
static int cnt=0; // 추가
TCNT2=100;
if(++cnt>=100){ cnt=0; // 추가 // 1초에 1번씩 실행
// 원래 있던 나머지 코드를 여기에 추가
} // 추가
}
아두이노초보자님의 댓글
아두이노초보자
기존의
flag++; 문장은 지우고
if(++cnt>=100)
{ cnt = 0;
나머지 코드
}
하란 말씀이시죠?
아두이노초보자님의 댓글
아두이노초보자
저대로 하니 시리얼 모니터에 아무것도 뜨질 않네요ㅠㅠ
master님의 댓글
master
flag++; 문장 지우라는 글은 한 적이 없습니다.
ISR(TIMER2_OVF_vect){ // 10ms
static int cnt=0; // 추가
TCNT2=100;
if(++cnt>=100){ cnt=0; // 추가 // 1초에 1번씩 실행
flag++;
~~~~~~~~~~~~~~~~~~~~
counter=0;
} // 추가
}