Multiplicar dos variables ingresadas a través del teclado del computador

Hola Buen día.
Soy nuevo en lo que es la programación, y estoy realizando un pequeño código para multiplicar dos variables ingresadas desde el teclado para ver el resultado en el monitor serie como también los números ingresados.

tengo grandes dudas que las he ido aclarando de apoco al estar leyendo el libro Arduino de Oscar Torrente Artero.
pero igual me quedan dudas.
Aquí el código

int multiplicar (int x, int y){ //´se creo una función para multiplicar
int resultado;
    resultado=x*y;
    return resultado;
}

void setup(){
 
  Serial.begin(9600);
  Serial.println("Ingrese dos números para multiplicar");
  }
void loop(){ 
     
    if(Serial.available()>0){
      int num = Serial.readString().toInt();  //}ingreso el primer numero para que sea multiplicado
      Serial.print("primer numero recibido: "); 
      Serial.println(num);                         //muestra el primer numero a multiplicar
      
      //delay(2000);
      
      int num2 = Serial.readString().toInt(); //}ingreso el segundo numero para que sea multiplicado
      Serial.print("Segundo numero recibido: ");
      Serial.println(num2);                          //muestra el segundo numero a multiplicar
      
      int resultado;
      resultado=multiplicar(num,num2);  //llamo a la función de multiplicación
      Serial.print("El resultado de la Multiplicación es: ");
      Serial.println(resultado);        //muestra el resultado en monitor serie
     }   
}

Se que tengo un error en el código ya que me imprime todo junto y no espera a que ingrese el segundo valor.
escribí el código fuera del if pero se va imprimiendo infinitamente en el monitor serie, y es por lo que esta en void loop().y esa no era la solución.

lo solucione con un delay de 2 segundos que me da un tiempo breve para ingresar el segundo valor y así realice la multiplicación, pero se que no es la forma correcta de solucionarlo.

si alguien me podría orientar para lograr que ingrese el segundo valor sin utilizar el delay se lo agradecería bastante ya que me ayudaría en mi auto-aprendizaje con lo que es la programación.
de antemano muchas gracias.

La clave esta la manera de funcionar del arduino ,la funcion setup solo se ejecuta una vez y la funcion loop esta constantemente ejecutandose (y teniendo en cuenta la velocidad de reloj de 16 MHz ,esto puede ocurrir muchas veces en un segundo...) por lo que tienes que incorporar dentro del loop algun "avisador" de la situacion en la que estas en cada momento .una posible solucion seria introducir los dos valores separados por una coma,punto etc y recogerlos en dos variables con Serial.parseInt junto con una variable booleana que declaras antes del setup para hacerla global (valor true o false ,0 o 1) por ejemplo la llamas numeros, que te pones a true cuando recojas los valores.en el loop implementas :

boolean numeros = false;
void setup(){.....}
void loop(){
 si numeros es falso {
   si hay datos en el serial {
     recoges datos en dos variables con dos Serial.parseInt()
     multiplicas las dos variables
     pones numeros a true
     imprimes por serial los valores
   }
 }
}

Si quieres introducir los numeros en dos veces ,pues creas una variable booleana mas y consultas cuando las dos esten en true ...

José primero que nada, muchas gracias por atender a mi consulta.
he leído atentamente tus recomendaciones. pero no me queda claro como utilizar la variable booleana.
si me podrías dar una breve explicación para que se utiliza mayormente ese tipo de variable te lo agradecería,ya que el ejemplo que aparece en la pagina de referencias de arduino no lo entendí :cry:

Hola atipax,

La variable booleana ocupa un solo bit, con lo que tiene dos opciones: true o false.

en este caso, te sirve como "avisador" como te dice jose, para saber si la variable (en este caso "numeros") está, digamos, "encendida o apagada".

Por ejemplo, quieres encender un led si un contador está en 100 o más (es un ejemplo tonto, que en verdad no lo haría de esta manera, pero para que se entienda)

boolean avisoLed=false;
int LED=9;//numero de pin donde irá el led
.
.
.

if (contador>99){
  avisoLed=true;
}
else{
  avisoLed=false;
}
digitalWrite (LED,avisoLed);//en este caso, "avisoLed" sirve como un HIGH o un LOW

espero habértelo aclarado un poco.

Saludos!