Невероятно популярный вариант - программировать Arduino непосредственно на C, а не на Wiring (язык программирования, используемый в Arduino IDE).Это позволяет гораздо больше контролировать работу вашего микроконтроллера на низком уровне.
Arduino IDE поддерживает C (поскольку Wiring основан на C и C ++) и компилируется с помощью цепочки инструментов AVR-GCC, или вы можете перейтибез среды и использования текстового редактора, командную строку (с установленным набором инструментов AVR-GCC) и avrdude (инструмент командной строки, доступный в MAC, Windows и Linux).
Устройства AVR также можно легко программироватьс Atmel Studio (ранее AVR Studio), которая может использовать множество языков программирования.
На форумах Arduino имеется много информации для программирования на языке C.
Информация о наборе инструментов AVR-GCCможно найти здесь.
http://www.nongnu.org/avr-libc/
Лично мне очень нравилось преодолевать трудности и учиться программировать микросхему AVR без IDE, но это сводится к личным предпочтениям и желаниюучиться.