BASIC4MCU | 질문게시판 | 아두이노 통신이용할려고 합니다.
페이지 정보
작성자 앙기모딱 작성일2018-12-01 22:27 조회3,918회 댓글0건본문
아두이노 컬러센서 이용해서 컬러센서가 인식한 색의 LED를 켜고 LCD에 어떤색인지 나오게 하려고 합니다.
이걸 통신을 이용해서 구현하려고합니다.
어떻게 해야할지 좀 조언좀 부탁합니다.
통신에 마스터부분과 슬레이브 부분이 있잔아요.
컬러센서가 꽂힌 부분을 마스터로하고 LED와 LCD가 꽂힌 부분이 슬레이브 부분으로 하려고 합니다.
그런데 통신을 이용해서 코딩을 어떻게 해야할지 잘 몰라서 좀 알려주시면 감사하겠습니다.
회로사진도 가능하시면 부탁드립니다.
컬러센서에서 인식해서 보낸 색을 통신을 이용해서 LED와 I2C LCD판에 보내는 것입니다
첫번째 코드가 컬러센서 코드입니다.
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();
}
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);
}컬러센서와 LED를 합친 코드 입니다
int s0=3,s1=4,s2=5,s3=6;
int out=2;
int led_r = 9, led_b = 10, led_g = 11;
int flag=0;
int s8 = 8;
byte counter=0;
byte countR=0,countG=0,countB=0;
void setup()
{
Serial.begin(9600);
pinMode(s0,OUTPUT);
pinMode(s1,OUTPUT);
pinMode(s2,OUTPUT);
pinMode(s3,OUTPUT);
pinMode(s8,INPUT);
pinMode(led_r, OUTPUT);
pinMode(led_g, OUTPUT);
pinMode(led_b, OUTPUT);
}
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; //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;
digitalWrite(led_r, (countR > 120) ? HIGH : LOW);
//Serial.println(countR,DEC);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
}
else if(flag==2)
{
countG=counter;
digitalWrite(led_g, (countG > 110) ? HIGH : LOW) ;
//Serial.println(countG,DEC);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
}
else if(flag==3)
{
countB=counter;
digitalWrite(led_b, (countB > 115) ? HIGH : LOW) ;
//Serial.println(countB,DEC);
//Serial.println("\n");
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
flag=0;
}
// else if(flag==4)
// {
// flag=0;
// }
counter=0;
}
void loop()
{
TCS();
while(1);
}
댓글 0
조회수 3,918등록된 댓글이 없습니다.