No idea where to start

Hi everyone.

Who am I
I'm an 18 years old highschool student from Portugal. I'm interested in physics, code, music, and anything in between (Generative art, physics simulations, datascience..... )


  • Programming: I've been programming for some time and I'm confortable with python, javascript, some C and some Nim
  • Eletronics: I hostly have no real experience with circuits. I know the theory behind eletrical current, potentiometers, capacitors... from my physics classes, and I've made some small circuits, but nothing I would consider complex.
  • Arduino: I've never used one.
  • Music: I make boombap and lofi beats, it's mainly sampled, but I'm learning a bit of synthesis
  • DSP(digital signal processing): I've started to read a book, but I have not aplied it to anything (at least I'm confortable with the math)


(I know that this in no way technical. Sorry!)

My project idea is to make a synth with an arduino that can be used as a shell for other synths:
I have the shell/box and then I can just make new code to change the type of synth I have

I'm thinking of using some style of push btn's so that it is small-ish

I want to make a synth and I don't know how/where to start.


  • 1 - What board should I use? (I was thinking on using the nano)
  • 2 - Any good book/series on arduino synthesizers?
  • 3 - Any good book/series on DSP
  • 4 - Should I learn more about Electronics before diving into arduino
  • 5 - Any tips on anything related to this?
    (no particular order)

Thx for reading (I know this is a bit long)

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: !

Or click on this:

1 Like
1 Like

Google for “Arduino audio projects” and study some which you could use as a base for your own project.
If you are actually going to create sounds, like dynamically creating and playing say .wav files etc., a Nano does not have the performance. You’ll probably need something with a 32bit processor and has hardware support for I2S (audio bus) for connecting to an external DAC (digital to analog converter). The rest of it such as creating an interface to it using switches, potentiometers, displays etc. is the simple part of it.

1 Like

If you want an easy to build synth with an Arduino I would recommend you start with this one.

1 Like

That is very impressive from an 8 bit processor (ATMega328).

1 Like

Perhaps more realistic for a beginner is this

1 Like

Thx a lot everyone.

@LarryD Thx for the links. I will def. read them when I have time.
Koepel That is freaking amazing
ard_newbie Thx for the links
@6v6gt I was thinking of conecting it somehow to my sound interface and record it directly into my computer
Grumpy_Mike MintySynth seems a fantastic idea

Constructive synthesis guide: