How can I learn arduino as a 16 year old

I am writing this post to ask how you guys learned arduino? Did you learn by taking online courses, videos, etc?

I've had an arduino mega 2560 kit for a year now. The kit came with over 20 lessons, each about a different component. For the first 10 lessons I felt like I was learning a lot - understanding the code and how to wire everything. But, as I went on, these lessons started including libraries, and while I get they're helpful, I felt like I just stopped learning and instead was just copy pasting code.

I am familiar with the C language - I've read "Beginning C for Arduino," by Jack Purdum - but I don't know how I should tackle learning about all of the components that came with my kit. I really want to make projects where I can use them, but I don't want to have to rely on just copy pasting the code from the lessons to use the components.

All in all, what I'm trying to ask is: did you guys learn from doing the lessons in the arduino packet? If not, how did you learn?

You should really become familiar with the C++ language, but if you're very lucky, Jack may be along shortly :wink:

Shoot for the moon and if you miss you will still be among the stars.
Les Brown

Those libraries that do those mysterious things, have you looked under the hood? Opened up those libraries, learn how to read other peoples code, ask what does this do, take the time to look up each new instruction?

I know of one guy, long time ago, who learned electronics from reading the books by himself. My recommendation is get into some school program that gets you learning about those components.

There really is no magical solution. You prepare by reading up on whatever you want to work on and then learn by doing. Be prepared to accept that failure plays a big role in both learning and in development, the trick is to not give in as you'll get there eventually.

Give yourself a realistic goal and incrementally work towards that. Since determining whether a goal is realistic or not can be somewhat tricky to a novice, I think you should consult the forum to get someone elses opinion.

If your goal is to learn, and you're not learning by using libraries and copying code, then you should avoid it. Listen to general advice and when concepts are explained, but ignore posted code and attempt to implement it yourself.

Also if things are getting tough and you keep starting over and over, rest assured that everyone else does too sometimes.

...hit London
Werner Von Braun

I like this!

The internet is all you need.

Arduino links of interest.

How to use this forum:

Getting started:

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:

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:

Sparkfun Tutorials:

Micro Controllers:

Useful links:

Arduino programming traps, tips and style guide:

Arduino programming course:

Jeremy Blume:

Arduino products:


Making a library


Share tips you have come across, 700+ 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 to 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 to 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 to 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. Sparkfun.

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();

Oh, and have fun too :slight_smile: !

1 Like

Thank you so much to everyone who took the time to respond. You all have motivated me to not give up and have given me hope.

1 Like

You use libraries but you might not realise it. When using e.g. Serial.println("Hello world"), you use the HardwareSerial library.

Once you think that you know what you need to know, set yourself a little project. No idea what comes with the starter kit but you can think of a little clock or egg timer with a LCD or a running light as in the tv series knight rider ( I know, before your time :wink: )