Getting deeper in arduino programming


I have been working with arduino for 3 years and program it with arduino IDE, but back than i did not know anything about c++ or programming, and i learned from my experience how to program arduino but not in a professional way or even close.
so from where i can learn advanced programming arduino ?(book or tutorials or sites or...)

Arduino links of interest.

How to use this forum:

Listing of downloadable 'Arduino PDFs' :
Either Google >>>- - - - > arduino filetype: pdf

Listing of downloadable 'C++ PDFs' :
Either Google >>>- - - - > C++ filetype: pdf

Arduino cheat sheet:

Watch these:
Arduino programming syntax:

Arduino arithmetic operators:

Arduino control flow:

Arduino data types:

Jeremy Blume:

Sparkfun External Interrupts

Sparkfun Timer1 Interrupts

Powering You Projects

Understanding Destructive LC Voltage Spikes:


Why MOSFET gate resistors:

Some things to read

LCD information:


Reading a schematic:

Language Reference:


How and Why to avoid delay():

Demonstration code for several things at the same time.

Part 1:

Part 2:

Part 3:

Neopixels, Adafruit


Sparkfun Tutorials:

Micro Controllers:

Useful links:

Arduino programming traps, tips and style guide:

Call for useful programming discussions

Arduino products:



A good book you might want to get:

Share tips you have come across, 500+ posts:

Debug discussion:

Frequently Asked Questions:

Number 'type's:

  • boolean (8 bit) - simple logical true/false, Arduino does not use single bits for bool
  • byte (8 bit) - unsigned number from 0-255
  • char (8 bit) - signed number from -128 to 127. The compiler will attempt to interpret this data type as a character in some circumstances, which may yield unexpected results
  • unsigned char (8 bit) - same as 'byte'; if this is what you're after, you should use 'byte' instead, for reasons of clarity
  • word (16 bit) - unsigned number from 0-65535
  • unsigned int (16 bit)- the same as 'word'. Use 'word' instead for clarity and brevity
  • int (16 bit) - signed number from -32768 to 32767. This is most commonly what you see used for general purpose variables in Arduino example code provided with the IDE
  • unsigned long (32 bit) - unsigned number from 0-4,294,967,295. The most common usage of this is to store the result of the millis() function, which returns the number of milliseconds the current code has been running
  • long (32 bit) - signed number from -2,147,483,648 to 2,147,483,647
  • float (32 bit) - signed number from -3.4028235E38 to 3.4028235E38. Floating point on the Arduino is not native; the compiler has to jump through hoops to make it work. If you can avoid it, you should.

You should always select the 'data type' best suited for your variables.

  • your variable does not change and it defines a pin on the Arduino. const byte limitSwitchPin = 34;
  • since an analog variable can be 0 to 1023, a byte will not do, you can select 'int'. ex: int temperature;
  • if your variable needs to be within -64 to +64 a 'char' will do nicely. ex: char joystick;
  • if your variable is used for ASCII then you need type 'char', ex: char myText[] = {"Raspberry Pie Smells"};
  • if your variable enables some code then boolean can be used. ex: boolean enableFlag = false;
  • millis() returns the time in ms since rebooting, ex: unsigned long currentTime = millis();

Oh, and have fun too :slight_smile: !

Good post Larryd, that should be a sticky.

Great, thank you larryd.