ИСПОЛЬЗОВАНИЕ INPUTSHIELD ДЛЯ СОЗДАНИЯ OPEN SOURCE GAME BOY
Перевод.
Итак, когда-то после средней школы я хотел сделать одну из них … но я только сейчас имею достаточно знаний и поддержку, чтобы сделать это, … с открытым исходным кодом GameBoy :) На самом деле, это немного меньше, чем GameBoy, но это 1000% круче (на мой взгляд), потому что он использует Arduino, как «ядро», и несколько модулей и шилды, которые уже существуют.
Я использовал:
Arduino Uno Rev3 ATmega328
Input Shield
TouchShield
Вот несколько других фотографий о Gamepack (это как Gadget Pack, за исключением свободного места, я поместил Input Shield) … и мне очень хочеться, чтобы он был «hand model», как в Zoolander — ха:
Вот исходный код, который работает на Arduino:
#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);
}
И вот исходный код, который идет на TouchShield:
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;
}
Также хочю заметить что можно написать свою игру для него, но она будет простой в плане графики