116w ago - This PS3 project might help someone out there to use their Teensy development boards for at least something, I call it my GT5: Grind A-Spec babysitter.
I got the idea from a mate of mine who used a keypad with paper wedged in to keep the enter key depressed and a controller with rubber bands and presstic. I don't own a usb keuboard or keypad, so I asked some questions and did some reading and this is the result.
Keep in mind I know nothing about programming and I can not help with other development boards.. although the code is very simple, I had to ask for advice.
Thanks to
Paul at PJRC for doing the code for me.
1. Download and install Arudino Software
2. Download and install Teensy Loader
3. Download and install Teensyduino installer
4. Run the Teensyduino installer (You must select the location where you extracted the Arduino Software)
5. Run the Arudino software and the Teensy loader
6. Plug in the Teensy development board into a USB slot
7. Copy the following code into the Arduino software
// menu: Tools > Board must be set up one of the Teensy boards
// menu: Tools > USB Type must be set to Keyboard
// setup runs once
void setup() {
Serial.begin(9600);
delay(2500);
}
// loop runs over and over, as long as power is on
void loop() {
Keyboard.println();
delay(200);
}
8. Click "verify".
9. Then push the button on your Teensy (of course, it needs to be plugged in), and it'll get programmed with this code.
This tells the Teensy to "pres ENTER" all the time
10. Remove the Teensy
11. Switch on the PS3 and load GT5.
12. Go to Extreme A-Spec races
13. Select the Indy track in "Like the Wind"
14. Make sure you use the Red Bull X1 (Switch all assists to on, traction control 5, ABS 1, reduce downforce to minimum and change oil)
15. Make sure "accelerate" is set to up on the right analog stick
16. Take a rubber band and put it around the right analog stick to the front of the controller and around - secure it around the right handle - this will make the car accelerate all the time
17. Enter the race.
18. Now do the same with the left analog stick. You will see in the race that the car will go straight all the time - adjust the steering ever so slightly to the right so the car does not go left when it is released from the walls (just do it - you will see what I mean - it might take a few races to fine tune this). The controller must be plugged into the USB, else the battery might go flat and the grinding comes to a halt.
19. Plug in the Teensy into the PS3.
When the race is finished, the Teensy will do all the keystrokes for the race to be repeated.
NOTE: This will only work for the Arduino Uno (tested) and possibly the Arduino Mega 2560. The Uno and (if I recall correctly, the Mega 2560) differ(s) from all preceding boards in that it does not use the FTDI USB-to-serial driver chip. Instead, it features the Atmega8U2 programmed as a USB-to-serial converter. This allows the board to be seen as a HID by flashing the Atmega8U2 with a custom hex file.
What you'll need:
Hardware:
Arduino Uno (or Mega 2560) x1
Usb cable x1
Wire about an inch long and stripped on both ends x2
Software:
Arduino IDE
AND
http://www.atmel.com/dyn/resources/prod_documents/JRE_Flip_Installer_3.4.2.exe (windows only)
OR
http://www.macports.org/install.php#pkg & dfu-programmer ("sudo port install dfu-programmer") (mac only)
OR
dfu-programmer (grab it from your distro's repos) (linux only)
AND
My http://dl.dropbox.com/u/1016943/UNOPS3.zip
PS3:
Copy of GT5
Red Bull x2010 (any version)
Start off by uploading this sketch to your Arduino:
/*
Keyboard sketch
by Andrew McDaniel
Tweaked by deba94
Copyright (c) 2010 Andrew McDaniel
Copyright (c) 2011 deba94
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
/*
When we send data to the keyboard driver, it has to be
scancodes, not ascii characters. Refer to the AVR keyboard
source code to obtain the scancodes.
*/
// meaningful constants for GT5
byte SC_SPACE = 0x2c;
byte SC_ENTER = 0x28;
byte SC_ESCAPE = 0x29;
byte SC_ESC = 0x29;
byte SC_RIGHT_ARROW = 0xef;
byte SC_LEFT_ARROW = 0x50;
byte SC_DOWN_ARROW = 0x51;
byte SC_UP_ARROW = 0x52;
void setup()
{
delay(6000); // Give the keyboard driver time to boot
Serial.begin(9600);
}
void loop()
{
sendSCByte(SC_ENTER); //accepts on screens that need accepting
sendSCByte(SC_DOWN_ARROW); //moves down once to get past the driver progression screen
}
void sendSCByte(byte byteToSend)
{
// This function sends single scancode bytes.
Serial.print(byteToSend);
delay(25);
}
Now, you'll need to throw your UNO into DFU mode. To do this, (while your Arduino is plugged into USB) use one of the short wires to bridge two points on the back of the board near the map of Italy (just below). With that in place (hold it down with tape if you'd like) use the other wire to bridge the the two points seen here:
If done correctly, your UNO should now be in DFU mode. (Confirm this by checking the list of serial ports. The serial port for your board should no longer show up.)
Now, flash the 8u2!
Windows: Open flip, load the hex, select at90usb82 and flash away.
OS X/Linux:
cd /UNOPS3/
sudo dfu-programmer at90usb82 erase
sudo dfu-programmer at90usb82 flash keyboard.hex
sudo dfu-programmer at90usb82 reset
Now unplug the board and plug it back in. Careful though! It'll start typing exactly 6 seconds after the board receives power. Open notepad/gedit/emacs or something.
Go hook it up to the ps3! Fire up B-Spec and go to either Extreme Series > Dream car championship > second from the left (indy) (best for farming XP) or Extreme Series > Like the Wind (indy) (best for farming monies).
The UNO will alternate between sending the "return" key and the "down" key, so you can simply walk away and come back whenever you want to collect your winnings.
Enjoy.
Credits:
to A.McD and ant.b from the arduino forums for the base code.
to Dean Camera for LUFA-lib.
Christiann got me thinking about B-Spec grinding and although I don't really care about getting my Bob (B-Spec drivers) to level 40, I thought there must be a way to use the Teensy to do some automatic grinding on my behalf should I want to do more grinding. So I decided to get Bob to the end of his career without me having to sit through every race and watch. This grinding thing can really become tedious and boring and in my opinion has no place in decent games. So this was just to get Bob to the end of his career and also to get the trophy that comes with it.
For those interested, (and there are probably not a lot left that would use this), I will share the code.
// menu: Tools > USB Type must be set to Keyboard
// setup runs once
void setup() {
Serial.begin(9600);
delay(2500);
}
// loop runs over and over, as long as power is on
void loop() {
Keyboard.println();
delay(200);
Keyboard.set_key1(KEY_DOWN);
Keyboard.set_modifier(0);
Keyboard.send_now();
Keyboard.set_key1(0);
Keyboard.set_modifier(0);
Keyboard.send_now();
delay(200);
}
What this does, is repeat the ENTER and DOWN keystrokes on of a keypad on an alternate basis. (ENTER DOWN ENTER DOWN ENTER DOWN ... ETC)
This does unfortunately NOT work that well with championships. It would work with the individual races within championships or if you want to do only one championship which might lasts maybe 90 mins. But if you want to grind for long hours, then don't select the whole championship!
So after you programmed your board, go into B-Spec events and select a car and a race of your choice. After loading the track and setting up your car, start the race and plug in your Teensy. The Teensy will constantly tell Bob to "reduce pace", but if you have a fast enough car, this will not matter. At the end of the race, the teensy will do all the necessary keystrokes to start a new race and there you go (again and again and again ...)
I also tested this on the A-spec races and as per the first post, this code will also enable you to do A-Spec grinding too.
Hope this helps and have fun not doing the tedious bits!