Long time ago I did not do anything to this project. Now I have a little time and I thought I should finish the controller. Since my last post a couple of guys contacted me and we talked about their projects. Interestingly everyone wanted to use the controller for different things. One fellow wants to shoot flying bird photos, another one would like to take shots of jumping grasshoppers. Since these things also interest me, I decided to make the device a bit more generic. I will not integrate the circuits for specific inputs and outputs to the board. Instead I will connect the remaining arduino input/output pins to connectors and put them to the back of the device box. I will build those circuits separately. This way I can change the hardware for different purposes by simply attaching different type of peripheries.
After reviewing my half made board and my last post I found that I have the following pins free:
Digital I/O: 2, 1, 0
Analog input: 0, 1, 2, 3, 4, 5
I will use the digital pins as digital outputs.
The first two analog pins (0 and 1) will be used for built in potentiometers.
The analog 2 and 3 pins will be configured as digital inputs and they will have similar circuits like the push buttons. The only difference is that we will replace the button with a connector.
The analog 4 and 5 will be directly connected to connectors.
Now, I have plan
Lets solder!
Posted in microcontroller, xISTIx HSP Controller.
By Isti
– April 17, 2010
I did not change the HW since the last post. I updated the SW by implementing a simple menu:
// include the library code:
#include <LiquidCrystal.h>
const int numRows = 2;
const int numCols = 16;
const int lcdBackLightPin = 12;
const int upButtonPin = 6;
const int downButtonPin = 5;
const int setButtonPin = 4;
const int resetButtonPin = 3;
char* mainMenu[]={"start", "delay", "test"};
int mainMenuIndex = 0;
int mainMenuNextItem = 1;
int mainMenuItemNum = 3;
boolean menuUpdate = false;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(13, 11, 10, 9, 8, 7);
void setup() {
// set up the LCD's number of rows and columns:
lcd.begin(numRows, numCols);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">");
lcd.setCursor(2, 0);
lcd.print(mainMenu[mainMenuIndex]);
lcd.setCursor(2, 1);
lcd.print(mainMenu[mainMenuNextItem]);
digitalWrite(lcdBackLightPin, HIGH);
pinMode(lcdBackLightPin, OUTPUT);
pinMode(upButtonPin, INPUT);
pinMode(downButtonPin, INPUT);
pinMode(setButtonPin, INPUT);
pinMode(resetButtonPin, INPUT);
}
void loop() {
if(digitalRead(upButtonPin))
{
mainMenuIndex++;
if(mainMenuIndex >= mainMenuItemNum)
{
mainMenuIndex = 0;
}
mainMenuNextItem++;
if(mainMenuNextItem >= mainMenuItemNum)
{
mainMenuNextItem = 0;
}
menuUpdate = true;
}
else if(digitalRead(downButtonPin))
{
mainMenuIndex--;
if(mainMenuIndex < 0)
{
mainMenuIndex = mainMenuItemNum - 1;
}
mainMenuNextItem--;
if(mainMenuNextItem < 0)
{
mainMenuNextItem = mainMenuItemNum - 1;
}
menuUpdate = true;
}
if(menuUpdate)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">");
lcd.setCursor(2, 0);
lcd.print(mainMenu[mainMenuIndex]);
lcd.print(" <");
lcd.setCursor(2, 1);
lcd.print(mainMenu[mainMenuNextItem]);
menuUpdate = false;
delay(300);
}
}
You can download the file from here: xISTIxHSPC
Posted in microcontroller, xISTIx HSP Controller.
By Isti
– September 22, 2009
Yesterday I had a little time to go on with my high speed photo controller project. I added three more buttons. The circuits are exactly the same as for the first button. Here is a picture:

Buttons assembled
As you can see, I put every button connector two a new column. This way it was easy to wire them and I needed to make cuts only between the connector pins. I also changed the code of the controller:
// include the library code:
#include <LiquidCrystal.h>
const int numRows = 2;
const int numCols = 16;
const int lcdBackLightPin = 12;
const int upButtonPin = 6;
const int downButtonPin = 5;
const int setButtonPin = 4;
const int resetButtonPin = 3;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(13, 11, 10, 9, 8, 7);
void setup() {
// set up the LCD's number of rows and columns:
lcd.begin(numRows, numCols);
lcd.clear();
lcd.setCursor(5, 1);
lcd.print("XistiX");
digitalWrite(lcdBackLightPin, HIGH);
pinMode(lcdBackLightPin, OUTPUT);
pinMode(upButtonPin, INPUT);
pinMode(downButtonPin, INPUT);
pinMode(setButtonPin, INPUT);
pinMode(resetButtonPin, INPUT);
}
void loop() {
if(digitalRead(upButtonPin))
{
lcd.setCursor(0, 0);
lcd.print("UP Button");
}
else if(digitalRead(downButtonPin))
{
lcd.setCursor(0, 0);
lcd.print("DOWN Button");
}
else if(digitalRead(setButtonPin))
{
lcd.setCursor(0, 0);
lcd.print("SET Button");
}
else if(digitalRead(resetButtonPin)
)
{
lcd.setCursor(0, 0);
lcd.print("RESET Button");
}
else
{
lcd.setCursor(0, 0);
lcd.print(" ");
}
}
It prints to the screen which button is pressed. When you check the source you will notice that buttons actually has a priority order and you can’t press two more than one button at the same time. I used an if else if structure. I will change this later. It is simply so because it was the easiest to test the buttons and update the screen.
You can download the code as a file from here: xISTIx_Buttons
Posted in microcontroller, xISTIx HSP Controller.
By Isti
– September 21, 2009