Bueno abner tengo un par de cosas para decirte.
El micro cuando entra a la interrupciones es por que recibio 1 caracter nomas. No todo una linea.
Usa identacion, en el codigo, facilita la lectura
En las interrupciones:
Nunca poner delays,
Nunca poner whiles a no ser que estes MUY seguro que va a salir rapidamente,
Nunca pongas funciones del LCD por que normalmente estas tardan demasiado y la mayoria de las veces poseen delays
Siemrpe una interrupcion es entrar y salir.
------------------
Un float o flotante, ocupa 4 bytes, por lo cual si envias "4.123"
NO es lo mismo que un float. Lo anterior son 5 bytes separados para demostrarlo te doy un valor:
En un flotante 4.123 se representaria de esta forma: 0x4083ef9e
Y lo que vos recibirias es 0x34 0x2E 0x31 0x32 0x33
Es decir no tiene ninguna relacion, y por eso mismo te decia que envies un entero ya que es mas facil de tratar
--------------------------------
Si decis como va a ser el string que pensas enviar entonces es posible realizar una maquina de estado, sino es muy dificil saber exactamente como seria. Ejemplo
12347890
1234&7890
1234.7890
etc
En el que 1234 sea el minimo y 7890 el maximo. Y luego al presionar un enter, es decir que se envie el \n o \r\n se proceda a tomar de nuevo los valores.
Cuando este fijado eso mucho mejor.
O si queres que cuando pongas el "w" el numero que le sigue se le asigne al minimo, cuantos digitos serian? imagino que 4 como maximo y quedaria algo asi:
w1234e7890q
eso es lo que queres vos ?