Cduino: Arduino Programming with C and Make

Why Cduino?

Annotated Schematics

Mechanical Drawing



API and Sources


Mailing List


Quick Start

First, set up the prerequisite hardward and software. Then unpack the distribution and try the following from the top level directory:

make -rR -C blink writeflash

If the make command fails, be sure to read the hints just above the failure message...

Now your arduino's LED should be blinking.

Talking to the arduino over the serial port takes only two function calls from the term_io module:

make -rR -C term_io writeflash
# Wait a few seconds for the AVR to finish rebooting...
make -rR -C term_io run_screen
# Maybe hit return a few times


  • Support for using multiple AVRISPmkII programmers simultaneously. See the definition of AVRISPMKII_PORT in in the top-level project directory.
  • New software implementation of Msxim one-wire master protocol: one_wire_master.h .
  • New build system support for creating a random 64 bit device ID and loading it into the AVR EEPROM. See the new_random_id target in in the top-level project directory and the random_id_test.c . test program.
  • Numerous improvements and fixes to wireless_xbee.h , including SLEEP_RQ and RESET support.
  • New module for ST Microelectronics LIS331HH accelerometer (and sibling devices): accelerometer.h.
  • New module for Maxstream XBee Series 1 wireless modules: wireless_xbee.h .
  • New module for DC motor control use the Arduino Motor Shield: dc_motor.h.
  • New module for SD card control via SPI: sd_card.h.
  • New module for SPI bus (hardware master-mode only): spi.h.
  • New tupple macros for cleaner encapsulation of IO pin choices in dio.h.
  • New module for using Timer/Counter0 hardware as an interrupt-driven stopwatch: timer0_stopwatch.h.
  • Fixed port device and baud rate autodetction to work with linux kernel 2.6 behavior. Unfortunately this means that autodetection doesn't work with earlier kernels anymore. But it's easy to set the values directly if necessary.
  • Works with Aruino Uno now, hopefully. We try to magically guesses avrdude port and baud rate requirements for Uno vs. Duemilanove Arduinos now (so should work with both).
  • New module for the DFRobot DFR0009 LCD and Keypad shield: lcd_keypad.h .
  • Browsable API and source documentation.
  • New module for HD44780 compatible LCDs: lcd.h .
  • New module for simplified digital IO pin initialization and control: dio.h .
  • Support for building C++ sources. This project is still all in C, but if anyone wants to use it with C++ it should be easier. This also make it a lot easier to borrow code from the Arduino libraries :)


This package contains:

  • a Makefile setup for programming an arduino (or other Atmel ATMega chip) using unix command line tools
  • a library of simple modules to do various interesting things with an ATMega (blink a LED, talk over a serial line, drive simple LCD display, etc.)
In other words, it's a lots like the excellent arduino project and uses the same open hardware, but avoids the new wiring language, the C++ intermediate layer, and the Java-based IDE. Crusy old (and young) Unix/C programmers rejoice!


Bugs and Feature Requests

Please send these to the mailing list.

Good luck!