LED RGB y buzzer mediante Serial

Te digo los dos primeros problemas que veo sin profundizar demasiado.
Lees el puerto serie sin verificar previamente si hay datos para leer. Para eso se usa la función available().
Intentas cargar la frecuencia con un simple read() siendo que lo que vas a obtener es el código ASCII de un caracter. Por lo tanto estás intentando obtener la frecuencia de manera errónea.

Te pongo un ejemplo.
Supongamos que ingresas "R950"
Si tienes suerte y el puerto serie lo lees justo en el momento adecuado (porque no verificas si hay datos)
En la primera pasada del loop leerías solo los 2 primeros caracteres recibidos ("R9") por lo que

valor = 'R'
frecuencia = 57

porque 57 es el código ASCII de "9"

En la siguiente pasada del loop leerías los otros 2 caracteres ("50") entonces

valor = '5'
frecuencia = 48

porque 48 es... obvio, el código ASCII de "0"

Busca cómo leer cadenas desde serial y convertirlas a enteros u otro tipo numérico.

Saludos