Home
Accesso / Registrazione
 di 

Open Source Game Boy con Arduino

Game boy open source

Arduino. Il Game Boy, l’idolo dei ragazzini degli anni ’80 e ’90, la prima sorta di console tascabile. Ore e ore passate a consumarlo. C’è qualcuno che, ancora nostalgico dei vecchi ricordi, ha deciso di utilizzare Arduino per creare un Game Boy Open source. In realtà il dispositivo è leggermente più piccolo di un Game Boy, ma è particolarmente interessante perché utilizza Arduino come core.

Il progetto Arduino prevede la realizzazione di un Game Boy open source

Di seguito vengono mostrate alcune foto del Gamepack.

Il video successivo mostra invece il risultato ottenuto una volta che tutto è stato sistemato e pronto ad essere eseguito; il codice sorgente che gira su Arduino è quello che vedete riportato dopo il video.

#include #define RXPIN 3 #define TXPIN 2 AFSoftSerial mySerial = AFSoftSerial(RXPIN, TXPIN); unsigned char x=0; void setup() { mySerial.begin(9600); /* Sync up by waiting for character */ while(mySerial.read() != 'U'); } void loop() { /* The first analog pin sent */ x=0; /* send 6 Analog Pin values */ while (x <> { serial_sendAnalog(x); x++; } delay(10); x=0; while(x<> { serial_sendDigital(x); x++; } delay(100); } void serial_sendDigital(unsigned char digitalPin) { if ( (digitalPin <> 13) ) return; mySerial.print((unsigned char)digitalRead(digitalPin)); delay(2); } void serial_sendAnalog(unsigned char analogPin) { unsigned char lowByte, highByte; unsigned int val; /* Pin number range check */ if (analogPin > 6) return; /* Get the value */ val = analogRead(analogPin); /* Separate the value into 2 bytes */ lowByte = (unsigned char)val; highByte = (unsigned char)(val >> 8); /* Send the high byte */ mySerial.print(highByte); /* Write delay */ delay(1); /* Send the low byte */ mySerial.print(lowByte); /* Write delay */ delay(1); }

E questa è la parte che gira suTouchShield:

COLOR green = { 0, 255, 0 };
COLOR blue = {0,0,255};
COLOR yellow = {255,255,0};
COLOR black = {0,0,0};
COLOR white = {255,255,255};
COLOR grey = {0x77,0x77,0x77};
COLOR red = {255,0,0}; 
POINT my_point; 
unsigned int analogValues[6];
unsigned char digitalValues[10]; 
LCD_RECT digitalRect = { 118, 15, 127, 115 };
LCD_RECT analogRect = {0, 60, 32, 121 }; 
unsigned char x; 
void setup()
{ 
Serial.begin(9600);
delay(3000); 
/* The sync character */
Serial.print('U');
} 
unsigned int oldx, oldy, newx, newy;
int erasemode = 2;
int pencolor = 1; 

void loop()
{
//digitalValues[0] - digital pin 4, button A MODEA
//digitalValues[1] - digital pin 5, button B MODEA
//digitalValues[4] - digital pin 8, button A MODEB
//digitalValues[5] - digital pin 9, button B MODEB
//analogValues[5] - joystick y, MODEA
//analogValues[4] - joystick x, MODEA
//analogValues[3] - joystick y, MODEB
//analogValues[2] - joystick x, MODEB

//Read analog values
analogValues[0] = (Serial.read() <
<>
analogValues[1] = (Serial.read() <
<>
analogValues[2] = (Serial.read() <
<>
analogValues[3] = (Serial.read() <
<>
analogValues[4] = (Serial.read() <
<>
analogValues[5] = (Serial.read() <
<> 
//Read digital values:
//Read digital values
digitalValues[0] = Serial.read();
digitalValues[1] = Serial.read();
digitalValues[2] = Serial.read();
digitalValues[3] = Serial.read();
digitalValues[4] = Serial.read();
digitalValues[5] = Serial.read();
digitalValues[6] = Serial.read();
digitalValues[7] = Serial.read();
digitalValues[8] = Serial.read();
digitalValues[9] = Serial.read();

if (touch_get_cursor(&my_point)) {
lcd_clearScreen( black);
}

newx=3+(1023-analogValues[5])*.12;
newy=3+(1023-analogValues[4])*.12;

if (erasemode && ((oldx != newx) (oldy != newy))) {
lcd_circle(oldx,oldy,5, black, black);
}
if (pencolor == 1) {
lcd_circle(newx,newy,5, blue, blue);
} else if (pencolor == 2) {
lcd_circle(newx,newy,5, green, green);
} else if (pencolor == 3) {
lcd_circle(newx,newy,5, red, red);
} else {
lcd_circle(newx,newy,5, white, white);
}

if (!digitalValues[0]) {
erasemode = !erasemode;
}

if (!digitalValues[1]) {
pencolor++;
if (pencolor == 5) {
pencolor = 1;
}
}

oldx=newx;
oldy=newy;
}

La scheda Arduino disponibile da Farnell

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di Alex87ai

Di questo progetto sono

Di questo progetto sono interessanti le shield di input e output interfacciabili con Arduino. Sono infatti progettate in modo tale da potersi connettere tra di loro in maniera molto semplice e secondo la forma stilistica che si vuole conferire alla composizione finale (hanno più attacchi in modo da poter essere montate in orizzontale o verticale). Con le stesse board, un pò di tempo fa, abbiamo visto realizzata la 'PSP' open source, sempre con core Arduino. I gradi di libertà di utilizzo della scheda Arduino sono già di per se tanti, le shield di contorno contribuiscono ad estendere le possibili funzionalità di un prodotto finito. In pratica si tratta di una combinazione vincente sempre in forte crescita e tutto questo grazie alla licenza open source sotto la quale sono rilasciati sia Arduino che le shield.

ritratto di giuskina

se il tempo lo permettera

sarebbe un bel progetto da portare avanti

ritratto di picunz

joystick

Il joystick usato nella piattaforma e' formato da un doppio potenziometro, uno utilizzato per l'asse X e uno per l'asse Y, in questo modo si comporta come un joystick analogico di quelli utilizzati sui JoyPad della PS2 o dell' Xbox. Contiene anche un piccolo pulsantino in modo da usarlo premendo il joystick. Al micro bastera' gestire solo due pin della direzione ( collegati ai suoi ingressi analogici) e uno per la pressione del pulsante (collegato a un input pin digitale).

ritratto di matrobriva

Incredibile cosa ci si riesca

Incredibile cosa ci si riesca a fare con Arduino!

La shield con i joystick e il display è molto interessante ed anche il resto dell'hardware promette bene... unico problema: potrà un processore così poco potente a far girare dei giochi in modo decente?

Speriamo che almeno gli "arcade" (snake, pong, muretto...) riescano a funzionare bene... l'importante è scrivere codice compatto!

Uaaa! Ho appena visto sulla home del progetto che ci hanno fatto girare perfino Tetris!

Peccato che gli sketch già sviluppati non li trovo online! Se un giorno mi deciderò a pubblicare un sito su Arduino, mi concentrerò anche su questa nuova console!

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 5 utenti e 43 visitatori collegati.

Ultimi Commenti