So I’ve managed to read the dartboard using the Arduino. Truth be told, I’ve been able to do that since I posted the photo of everything wired together. I spent much of the last few days repairing a friends laptop, and modifying the code used to interface the board. Originally, I thought I was going to design my own set of functions and such to read the output of the board, but lady luck was good to me! It turns out dartboards are wired like keypads (A matrix format I’m told). I loaded up the Keypad library and gave it a test. This may have been the easiest part of my ‘hack’ so far. Now for the code:
/* DartBoard.ino
Using the Keypad Library for Arduino
to interface a dartboard.
This Dartboard uses Two 8 contact
FPC (I think they’re called) connectors
to read which segment was hit. As luck
would have it, keypads are wired in
same fashion.I based my code off of the “Custom Keypad”
example in the Keypad library!Author: TiredJuan
*/
#include <Keypad.h>const byte ROWS = 8; //Eight rows
const byte COLS = 8; //Eight columns
//I use this next variable to determine which segment was hit,
//as I don’t readily know which segment will connect to which
//connectors.
char dartSegments[ROWS][COLS] = {
{‘!’,’1′,’2′,’3′,’4′,’5′,’6′,’7′},
{’8′,’9′,’0′,’a',’b',’c',’d',’e'},
{‘f’,'g’,'h’,'i’,'j’,'k’,'l’,'m’},
{‘n’,'o’,'p’,'q’,'r’,'s’,'t’,'u’},
{‘v’,'w’,'x’,'y’,'z’,'A’,'B’,'C’},
{‘D’,'E’,'F’,'G’,'H’,'I’,'J’,'K’},
{‘L’,'M’,'N’,'O’,'P’,'Q’,'R’,'S’},
{‘T’,'U’,'V’,'W’,'X’,'Y’,'Z’,'~’}
};
byte rowPins[ROWS] = {3,4,5,6,7,8,9,10}; //dartboard connector #1
byte colPins[COLS] = {11,12,13,A5,A4,A3,A2,A1}; //dartboard connector #2//Setting up the custom Dartboard. Using the Keypad
//library has made things so much easier for me.
Keypad dartBoard = Keypad( makeKeymap(dartSegments), rowPins, colPins, ROWS, COLS);void setup(){
Serial.begin(9600);
}void loop(){
char segmentHit = dartBoard.getKey();if (segmentHit){
Serial.println(segmentHit);
}
}
It’s pretty self explanatory, if you know anything about Arduino code. Plus I actually commented this one! I had issues testing to see which segment corresponded to which row/column, but that was due to an idiotic error on my behalf. The code shown should make it easy to map the Segments on the board.
Now you may be asking yourself “Dartboards have 82 segments, how can it be a matrix of 8×8? That’s only 64 possible combinations!” The answer is this: While each number on the board has 4 segments (Double/Single/Triple/Single) The two single segments are wired together so in reality there’s only 62 buttons on the output side of things. Here’s a photo (READ: Scribbles) of which segments output which characters from our Keymap (named dartSegments in the code):
Sorry for the poor photo quality, I have seriously bad lighting and no real desk space. If you look closely, you can see which segments I had issues identifying (but not why! lol) Also a sidenote: I used single chars for my identifiers because I plan on using those cheap-o wireless modules from previous posts during my testing phases. (So I don’t have to wire it to it’s computer brain just yet!)
That’s it for now, hopefully I will make more progress tonight after work.

Pingback: The Board: MAkeshift-duino | Tired Juan's Blog