Communicating with a CAN bus through an LPT printer port

… because, why not?

A few months back, I found myself in a position where I needed to develop a proof of concept for a CAN bus data logging system, but the hardware hadn’t been finalised. At the time, there were talks of using x86-based hardware, which would eventually communicate with the CAN bus via an SPI CAN controller. Unfortunately the dev board was on back-order and I wanted to keep the project moving. Continue reading


Tasks: A Time-Triggered Scheduler for Arduino

This has been a long time coming. A few years ago (back in 2012!) I wrote a basic TT scheduler which was really more of a ‘proof of concept’ and not really friendly for an everyday Arduino user. It relied on a strong knowledge of C or C++ and needed Eclipse with an Arduino plugin to get it to work. I’ve promised myself since then that I’d  write a proper Arduino library to demonstrate time-triggered scheduling to Arduino IDE users as well as learning some C++ skills for myself. Continue reading

The Beatles: Hey Jude in C (Programming)

Bit of fun for a Saturday afternoon… This afternoon’s procrastination was sparked off this morning when I logged in to Facebook. Someone had posted this fantastic flowchart of the Beatles’ Hey Jude lyrics:


I immediately realised that if the song structure can be put into a flowchart, it can be coded. I’m always looking for fun ways of practicing my programming, and this was suitably humorous and trivial! So I fired up Eclipse, googled the lyrics and got writing. Continue reading

12-zone perimeter detection from 6 ultrasonic sensors

The proximity sensing in ‘An Accident Waiting to Happen’ was done by a PICAXE 28X2 microcontroller, reading 6 Devantech SRF-10 ultrasonic sensors mounted around the perimeter of the table. The PICAXE board was programmed in PBASIC using their proprietary IDE. The detection cones of the 6 sensors overlapped slightly, so there were area where an observer would only be detected by one sensor, and also areas in between these where they would be detected by 2 sensors. This gave us 12 ‘zones’ in which to detect objects. Proximity readings were taken by the 6 sensors in sequence, and this was output to the PLC as a 4-bit parallel signal representing which zone had the closest object. Continue reading