The Arduino IDE leaves a lot to be desired. Granted, it's easy for beginners to build and upload sketches, but as a text-editor it makes you want to smash your keyboard against your monitor. Repeatedly.

Files open in new windows instead of a tab, and there are no advanced features like auto-complete; did I mention it looks like a relic from the Windows 95 era?

This article describes how you can free yourself from the shackles of the Arduino IDE and program your Arduino using vim.

# arduino-makefile

arduino-makefile by Sudar Muthu is a great project that allows you compile, upload, and monitor the serial port using a simple makefile.

How simple you ask? 4 lines! Seriously. And one of those is blank!

Let's work through an example together, from scratch. Let's create a makefile for the legendary Blink sketch.

## 1. Install the Arduino IDE

wget -O arduino.tar.xv http://arduino.cc/download.php\?f\=/arduino-1.6.8-linux64.tar.xz
mkdir ~/.arduino_ide
tar xf arduino.tar.xv -C ~/.arduino_ide --strip-components=1


## 2. Install arduino-makefile

To install arduino-makefile we'll use git to clone the project:

git clone https://github.com/sudar/Arduino-Makefile.git ~/.arduino_mk


You should now have the Arduino IDE installed in ~/.arduino_ide and arduino-makefile installed in ~/.arduino_mk if you've used the same paths as I have above.

## 3. Create a makefile

Create a folder for the project and copy the Blink sketch to that folder:

mkdir -p ~/projects/blink


Create an empty makefile in the same project folder:

touch ~/projects/blink/Makefile


Open the Makefile in vim and add the following:

ARDUINO_DIR = /home/jon/.arduino_ide
ARDMK_DIR = /home/jon/.arduino_mk
BOARD_TAG = uno

include \$(ARDMK_DIR)/Arduino.mk


That's unbelievably simple. All you do is set some variables, and arduino-makefile takes care of the rest.

 ARDUINO_DIR Path to the Arduino IDE ARDMK_DIR Path to arduino-makefile BOARD_TAG The name of the Arduino board we're programming. Use make show_boards to get a list of available boards.

There are many other variables that can set. One that I use often is ARDUINO_LIBS which specifies the Arduino libraries a project requires. Checkout the arduino-makefile documentation for a complete list.

The last line in the Makefile includes arduino-makefile. You need this!

## 4. Build, upload, and monitor

There are three commands you need to know, which you can type in a terminal:

 make Build the sketch make upload Upload the sketch make monitor Monitor the serial port

Try it out. It's freakin' awesome!

# Integrate with vim

We're now able to write code using vim and use the command-line to build, upload, and monitor our sketch.

Because we're using a makefile, and vim has built-in support for makefiles, integrating with vim requires no effort. None. Nada.

:make Build the sketch
:make upload Upload the sketch
:make monitor Monitor the serial port
When you run :make and there are errors, vim will go to the line where the first error is. The commands :cnext and :cprevious will cycle through the errors.