I wrote a quick little program for it to automatically tap the left or right buttons for you -- depending on how far left or right you turn a potentiometer. This helps makes the game more tolerable, in my opinion. It's not a cure all though -- Checkered Flag also suffers from a pretty low framerate.
Anyhow if anybody has an Arduino or decides to pick one up, here's the program in it's entirety -- along a picture of my modified controller (with Arduino attached). The program could probably use a bit more tweaking -- however I've probably taken it as far as I'm going to....
/*
Jaguar button-tapper program for the Checkered Flag game.
The circuit:
* Potentiometer on sensorPin
* -- center pin to sensorPin
* -- one side pin (either one) to ground
* -- other side pin to +5V
* Left output on LtPin
* -- active low (i.e. low = button pressed)
* -- see note below
* Right output on RtPin
* -- active low (i.e low = button pressed)
* -- see note below
Note: Depending on how you wire these in to your Jaguar
Controller, you may have to qualify them with select line #4
(yellow wire). To do this, feed each of these outputs in to
two separate 2-input OR gates, along with the select line. The
output of these OR gates is then the qualified version of these
signals. (OR gates are used because all signals are active low)
*/
int sensorPin = 0; // select the input pin for the Potentiometer
int LtPin = 12; // select the pin for the Left output
int RtPin = 11; // select the pin for the Right output
int sensorValue = 0; // variable to store the value coming from the sensor
int sensorValueMapped = 0; // variable to store the value coming from the sensor
int loopCount = 0; // variable to store the loop count
int buttonDirection = 0; // variable to record latest direction - left = 0, center = 1, right = 2
void setup() {
// declare our output pins
pinMode(LtPin, OUTPUT);
pinMode(RtPin, OUTPUT);
}
void loop() {
// ==============================================================
// Set Both Buttons HI
//
// Simply set both high for a fixed amount of time. This
// seems to work best with the game, but needs more testing
// to say for sure.
// ==============================================================
digitalWrite(LtPin, HIGH); // Lt not pressed, hold high
digitalWrite(RtPin, HIGH); // Rt not pressed, hold high
// Stop the program for () milliseconds:
delay(250);
// ==============================================================
// Set One Button LO
//
// Here we want to sample the Potentiometer as often as possible.
// In other words, we don't just want to sample it once, and then
// stop for that amount of time, because the user could be
// moving the Potentiometer while we are stopped. So a better
// way is to loop -- read pot, delay for 1ms, read pot, delay for
// 1ms, etc.
// ==============================================================
loopCount = 0;
sensorValueMapped = 1;
buttonDirection = 1;
while(loopCount < sensorValueMapped) {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
if(sensorValue >= 512) { // press the Rt button
digitalWrite(LtPin, HIGH);
digitalWrite(RtPin, LOW);
if(buttonDirection != 0) { // reset count if direction change
loopCount = 0;
buttonDirection = 0;
}
sensorValueMapped = map(sensorValue, 512, 1023, 0, 511); // remap by moving lower
} else if (sensorValue <= 511) { // press the Lt button
digitalWrite(LtPin, LOW);
digitalWrite(RtPin, HIGH);
if(buttonDirection != 2) { // reset count if direction change
loopCount = 0;
buttonDirection = 2;
}
sensorValueMapped = map(sensorValue, 0, 511, 511, 0); // remap by reversing
} else { // at the middle, don't press either button
digitalWrite(LtPin, HIGH);
digitalWrite(RtPin, HIGH);
if(buttonDirection != 1) { // reset count if direction change
loopCount = 0;
buttonDirection = 1;
}
sensorValueMapped = 0;
}
// ============================================================
// At the extremes, keep the button pressed forever. (don't
// really know how much this helps -- needs more testing)
if((sensorValueMapped > 506) || (sensorValueMapped < 5)) {
loopCount = 0;
};
// ============================================================
// Stop the program for for () milliseconds:
delay(1);
loopCount = loopCount + 1;
}
}














