Here's a listing saved to an external file that adds Arduino as a language, and highlights all the builtin types and functions properly.
Place arduinoLanguage.tex
file in your working directory (next to the LaTeX file you're working on). To add it to your project, place:
\input{arduinoLanguage.tex}
somewhere before \begin{document}
in your LaTeX file.
In your document, place your Arduino code between:
\begin{lstlisting}[language=Arduino]
%% arduino code here %%
\end{lstlisting}
Or create your own style to make changes like adding non-built-in functions and variables:
\lstdefinestyle{myArduino}{
language=Arduino,
%% make listing changes here %%
}
And place your Arduino code between:
\begin{lstlisting}[style=myArduino]
%% arduino code here %%
\end{lstlisting}
arduinoLanguage.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% ~ Arduino Language - Arduino IDE Colors ~ %%%
%%% %%%
%%% Kyle Rocha-Brownell | 10/2/2017 | No Licence %%%
%%% -------------------------------------------------------------------------- %%%
%%% %%%
%%% Place this file in your working directory (next to the latex file you're %%%
%%% working on). To add it to your project, place: %%%
%%% \input{arduinoLanguage.tex} %%%
%%% somewhere before \begin{document} in your latex file. %%%
%%% %%%
%%% In your document, place your arduino code between: %%%
%%% \begin{lstlisting}[language=Arduino] %%%
%%% and: %%%
%%% \end{lstlisting} %%%
%%% %%%
%%% Or create your own style to add non-built-in functions and variables. %%%
%%% %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{color}
\usepackage{listings}
\usepackage{courier}
%%% Define Custom IDE Colors %%%
\definecolor{arduinoGreen} {rgb} {0.17, 0.43, 0.01}
\definecolor{arduinoGrey} {rgb} {0.47, 0.47, 0.33}
\definecolor{arduinoOrange} {rgb} {0.8 , 0.4 , 0 }
\definecolor{arduinoBlue} {rgb} {0.01, 0.61, 0.98}
\definecolor{arduinoDarkBlue} {rgb} {0.0 , 0.2 , 0.5 }
%%% Define Arduino Language %%%
\lstdefinelanguage{Arduino}{
language=C++, % begin with default C++ settings
%
%
%%% Keyword Color Group 1 %%% (called KEYWORD3 by arduino)
keywordstyle=\color{arduinoGreen},
deletekeywords={ % remove all arduino keywords that might be in c++
break, case, override, final, continue, default, do, else, for,
if, return, goto, switch, throw, try, while, setup, loop, export,
not, or, and, xor, include, define, elif, else, error, if, ifdef,
ifndef, pragma, warning,
HIGH, LOW, INPUT, INPUT_PULLUP, OUTPUT, DEC, BIN, HEX, OCT, PI,
HALF_PI, TWO_PI, LSBFIRST, MSBFIRST, CHANGE, FALLING, RISING,
DEFAULT, EXTERNAL, INTERNAL, INTERNAL1V1, INTERNAL2V56, LED_BUILTIN,
LED_BUILTIN_RX, LED_BUILTIN_TX, DIGITAL_MESSAGE, FIRMATA_STRING,
ANALOG_MESSAGE, REPORT_DIGITAL, REPORT_ANALOG, SET_PIN_MODE,
SYSTEM_RESET, SYSEX_START, auto, int8_t, int16_t, int32_t, int64_t,
uint8_t, uint16_t, uint32_t, uint64_t, char16_t, char32_t, operator,
enum, delete, bool, boolean, byte, char, const, false, float, double,
null, NULL, int, long, new, private, protected, public, short,
signed, static, volatile, String, void, true, unsigned, word, array,
sizeof, dynamic_cast, typedef, const_cast, struct, static_cast, union,
friend, extern, class, reinterpret_cast, register, explicit, inline,
_Bool, complex, _Complex, _Imaginary, atomic_bool, atomic_char,
atomic_schar, atomic_uchar, atomic_short, atomic_ushort, atomic_int,
atomic_uint, atomic_long, atomic_ulong, atomic_llong, atomic_ullong,
virtual, PROGMEM,
Serial, Serial1, Serial2, Serial3, SerialUSB, Keyboard, Mouse,
abs, acos, asin, atan, atan2, ceil, constrain, cos, degrees, exp,
floor, log, map, max, min, radians, random, randomSeed, round, sin,
sq, sqrt, tan, pow, bitRead, bitWrite, bitSet, bitClear, bit,
highByte, lowByte, analogReference, analogRead,
analogReadResolution, analogWrite, analogWriteResolution,
attachInterrupt, detachInterrupt, digitalPinToInterrupt, delay,
delayMicroseconds, digitalWrite, digitalRead, interrupts, millis,
micros, noInterrupts, noTone, pinMode, pulseIn, pulseInLong, shiftIn,
shiftOut, tone, yield, Stream, begin, end, peek, read, print,
println, available, availableForWrite, flush, setTimeout, find,
findUntil, parseInt, parseFloat, readBytes, readBytesUntil, readString,
readStringUntil, trim, toUpperCase, toLowerCase, charAt, compareTo,
concat, endsWith, startsWith, equals, equalsIgnoreCase, getBytes,
indexOf, lastIndexOf, length, replace, setCharAt, substring,
toCharArray, toInt, press, release, releaseAll, accept, click, move,
isPressed, isAlphaNumeric, isAlpha, isAscii, isWhitespace, isControl,
isDigit, isGraph, isLowerCase, isPrintable, isPunct, isSpace,
isUpperCase, isHexadecimalDigit,
},
morekeywords={ % add arduino structures to group 1
break, case, override, final, continue, default, do, else, for,
if, return, goto, switch, throw, try, while, setup, loop, export,
not, or, and, xor, include, define, elif, else, error, if, ifdef,
ifndef, pragma, warning,
},
%
%
%%% Keyword Color Group 2 %%% (called LITERAL1 by arduino)
keywordstyle=[2]\color{arduinoBlue},
keywords=[2]{ % add variables and dataTypes as 2nd group
HIGH, LOW, INPUT, INPUT_PULLUP, OUTPUT, DEC, BIN, HEX, OCT, PI,
HALF_PI, TWO_PI, LSBFIRST, MSBFIRST, CHANGE, FALLING, RISING,
DEFAULT, EXTERNAL, INTERNAL, INTERNAL1V1, INTERNAL2V56, LED_BUILTIN,
LED_BUILTIN_RX, LED_BUILTIN_TX, DIGITAL_MESSAGE, FIRMATA_STRING,
ANALOG_MESSAGE, REPORT_DIGITAL, REPORT_ANALOG, SET_PIN_MODE,
SYSTEM_RESET, SYSEX_START, auto, int8_t, int16_t, int32_t, int64_t,
uint8_t, uint16_t, uint32_t, uint64_t, char16_t, char32_t, operator,
enum, delete, bool, boolean, byte, char, const, false, float, double,
null, NULL, int, long, new, private, protected, public, short,
signed, static, volatile, String, void, true, unsigned, word, array,
sizeof, dynamic_cast, typedef, const_cast, struct, static_cast, union,
friend, extern, class, reinterpret_cast, register, explicit, inline,
_Bool, complex, _Complex, _Imaginary, atomic_bool, atomic_char,
atomic_schar, atomic_uchar, atomic_short, atomic_ushort, atomic_int,
atomic_uint, atomic_long, atomic_ulong, atomic_llong, atomic_ullong,
virtual, PROGMEM,
},
%
%
%%% Keyword Color Group 3 %%% (called KEYWORD1 by arduino)
keywordstyle=[3]\bfseries\color{arduinoOrange},
keywords=[3]{ % add built-in functions as a 3rd group
Serial, Serial1, Serial2, Serial3, SerialUSB, Keyboard, Mouse,
},
%
%
%%% Keyword Color Group 4 %%% (called KEYWORD2 by arduino)
keywordstyle=[4]\color{arduinoOrange},
keywords=[4]{ % add more built-in functions as a 4th group
abs, acos, asin, atan, atan2, ceil, constrain, cos, degrees, exp,
floor, log, map, max, min, radians, random, randomSeed, round, sin,
sq, sqrt, tan, pow, bitRead, bitWrite, bitSet, bitClear, bit,
highByte, lowByte, analogReference, analogRead,
analogReadResolution, analogWrite, analogWriteResolution,
attachInterrupt, detachInterrupt, digitalPinToInterrupt, delay,
delayMicroseconds, digitalWrite, digitalRead, interrupts, millis,
micros, noInterrupts, noTone, pinMode, pulseIn, pulseInLong, shiftIn,
shiftOut, tone, yield, Stream, begin, end, peek, read, print,
println, available, availableForWrite, flush, setTimeout, find,
findUntil, parseInt, parseFloat, readBytes, readBytesUntil, readString,
readStringUntil, trim, toUpperCase, toLowerCase, charAt, compareTo,
concat, endsWith, startsWith, equals, equalsIgnoreCase, getBytes,
indexOf, lastIndexOf, length, replace, setCharAt, substring,
toCharArray, toInt, press, release, releaseAll, accept, click, move,
isPressed, isAlphaNumeric, isAlpha, isAscii, isWhitespace, isControl,
isDigit, isGraph, isLowerCase, isPrintable, isPunct, isSpace,
isUpperCase, isHexadecimalDigit,
},
%
%
%%% Set Other Colors %%%
stringstyle=\color{arduinoDarkBlue},
commentstyle=\color{arduinoGrey},
%
%
%%%% Line Numbering %%%%
numbers=left,
numbersep=5pt,
numberstyle=\color{arduinoGrey},
%stepnumber=2, % show every 2 line numbers
%
%
%%%% Code Box Style %%%%
breaklines=true, % wordwrapping
tabsize=2,
basicstyle=\ttfamily
}