This repository contains code, panel layouts and documentation for KSKY, a
Kerbal Space Program screen and keyboard. The project is a
hardware control interface and display device for
KSP. It interfaces with the game using
The KSPSerialIO mod, and parts of the arduino code here, are written by


This system has three main components:

  • Game I/O and most of the input handling is done with an Arduino Mega2560,
    with a Mux Shield II and another custom shield terminating connections to the
    individual panels.
  • The digital displays are driven by an Arduino Leonardo and some custom PCBs.
  • A Teensy 3.2 drives a TFT display through an RA8875 controller.

A full hardware list is in BOM.md.

Interface elements are grouped on to a number of console panels. I've
written a blog post describing how these are fabricated, and some notes
on how panels for this project should be deisgned are in NOTES.md.

PANELS.md contains details of the panels I've constructed for this project,
and DXF files for them are in the panels directory.

Wiring notes

Most input devices are just wired directly to an input pin, with a 10K
pull-down resistor. Potentiometers wired directly to their appropriate
analogue input pin. A full list of input pins on the Arduino and Mux
Shield is in PINOUT.md.

Most standalone LEDs so far are WS2812B addressable LEDs. They share 5V
and GND with their appropriate panel, and DIN and DOUT pins are wired in
series to form a single bus.

Schematics and PCBs were created using EAGLE 7.
The freeware license is fine for viewing and editing these designs.

Schematics warning

The current version of the PCB schematics have a couple of severe bugs.

  • The SparkFun footprint for the seven segment displays is around 8mm
    shorter than the component. This resulted in the actual displays overlapping
    the footprints for the LEDs along the edges. On my 1.0 boards I was able
    to bend the LED pins to the side to compensate. But I've created a quick
    1.1 revision of the display boards to fix it.
  • The IDC connector pins on the display and controller boards were mismatched.
    They're unusable unless you're prepared to hack up custom IDC cables or
    similar. I haven't yet tried to fix this.
  • The two MAX7219 ICs that drive the seven-sgment displays just... don't have
    the DP pin connected to anything. The IDC connectors have their DP pins
    connected together, but I just plain didn't add a net from them to the
    MAX7219 pin. That's easily fixed with a couple of short lengths of wire,
    but it sure was startling to discover.

Arduino code

The following libraries are required to build this code:

In addition, the following libraries were written to support this project.
* EngNumber, for converting
floating point numbers to engineering notation.