Joystick v2.0 - Greedy Freak Game
Hi Guys, Joystick v2.0 is our new product which added Nokia 5110 LCD and nRF24L01 interface. You can easily develop your Joystick games, and even communicate with each other with wireless nRF24L01. I just made a simple demo game based on Joystick Game Kit, we called -- Greedy Freak.
Take a look firstly: https://www.youtube.com/watch?v=wQuIPCIZxrA
If you want to write your own Joystick game, follow me and see what kind of preparation do you need?
Hareware
- Joystick v2.0
- Freaduino ATmage328
- Nokia 5110 LCD
- nRF24L01 (Non-essential)
We have prepare Joystick Game Kit for starter now, there is no soldering required and you can start your project quickly. Another important reason choose the Joystick Game Kit is the Joystick v2.0 with Nokia5110 is not support standard Arduino board Because of standard Arduino board 3.3v just supply 50mA current, which can't support Nokia5110 backlight need. But our Freaduino support 800mA current which far more than Nokia5110's demand.
Software
Greedy Freak is base on a Nokia 5110 LCD library -- LCD5110_Graph library written by our friend Henning Karlsen. Put the library to your \arduino-00xx\libraries\. The LCD 5110 pin define with Arduino as below:
SCLK - D9 , MOSI - D10 , D/C - D11 , RST - D12 , SCE - D13
[cce_cpp]LCD5110 myGLCD(9,10,11,12,13);[/cce_cpp]
The nRF24L01 pin define with Arduino as:
SCE - D9 , CSN - D10 , SCK - D13 , MOSI - D11 , MISO - D12
[cce_cpp] #define CE 9 // CE_BIT: Digital Input Chip Enable Activates RX or TX mode #define CSN 10 // CSN BIT: Digital Input SPI Chip Select #define SCK 13 // SCK BIT: Digital Input SPI Clock #define MOSI 11 // MOSI BIT: Digital Input SPI Slave Data Input #define MISO 12 // MISO BIT: Digital Output SPI Slave Data Output, with tri-state option [/cce_cpp]
Because of the data pin with Nokia 5110 and nRF24L01 is multiplexing, the demo game no support them at same time. Maybe we can design another Joystick Mage2560 for more IO in future. Now, Greedy Freak full code just as below, you can see it's realy simple.
[cce_cpp] /********************************************************************* ** Device: Joystick -- Greedy Freak v1.0 ** ** File: EF_Joystick_v2.0_Game.pde ** ** ** ** Created by ElecFreaks Robi.W /25 Nov 2011 ** ** ** ** Description: ** ** This file is a sample code for your reference. ** ** ** ** Copyright (C) 2011 ElecFreaks Corp. ** *********************************************************************/ #include <LCD5110_Graph.h> #include <avr/pgmspace.h> LCD5110 myGLCD(9,10,11,12,13); extern uint8_t SmallFont[]; uint8_t pacman1[] PROGMEM={ 0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x3E, 0x1C, // 0x0010 (16) pixels 0x0C, 0x00, 0x00, 0x00, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, // 0x0020 (32) pixels 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F, // 0x0030 (48) pixels 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00, }; uint8_t pacman2[] PROGMEM={ 0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x7C, // 0x0010 (16) pixels 0x7C, 0x38, 0x20, 0x00, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, // 0x0020 (32) pixels 0xF9, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F, // 0x0030 (48) pixels 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, }; uint8_t pacman3[] PROGMEM={ 0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, // 0x0010 (16) pixels 0xF8, 0xF0, 0xE0, 0x80, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x0020 (32) pixels 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xF9, 0x79, 0x19, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x0F, // 0x0030 (48) pixels 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, }; uint8_t pill[] PROGMEM={ 0x0E, 0x1F, 0x1F, 0x1F, 0x0E, }; #define Width 84 #define Hight 48 #define Range 12 int FirstShotX , FirstShotY; int PointX, PointY; int delaytime; void setup() { /* Init LCD5110_Graph library */ myGLCD.InitLCD(); myGLCD.setFont(SmallFont); randomSeed(analogRead(0)); /* Record Joystick corrected coordinates */ FirstShotX = analogRead(A0); FirstShotY = analogRead(A1); /* Black specks the initial coordinates */ PointX = 75; PointY = 20; /* Refresh time */ delaytime = 50; /* Start display */ myGLCD.print("ElecFreaks", CENTER, 0); myGLCD.print("Joystick v2.0", CENTER, 20); myGLCD.print("Greedy Freak", CENTER, 40); myGLCD.update(); delay(3000); /* Init Serial port */ Serial.begin(115200); } void loop() { //int pacy=random(0, 42); uint8_t* bm; for (int i=-20; i<84; i++) { /* Clear LCD */ myGLCD.clrScr(); /* Refresh Greedy Freak Bitmap */ switch(((i+20)/3) % 4) { case 0: bm=pacman1; break; case 1: bm=pacman2; break; case 2: bm=pacman3; break; case 3: bm=pacman2; break; } int sensorValueX = (analogRead(A0) - FirstShotX)*0.1 + 32; //You can change the coefficient such as 0.08, which decide X-axis Range int sensorValueY = (FirstShotY - analogRead(A1))*0.06 + 14; //You can change the coefficient such as 0.04, which decide Y-axis Range myGLCD.drawBitmap(sensorValueX, sensorValueY, bm, 20, 20); /* Once the Greedy Freak be close to black specks, random another X and Y */ TX: if( (sensorValueX-5 <= PointX && PointX <= sensorValueX+15) && (sensorValueY-3<= PointY && PointY <= sensorValueY + 20 )) { PointX = random(0, 80); PointY = random(0, 43); goto TX; } else myGLCD.drawBitmap(PointX, PointY, pill, 5, 5); myGLCD.update(); //update and display the Bitmap int i, someInt, flag = 0; for(i=2; i<9; i++) { someInt = digitalRead(i); //scan the KEY if(someInt == 0) { flag =1; break; } } if(flag == 1) { Serial.println(i); switch(i) { case 2: Serial.println("--------> Button A"); delaytime = 50; break; case 3: Serial.println("--------> Button B"); delaytime = 5; break; default: break; } flag=0; } delay(delaytime); } } [/cce_cpp]
Download
Comments