How about a theremin that sounds less like science fiction and only plays notes of a scale – just like you know from the piano or guitar? No problem, but for this you need to familiarize yourself briefly with another important programming building block: arrays.
An array is simply a collection of variables or values. These can be frequencies of notes in a scale, but also any other chain of values that belong together – for example, values for the brightness of an LED, measurement results from the lie detector, etc.
So far, you have assigned a single value to a variable, e.g.,
int var = 10;
An array, on the other hand, can contain several of these values. You declare it as follows:
int myArray[] = {1, 2, 3, 4, 5};
Please note the square brackets after the name of the array. The values in the array are separated by commas within curly brackets.
Accessing values in an array
How can you now read the values in the array above? It’s quite simple, each value in the array has an index, which is a number that defines the position of the value in the array. Just like the note C is the first note in the C major scale and D is the second. That makes sense, but in C++ (and many other languages) you need to note one thing: arrays are zero-indexed, which means that the first value is not at the 1st position in the array, but at the 0th.
So if you want to access the value 1 in myArray[], you do it with the index 0:
int firstValue = myArray[0];
___STEADY_PAYWALL___
You access the second value (i.e., 2) with myArray[1] – and so on. The last value in the array above is the number 5 with the index 4.
But what happens if you want to access a value that doesn’t exist in the array? For example, if you access index 5 in myArray[]? Here your sketch will be a bit lost and won’t provide any meaningful data – and in the worst case, it will crash.
Reading values with a FOR loop
If you want to output all values of the array one after the other, it’s quite simple with a FOR loop:
for (byte i = 0; i < 5; i = i + 1) {
Serial.println(myArray[i]);
}
Here the counter i initially stands at 0 and accordingly in myArray[0] ensures that the first value appears in the Serial Monitor. Then i is increased by 1 – myArray[1] outputs the second value, and so on.
Adding new values
myArray[] still doesn’t have an index 5 – but you can change that. You simply add new values as follows:
myArray[5] = 6;
But of course, you can not only add new values to the end of an array, but also replace existing values. To do this, simply choose the index of the number you want to replace and assign it a new value.
In the next lesson, you’ll use an array to store different tones – which your theremin can then access.