New library - WAKEUP


I'm in the process of developing a home automation project that is as event-driven as possible. So interrupt-handling wins out over polling, testing millis() regularly is equivalent to polling, and delay() is definitely not a preferred approach.

However, many devices need time to stabilise between initiating a read and the value being available. The Dallas temperature sensors are the obvious example, but I'm sure there are others.

So what I needed was a way to initiate a read and then return a certain time later to capture the value. The result is a library I've called WAKEUP that allows multiple 'sleeper' functions to be woken after a specified interval, allowing the main program to get on with other things in the meantime. This enables a crude form of co-operative processing or 'protothreading'.

I'm a newbie when it comes to libraries and have doubtless made some elementary mistakes, although I have tested it pretty thoroughly (on a Mega). However, I'd appreciate some more experienced eyes on the code. After several false starts I've managed to create a project on google, so you can find the code here:

Haven't managed to master the creation of a nicely structured download (sorry!), but if you go to source > browse and download everything under trunk > libs that should get you started. It includes a modified version of Timer1, already discussed with Lex at and the following examples:

  • Multi_timer - series of examples making use of the library
  • Dallas_temperature - an example showing how to return to pick up reading 750ms after initiating it
  • Calibration - done as an exercise to figure out the right value to compensate for code lag

All comments appreciated. Many thanks in advance

  • Andrew