ИСПОЛЬЗОВАНИЕ INPUTSHIELD ДЛЯ СОЗДАНИЯ OPEN SOURCE GAME BOY

Перевод.

ИСПОЛЬЗОВАНИЕ INPUTSHIELD ДЛЯ СОЗДАНИЯ OPEN SOURCE GAME BOY Arduino, Atmel, Shield, Open source, Gameboy, Своими руками, Перевод, Интересное, Видео, Длиннопост

Итак, когда-то после средней школы я хотел сделать одну из них … но я только сейчас имею достаточно знаний и поддержку, чтобы сделать это, … с открытым исходным кодом GameBoy :) На самом деле, это немного меньше, чем GameBoy, но это 1000% круче (на мой взгляд), потому что он использует Arduino, как «ядро», и несколько модулей и шилды, которые уже существуют.


Я использовал:

Arduino Uno Rev3 ATmega328

Input Shield

TouchShield


Вот несколько других фотографий о Gamepack (это как Gadget Pack, за исключением свободного места, я поместил Input Shield) … и мне очень хочеться, чтобы он был «hand model», как в Zoolander — ха:

ИСПОЛЬЗОВАНИЕ INPUTSHIELD ДЛЯ СОЗДАНИЯ OPEN SOURCE GAME BOY Arduino, Atmel, Shield, Open source, Gameboy, Своими руками, Перевод, Интересное, Видео, Длиннопост
ИСПОЛЬЗОВАНИЕ INPUTSHIELD ДЛЯ СОЗДАНИЯ OPEN SOURCE GAME BOY Arduino, Atmel, Shield, Open source, Gameboy, Своими руками, Перевод, Интересное, Видео, Длиннопост
ИСПОЛЬЗОВАНИЕ INPUTSHIELD ДЛЯ СОЗДАНИЯ OPEN SOURCE GAME BOY Arduino, Atmel, Shield, Open source, Gameboy, Своими руками, Перевод, Интересное, Видео, Длиннопост
Также я сделал фото немного с другого ракурса и немного дальше (под светом флуоресцентной лампы)
ИСПОЛЬЗОВАНИЕ INPUTSHIELD ДЛЯ СОЗДАНИЯ OPEN SOURCE GAME BOY Arduino, Atmel, Shield, Open source, Gameboy, Своими руками, Перевод, Интересное, Видео, Длиннопост
Я сделал это видео, как только у меня все заработало, и он работает, исходный код, который используется размещен в нижней части поста …
Вот также другое видео:

Вот исходный код, который работает на 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;

}


Также хочю заметить что можно написать свою игру для него, но она будет простой в плане графики

ИСПОЛЬЗОВАНИЕ INPUTSHIELD ДЛЯ СОЗДАНИЯ OPEN SOURCE GAME BOY Arduino, Atmel, Shield, Open source, Gameboy, Своими руками, Перевод, Интересное, Видео, Длиннопост
ИСПОЛЬЗОВАНИЕ INPUTSHIELD ДЛЯ СОЗДАНИЯ OPEN SOURCE GAME BOY Arduino, Atmel, Shield, Open source, Gameboy, Своими руками, Перевод, Интересное, Видео, Длиннопост