BASIC4MCU | 질문게시판 | 질문드립니다
페이지 정보
작성자 아두이놐 작성일2018-12-03 12:50 조회6,622회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=6202
본문
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
//
int s0=3,s1=4,s2=5,s3=6;
int out=2;
int led_r=9,led_g=10,led_b=11;
int flag=0;
int s8=8;
byte counter=0;
byte countR=0,countG=0,countB=0;
char okflag=0;
//
void TCS(){
flag=0;
digitalWrite(s1,HIGH); digitalWrite(s0,HIGH);
digitalWrite(s2,LOW); digitalWrite(s3,LOW);
digitalWrite(s8,HIGH);
attachInterrupt(0,ISR_INTO,CHANGE);
timer0_init();
}
//
void ISR_INTO(){ counter++; }
//
void timer0_init(void){
TCCR2A=0x00;
TCCR2B=0x07;
TCNT2=100;
TIMSK2=0x01;
}
//
ISR(TIMER2_OVF_vect){ // 10ms
TCNT2=100;
flag++;
if(flag==1){
countR=counter;
if(countR>120){ digitalWrite(led_r,HIGH); }
else { digitalWrite(led_r,LOW); }
digitalWrite(s2,HIGH); digitalWrite(s3,HIGH);
}
else if(flag==2){
countG=counter;
if(countG>110){ digitalWrite(led_g,HIGH); }
else { digitalWrite(led_g,LOW); }
digitalWrite(s2,LOW); digitalWrite(s3,HIGH);
}
else if(flag==3){
countB=counter;
if(countB>115){ digitalWrite(led_b,HIGH); }
else { digitalWrite(led_b,LOW); }
digitalWrite(s2,LOW); digitalWrite(s3,LOW);
flag=0; okflag=1;
}
counter=0;
}
//
void setup(){
pinMode(s0,OUTPUT); pinMode(s1,OUTPUT);
pinMode(s2,OUTPUT); pinMode(s3,OUTPUT);
pinMode(led_r,OUTPUT); pinMode(led_g,OUTPUT); pinMode(led_b,OUTPUT);
lcd.init();
lcd.backlight();
TCS();
}
//
void loop(){
if(okflag){ okflag=0;
lcd.setCursor(0,0);
if(countR>120){ lcd.print("R"); }
else { lcd.print(" "); }
//
lcd.setCursor(1,0);
if(countG>110){ lcd.print("G"); }
else { lcd.print(" "); }
//
lcd.setCursor(2,0);
if(countB>115){ lcd.print("B"); }
else { lcd.print(" "); }
}
}
이렇게 했는데 업로딩은 되고 초록색과 파란색의 색깔은 인지해서 LCD에 제대로 출력이 되는데 빨간색은 LCD에 R만 출력이 되어야하는데 RGB 모두 출력이 됩니다 ㅜㅜ
댓글 1
조회수 6,622master님의 댓글
master 작성일R일 때는 G와 B까지 검출되나봅니다.