Best way to learn Arduino w/out any boards?

As the topic subject reads: are there ways for me to learn Arduino without having any boards atm? I have an Arduino esplora from school, but basically nothing else. Are there online simulators I can use to learn Arduino before buying more boards?

If you download the Arduino IDE you can write and compile programs without needing an Arduino board.

That will allow you to develop a program to the stage where there are no compiler errors, but of course it won't allow you to run the program.

IIRC I saw a YouTube link for an Arduino simulator in the last few days.

You can get an Uno or nano clone very cheaply. IMHO it would be much better than any simulator. Of course, if you can afford it please buy some genuine Arduinos to support the Arduino development.


Due to being fairly specific to a given usage, the Esplora is a little more limiting than the more general purpose boards like the Nano and Uno. However, but you can still do a ton of learning with that board alone. And if you are limited in resources and only interested in learning, rather than accomplishing some specific project, the Esplora is actually great because it comes with so much hardware built right in to the board. So as long as you have access to play with the Esplora as much as you like, I really see no reason to spend time messing with a simulator.

Until you get some hardware of your own, you can spend time reading the many links on the internet.

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:

Why MOSFET gate resistors:

Some things to read

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:

Micro Controllers:

Useful links:

Arduino programming traps, tips and style guide:

Call for useful programming discussions

Jeremy Blume:

Arduino products:



Share tips you have come across, 500+ posts:

Images from above:“Share+tips+you+have”+larryD+site:

Debug discussion:

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. We'll touch on this later.

You select the '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'. int temperature;
  • if your variable needs to be within -64 to +64 a 'char' will do nicely. char joystick;
  • if your variable is used for ASCII then you need type 'char', char myText = {"Raspberry Pie Smells"};
  • if your variable enables some code then boolean can be used. boolean enableFlag = false;
  • millis() returns the time in ms since rebooting, unsigned long currentTime = millis();