Nearly every electronic enthusiast knows them and everyone programming in C hates them: Arduinos. But why?

First things first: Arduino is a combination between hard- and software for an easy start in programming microcontrollers. The µcontrollers are mainly AVRs on prototype circuit boards. The IDE (Integrated Development Environment) is used with a C based programming language and the feature to easily write little programs (or sketches, how they are called in Arduino environment) and directly upload them to the µC. There are a lot of different useful functions as well as whole libraries for nearly everything.

Beginners can learn fast how to write a program and success is achieved rather quickly. I am working frequently with Arduinos myself, just because it is really easy. Well, technically it still is C.

But everything has a bad side: since all functions are saved as subroutines, they are called over and over and over again. Because of this even small sketches are getting quite large in storage size, not only filling up the programming space on the controllers, but also slowing them down a lot.

Small example:
I programmed the ATmega328P-PU controller so that it toggles a pin without delay. Core frequency was set at 16MHz.

Programmed in C the output peaked at 4,17MHz.
Programmed in Arduino the output peaked at 217,3kHz.

That is about 20 times slower and it only is 1 pin. The Arduino framework can get really slow really fast. So Arduino is not really designed for fast processing applications.

BUT:
That is not the purpose of Arduinos. Arduino was made in order to help beginners learning how to program microcontrollers. From small blinking lights to 8x8x8 RGB LED-cubes and electronic parts testers, these little boys can do a lot! And even if they are a bit slow on the one side, it is really easy to write a little program for prototyping and thats why I still use them.

But what if Arduinos are too slow for you? Well, it still is a derivative of C, so you don’t have to learn a whole new programming language once you got away from them.

C code can be ported easily from one microcotroller to another. If you go for AVRs or PICs that is totally your choice. Or even go for ARM 😉

In a nutshell:
Even though C is the high-level programming language for microcontrollers, Arduino still comes in handy for small quick and dirty projects. And as mentioned it is really easy and perfect for beginners.

After you are fluent in Arduino you still can go for C since it is not that different.