This is an old revision of the document!
Proiectul presupune automatizarea popularului jocului disponibil în browser-ul Google Chrome atunci când nu există conexiune la internet. Jocul este de tip “endless runner” și implică un dinozaur ce trebuie să se ferească de o serie de obstacole pentru a supraviețui si pentru a obtine puncte.
Inițial, ecranul LCD afișează mesajul „Press the red button to start!”, iar apăsarea butonului roșu determină ulterior prima mișcare a servo-motorului și respectiv, începutul jocului.
Ulterior, ecranul LCD afișează mesajul „Playing..”, iar jocul se desfășoară, prin utilizarea fotorezistorilor pentru a identifica obstacolele, respectiv momentele în care dinozaurul trebuie să sară.
Fotorezistorii vor fi lipiți la o distanță mică de dinozaur, pe ecranul laptopului. În momentul în care un obstacol se apropie, fotorezistorii vor detecta schimbarea luminii, și vor trimite semnalul către placa Arduino. Cum obstacolul este un copac, servomotorul va efectua o săritură apăsând butonul “space” de pe tastatură. Această acțiune va fi repetată în mod automat pe durata întregului joc, fără intervenția utilizatorului. Proiectul poate fi extins pentru a identifica și alte obstacole din joc și pentru a le evita automat.
Componentele necesare în dezvoltarea proiectului sunt următoarele:
Pentru a simula începerea jocului la apăsarea butonului, am configurat o intrerupere, ce va întrerupe programul curent la sesizarea evenimentuluii.
ISR(PCINT2_vect) { if (!(PIND & (1 << PIND2))) { buttonPressed = true; } } void setup() { // Configure interrupt using registers // input DDRD &= ~(1 << DDD2); // input pullup PORTD |= (1 << PORTD2); // PCMSK2 |= (1 << PCINT18); PCICR |= (1 << PCIE2); sei(); }
Pentru display-ul de mesaje folosind afișajul LCD pe două rânduri, am folosit biblioteca LiquidCrystal_I2C, inițializând lcd-ul astfel:
void setup() { /* Initialize LCD screen */ lcd.init(); /* Clear content on the screen */ lcd.clear(); /* Turn on backlight */ lcd.backlight(); /* Setup initial message on lcd */ lcd.setCursor(2,0); lcd.print("Press the red"); lcd.setCursor(0,1); lcd.print("button to start!"); }
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.