Skip to content


Adding external connections

Today I soldered  pin headers for the outputs, ground and power. I will connect the jumper cables from the back panel to them. After brainstorming for a while I figured out the input connections need somewhat different setup. They need one jumper wire per connector, since I would like to have a switch like input, so I cannot manage with common ground on the connectors. I separated the first four connectors on the back panel and each got their separate jumper cables.

Then I soldered similar circuits to the analog inputs 5, 4, 3, and 2 like I used for the push buttons. 10K resistor pull the input down to the ground. Then the same input is connected to the +5V via a jumper and a 500 ohm resistance. The jumper is then connected to the external connector. By shorting the external connector it works similarly as a push button. If a variable resistor is connected to the external connector then it works as an analog input.

Here is a picture about the board:

Analog inputs and their connections to the back panel

Posted in microcontroller, xISTIx HSP Controller.


The box

Since the circuit is almost ready I started to think about the box. I do not want to send money on it, so I looked around my garbage heap. I found an old zip drive. Earlier I thought I will sell it on Ebay. Yes, yes it was working. Well just was :) RIP. I checked on Ebay, there are plenty of them for sale and even if they sell they worth about 5-8$ so it does not worth the effort for me.

I disassembled the box. Well it is not the best for this project, since it is closing with clips and not screws but it was free so I can live with that. I tried my board into it and found that I have to cut a couple of centimeters from the end of the board.

Here are some pictures about the box and the cut board:

ZIP drive box

Now the board is shorter

As you can see I cut two holes on the side of the box. They are for the external power connector and usb connector of the arduino. I still have to cut a hole for the LCD and drill some holes for the potentiometers and buttons.

I also assembled connectors to the back panel of the box:

Back panel

I soldered jumper cables to the connectors. Two connector is connected to a single jumper cable. The second pins of each connector are connected together and the will be connected to the ground. I also use a jumper cable for that.

Posted in microcontroller, xISTIx HSP Controller.


Potentiometers added

I have added two potentiometers to the board. Actually I had only one potentiometer but the board is ready for the other one as well. It was fairly easy. I just added two connectors each with two pins. The first connector is sitting on the +5v and GND lines. The other one is connected to the analog input 0 and 1 pins. Since in both case the pins are neighboring pins on the arduino I didn’t need to make additional connections. Just solder the pins and that is it. When I was ready I crimped two cables for the connectors. I soldered the two wires of the first cable to the two side pins of the potentiometer. I connected this cable to the connector on the +5V-GND.  Then I soldered one wire from the second cable two the middle pin of the potentiometer.

When I will get the second potentiometer I will connect its side pins to the corresponding pins on the other potentiometer. The middle pin will be connected to the free wire on the second cable.

I will use the connected potentiometer for setting a treshold value. For instance it can be used for calibrating microphone input. The second potentiometer will be used to input delay values. I will use a precision potentiometer (turns 10x) for that.

Here is a picture of the hardware:

Potentiometer added

I also added the treshold input to the code:

// include the library code:
 #include <LiquidCrystal.h>

 const int numRows = 2;
 const int numCols = 16;

 //Digital pins
 const int lcdBackLightPin = 12;
 const int upButtonPin = 6;
 const int downButtonPin = 5;
 const int setButtonPin = 4;
 const int resetButtonPin = 3;

 //Analog pins
 const int tresholdPin = 0;

 char* mainMenu[]={"start", "delay", "treshold", "test"};
 int mainMenuIndex = 0;
 int mainMenuNextItem = 1;
 int mainMenuItemNum = 4;
 boolean menuUpdate = false;

 int treshold = 0;

 // 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 setTreshold()
 {
   int cursorOn = 1;
   delay(300);

   while(!digitalRead(setButtonPin))
   {
     treshold = analogRead(tresholdPin);
     lcd.clear();
     lcd.setCursor(0, 0);
     lcd.print("Treshold:");
     lcd.setCursor(0, 1);
     if(cursorOn)
     {
       lcd.print("> ");
       cursorOn = 0;
     }
     else
     {
       lcd.print("  ");
       cursorOn = 1;
     }

     lcd.print(treshold);

     delay(300);
   }
 }

 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;
   }
   else if(digitalRead(setButtonPin))
   {
     switch(mainMenuIndex)
     {
       /*
       case 0:     
       break;

       case 1:
       break;
       */
       case 2: setTreshold();
         menuUpdate = true;      
       break;
       /*  
       case 3:
       break;

       default:
       */
     }
   }

   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);
   }
 }

Posted in microcontroller, xISTIx HSP Controller.