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


  • 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 its 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, its 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!