Allt du behöver veta om färg sensorer (8 / 9 steg)
Steg 8: Koncept: RGB kokbok
Om du kommer ihåg scenen i indiana jones där han stjäl och forntida artefakt och ersätter bygger den med sand, detta spel på samma princip. Spelaren behöver att stjäla ett objekt av en viss färg och ersätta det med ett objekt av samma RGB-värdet. Om du inte hanterar detta inom 500ms slocknar röda larmlampa.
Denna kod är baserad på att hitta vad ett visst RGB värde av ett objekt är, och sedan att se till att om värdet är annorlunda än detta värde, då lampan tänds.
Konceptuellt är det såhär:
LÄS FÄRGER
om {färgen är inte samma som objekt) {
slå LED;}
annat {
Inaktivera LED;}
Riktiga kod:
int s0 = 3, s1 = 4, s2 = 5, s3 = 6;
int flagga = 0;
int counter = 0;
int l = 0, countG = 0, countB = 0;
void setup()
{
Serial.BEGIN(9600);
pinMode(s0,OUTPUT);
pinMode(s1,OUTPUT);
pinMode(s2,OUTPUT);
pinMode(s3,OUTPUT);
pinMode(8,OUTPUT);
}
void TCS()
{
digitalWrite(s1,HIGH);
digitalWrite(s0,LOW);
flagga = 0;
attachInterrupt (0, ISR_INTO, förändring);
timer2_init();
}
void ISR_INTO()
{
räknaren ++;
}
void timer2_init(void)
{
TCCR2A = 0X00;
TCCR2B = 0X07; processorns klockfrekvens källa 1024 punkter
TCNT2 = 100; 10 ms overflow igen
TIMSK2 = 0X01; att avbryta
}
int jag = 0;
ISR (TIMER2_OVF_vect) //the timer 2, 10ms avbrott overflow igen. Inre overflow avbrott verkställande funktionen
{
TCNT2 = 100;
flagga ++;
IF(Flag==1)
{
räknare = 0;
}
annat if(flag==2)
{
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
l = counter/1.051;
Serial.Print("Red=");
Serial.Print(countR,dec);
Serial.Print ("l");
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
}
annat if(flag==3)
{
countG = counter/1.0157;
Serial.Print("Green=");
Serial.Print(countG,dec);
Serial.Print ("l");
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
}
annat if(flag==4)
{
countB = counter/1.114;
Serial.Print("Blue=");
Serial.println(countB,dec);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
}
annat
{
flagga = 0;
TIMSK2 = 0X00;
}
räknare = 0;
Delay(2);
}
void loop()
{
Delay(10);
TCS();
om ((countR>10) || (countG > 10) || (countB>10))
{
om ((countR>countG) & &(countR>countB))
{
Serial.Print("Red");
Delay(500);
}
annars om ((countG > = l) & &(countG>countB))
{
Serial.Print("Green");
Delay(500);
}
annars om ((countB>countG) & &(countB>countR))
{
Serial.Print("Blue");
Delay(500);
}
}
annat
{
Delay(500);
}
om (countG > 3) {
digitalWrite(8,HIGH);
}
annat {
digitalWrite(8,LOW);
}
}