Writing an application
for the Game Pack will generally consist of 2 programs. One that runs
on the Arduino to send data from the InputShield to the TouchShield,
and another that runs on the TouchShield that will perform the main
game processing and handle the data from the InputShield.
The program to send
data from the InputShield is relatively simple. It polls the pins
connected to the various buttons for signals and then sends these signals to the TouchShield through another pin
using serial communications. The data is sent in a group containing a
value for each component.
e.g. the data sent for
one poll, will contain the following set of information
JoyStick Lateral = 100
JoyStick Vertical = 0
JoyStick Button = 1
Button A = 0
Button B = 1
The program to upload
to the Arduino can be created using the SimpleArduinoLibrary and adding a main source file (InputShieldForwarder.cpp) containing the code to poll the pins and send the data out through another pin. You can download InputShieldForwarder.cpp here.
Create a new project called InputShieldForwarder for the Arduino Uno (follow the steps
from the last post). The InputShieldForwarder.cpp source file
is copied from the original code created by Liquidware
(You can find it here)
but required a few tweaks to remove the dependencies on the
processing libraries and use the SimpleArduinoLibrary instead.
Your new project should
look like this:
So now you can upload
the program to the Arduino but it won't look very impressive because
the TouchShield is not listening and will not react to data sent from
the InputShield. To remedy this, we will upload a little program for
the TouchShield which will poll for data and display it on the
screen.
Creating a new project for the TouchShield
A TouchShield project
is created in the same way as we did for the Arduino except some different configuration is required:
Under AVR Target Hardware properties:
MCU Type → Atmega2560
In the AVRDude configuration:
New Programmer
configuration:
Name → TouchShield
Programmer Hardware →
Atmel Butterfly Development Board
Override default baud
rate → 57600
The Antipasto IDE contains loads of useful libraries for manipulating the
graphics on the TouchShield. We will reuse these libraries in our
Eclipse project (they're super easy to use and there's no point re-inventing the wheel). We will also
need the 'utils' folder from the last example to provide methods for
constructing and destructing objects (not included in the avr-gcc linker) and a new class to handle the
InputShield.
I have packaged up the
source files required for this program here. Simply unzip them into your empty project.
Your new project should
look like this
Included in the source
files is a class called InputShield. This encapsulates the data
format away from the main code and interprets the data into a more
useful format (well, I have found the format more useful anyway). The analogue readings from the joystick are translated
into discrete Left/Right/Up/Down values and the buttons values are
also translated into booleans (note: when a button is pressed, the
value is 0, not 1). This code is based on the InputShieldDisplay code
written by Liquidware which is available here.
The code uses the
graphics function:
text(textToOutput, xPos, yPos)
to display the data
from the InputShield (Coordinates are referenced from the top left
corner of the screen). For more information on what graphics
functions are available for the TouchShield check out out the wiki
page here.
Build the projects (in
Release mode) and then we are ready to upload our programs.
- Connect the USB cable to the Arduino (connect it back into the Game Pack set up).
- Upload the InputShieldForwarder by selecting the project in the Project Explorer and selecting the 'AVR' option from the top menu and 'Upload Project to target device'.
- Before we upload to the TouchShield we need to prepare it for receiving the new code. Do this by pressing the teeny tiny button on the left side of the TouchShield. This will make the screen go blank (assuming it was displaying anything before)
reset button on the TouchShield - Select the InputShieldDisplay project in the Project Explorer and upload it in the same manner as step 2. This takes a little longer than uploading to the Arduino.
If all goes well you
should now see some output on the TouchShield that changes when you
interact with the InputShield.
No comments:
Post a Comment