Stap 6: Concept: Indiana Jones Game
Als u denken aan de scène in indiana jones waar hij steelt en de oude artefact en vervangt is het met zand, dit spel gebaseerd op hetzelfde principe. De speler moet stelen van een object van een specifieke kleur en te vervangen door een object met dezelfde RGB-waarde. Als u er niet in dit binnen 500ms slagen zal de rode LED-alarm afgaan.
Deze code is gebaseerd op het vinden van wat een bepaalde RGB-waarde van een object is, en ervoor te zorgen dat als de waarde anders dan deze waarde, dan is de LED is wordt ingeschakeld.
Video 07.10.14 16 10 43. mov van alfred op Vimeo.
Conceptueel is het als volgt:
KLEUREN LEZEN
als {kleur is niet hetzelfde als object) {}
Zet LED ON;}
else {}
uitschakelen LED;}
Echte Code:
int s0 = 3, s1 = 4, s2 = 5, s3 = 6;
int vlag = 0;
int counter = 0;
int countR = 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);
vlag = 0;
attachInterrupt (0, ISR_INTO, verandering);
timer2_init();
}
VOID ISR_INTO()
{
teller ++;
}
VOID timer2_init(void)
{
TCCR2A = 0X00;
TCCR2B = 0X07; de klok frequentie bron 1024 punten
TCNT2 = 100; 10 ms overloop weer
TIMSK2 = 0X01; interrupt toestaan
}
int i = 0;
ISR (TIMER2_OVF_vect) //the timer 2, 10ms interrupt overflow weer. Interne overflow interrupt uitvoeringsfunctie
{
TCNT2 = 100;
vlag ++;
if(flag==1)
{
Counter = 0;
}
anders if(flag==2)
{
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
countR = teller/1.051;
Serial.Print("Red=");
Serial.Print(countR,DEC);
Serial.Print ("l");
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
}
anders if(flag==3)
{
countG = teller/1.0157;
Serial.Print("Green=");
Serial.Print(countG,DEC);
Serial.Print ("l");
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
}
anders if(flag==4)
{
countB = teller/1.114;
Serial.Print("Blue=");
Serial.println(countB,DEC);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
}
anders
{
vlag = 0;
TIMSK2 = 0X00;
}
Counter = 0;
delay(2);
}
void loop
{
delay(10);
TCS();
Als ((countR>10) || (countG > 10) || (countB>10))
{
Als ((countR>countG) & &(countR>countB))
{
Serial.Print("Red");
delay(500);
}
anders als ((countG > = countR) & &(countG>countB))
{
Serial.Print("Green");
delay(500);
}
anders als ((countB>countG) & &(countB>countR))
{
Serial.Print("Blue");
delay(500);
}
}
anders
{
delay(500);
}
Als (countG > 3) {}
digitalWrite(8,HIGH);
}
else {}
digitalWrite(8,LOW);
}
}