Ingresar datos del monitor serial y convertirlos en una secuencia

Hola estimados, es primera vez que uso este foro. Me dedico a hacer aparatos sonoros, y ahora estoy tratando de hacer una maquina que reciba datos (en primera instancia) desde el monitor serial y luego los convierta en una secuencia.

La idea general es que reciba datos, y cada dato esté asociado a un sonido(1=do, 2=re, etc) hasta un maximo de 12 posibildades, luego de recibir el dato lo convierta mediante un buzzer en sonido y vaya armando una secuencia.
Por ejemplo, ingreso el numero 1(do), y cada 10 segundos suene un do, pero si ingreso un 2(re) la secuencia ahora es do-re, y cada 10 segundos vuelve a sonar la secuencia do-re.
Y así, si ingreso un 3(mi), se agrega al final de la secuencia y suena do-re-mi.

Para esto, estoy partiendo con un simple código

El problema que tengo es que al usar un ciclo for, lee solo un dato y el resto los interpreta como -1.
Intente re usar la instrucción
if ( Serial.available() > 0)

Pero tampoco funciona. Les agradeceria si tienen alguna sugerencia para arreglar este pequeño código.
Gracias

int num[7];
int contador;
int sw1 = 0;
int sw2 = 2;
void setup() {
  Serial.begin(9600);
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

  //if (sw1 == 0)
  // {
  if ( Serial.available() > 0) 
    for (int i = 0; i <= 6; i++)
    {
         
      contador = i;
      num[i] = Serial.read();
      Serial.print("  ");
      Serial.print(num[i], DEC);
      Serial.print(" contador  ");
      Serial.print(i);
      Serial.println("  ");
      delay(100);
      

    }

  


if (contador == 6)
{
  // sw1 == 1;
  Serial.print("VARIABLES  ");
  Serial.print(num[0]);
  Serial.print(" ");
  Serial.print(num[1]);
  Serial.print(" ");
  Serial.print(num[2]);
  Serial.print(" ");
  Serial.print(num[3]);
  Serial.print(" ");
  Serial.print(num[4]);
  Serial.print(" ");
  Serial.print(num[5]);
  Serial.print(" ");
  Serial.println("  ");
  delay(100);
  contador = 5;
  
  

}
}

No puedes leer 6 veces el buffer serial si tu mismo estas diciendo que puede ser que solo envies un dato o nota....de momento tu loop puede constar de dos apartados ,en uno compruebas si han pasado los 10 segundos para ejecutar el tono que lleves almacenado,esto lo puedes hacer con la funcion millis() y estudiando el ejemplo BlynkWithoutDelay que viene en el IDE (Archivo->Ejemplos->Digital->BlynkWithoutDelay.En el segundo bloque compruebas si hay datos para leer del buffer serial y si es asi ,lo añades a un array que constara del numero maximo de notas que quieras almacenar.

Gracias por la respuesta Podrías poner un ejemplo del codigo de leer el buffer serial?

saludos

Creo que has investigado poco pero recuerdo un método que esta armado que permite hacer lo que tu quieres de manera ya muy bien armada. Esta es una versión.. yo me estoy enfocando en como reproducir una melodía no en como enviarla por el puerto serie.

Super Mario theme song w/ piezo buzzer and Arduino!

Cuando encuentre el otro, lo agrego acá.

Esta sin probar ,una manera de hacerlo:

#define NUM_NOTAS 30 // Por ejemplo 30 notas 
bool pos_libres = true;
int posicion = 0;
int melodia[NUM_NOTAS]; //array que guarda la melodia
void setup(){
  Serial.begin(9600);
  // Tu codigo 
}
void loop(){
  if(Serial.available()) {
    if(pos_libres) {
      int nota = Serial.parseInt();
      melodia[posicion] = nota;
      posicion ++;
      if(posicion == NUM_NOTAS) {
        pos_libres = false;
      }
    } else {
      Serial.println("Melodia llena!!!");
    }
  }
}

Faena que tu tienes que hacer: Para ejecutar cada 10 segundos ,estudia el ejemplo que te puse arriba.Para leer la melodia estudia como recorrer un array.

Vale! Voy a probarlo y les cuento como anda. SAludos