[sdiy] Programming Language Recommendation

Spiros Makris spirosmakris92 at gmail.com
Fri Dec 4 19:25:40 CET 2020

Perhaps it is not clear: Arduino (and HAL) *is C/C++. *They are a set of
libraries that sit between you and the low level definitions of registers
(a "hardware abstraction"), but it's all written in C and knowing how to
speak one you can learn to speak the other very fast.
For example,
To set an output pin in arduino you call

pinMode(PIN, OUTPUT);

This is a C function that inside it hides all the gritty details of setting
the appropriate registers as they are described in the manual. for
atmega328p you would write something like


The ease comes from the fact that somewhere in the arduino libraries there
are definitions, that tell the libraries how to handle different boards. If
you plug in a teensy, which is STM32, PJRC has done this work and pinMode()
will call whatever is appropriate for that processor. Instead of having to
clearly tell the system which pin of which port you want to manipulate, it
lets you refer to it with a simple mnemonic to lower the complexity.
HAL does the same thing, but uses its own lingo. It's still C and all the
syntax rules, features and tricks apply.
So, basically, pick up an arduino and a breadboard, read up on how to
interface it with 12V signals and start playing around. Sequencers, led VU
meters, MIDI to CV, CV recording, random generators, sample and holds are
only a few examples of what you can do with the humble nano and some extra

On Fri, Dec 4, 2020 at 7:57 PM Shawn Rakestraw <shawnrakestraw at gmail.com>

> Spiros, if you were at about the same level with either C or Arduino,
> would you say one is better to fully learn before the other? Thanks for
> mentioning the STM32 libraries. I will remember that for the future.
> On Fri, Dec 4, 2020 at 12:50 PM Spiros Makris <spirosmakris92 at gmail.com>
> wrote:
>> Hi,
>> STM32 has its own libraries (nicknamed "HAL" - hardware abstraction
>> layer) which in many ways feels like an arduino; of course the names of the
>> functions and the structure of the whole thing is different, but the goal
>> is similar.
>> The controllers you're probably interested in all use C/C++ so as far as
>> languages go, that's the most obvious (and reasonable) choice. C can be
>> confusing but I think most of it should be within reach for anyone with a
>> programming affinity.
>> Don't get into the library trap that many Arduino developers seem to
>> fall. They are nice to kickstart a project and give you an idea of how
>> things work but don't be fooled into thinking that you can postpone
>> learning the "deeper" stuff forever. Hopefully, all the stuff you need will
>> be out there, maintained and working well; that has rarely been the case
>> for me, there's always something missing and you have to fill in the blanks.
>> Try not to think of embedded C like you would a high-level scripting
>> language like python. You are not commanding obscure black boxes around and
>> some manager just figures it out - you need to be conscious of what you are
>> asking the system to do and very specific as to how it will be done.
>> Abstraction, objects and other such features help you manage this
>> complexity, but it will always be there to an extend.
>> Arduino (atmega328p basically) is perfectly capable of doing lots of
>> stuff.  It certainly can't do DSP, but that's only a small part of what
>> digital modules do inside our synths. Unless you really are shooting for
>> sound processing or generation chances are an Arduino nano will do just
>> fine.
>> Spiros
>> On Thu, Dec 3, 2020 at 4:49 AM Shawn Rakestraw <shawnrakestraw at gmail.com>
>> wrote:
>>> Please don't go into extreme detail (unless you really want to). I ask
>>> too many simple questions and I feel bad that everyone spends great amounts
>>> of time with it.
>>> I am thinking about programming ARM chips like the STM32 for something
>>> like Braids. I know that I will not be making my own Braids module anytime
>>> soon, but I would like to start thinking about the language I need to
>>> learn. I know the most about C++. I also realize that my question may be
>>> better asked as what libraries should I load / study up on.
>>> Thanks guys/gals
>>> _______________________________________________
>>> Synth-diy mailing list
>>> Synth-diy at synth-diy.org
>>> http://synth-diy.org/mailman/listinfo/synth-diy
>>> Selling or trading? Use marketplace at synth-diy.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://synth-diy.org/pipermail/synth-diy/attachments/20201204/fe46055f/attachment.htm>

More information about the Synth-diy mailing list