A second year assignment at my polytechnic university was to build a remote controlled boat, together with students from other engineering disciplines at the university that we had never worked with before. This included electrical engineering, embedded engineering and mechanical engineering. The goal was to create a fully working remote controlled boat from scratch after which the teams-boats would battle in a race in the Leeuwarden canals.
During this project I tasked myself with learning more about embedded development and spent most of my time creating the control software for the boat which ran on a PIC1650 chip, next to being the project lead and developing the desktop control app. As a design goal our team had chosen to try and handle everything on 1PIC controller to save time. While this offloaded some of the electrical engineering effort as we could use an already done board it added a lot more effort on the software side where now 1 interrupt had to be used to drive multiple different resolution timers.
The assignment required that the remote control be done over Bluetooth and would be controlled through a laptop. As always I wanted to top the requirements and add a graphical representation of the traveled path and sensor data of the boat. There was a water turbidity sensor, compass and a flame thrower (which sadly did not end up working) that would be used to pop balloons which could award bonus points in the race.
The desktop control app, used OpenGL to draw the heading and boat path. The input controls were read through DirectInput, where I reused a previous input abstraction library that I had written, called SDI. SDI was originally used in iQU (a friends FPS engine) and later on in the Valley Of Neustria for abstracted and unified mouse keyboard and HID input.
As we did not have a lot of oportunity to do much full integration testing, the control application was designed in such a way where most settings could be configured through the UI and sent to the boat controller.