parseInt () читает столько символов, сколько может, прежде чем истечет время ожидания или встретит не-di git символ. Он соберет эти символы ascii в число, преобразует их из ascii и вернет вам реальный int.
read () просто считывает один символ из последовательного буфера и возвращает его (повышается до int) или -1, если читать нечего. read не преобразует ничего из ascii, поэтому, если вы отправите '1' с последовательного монитора, он прочитает 49 (код ascii для '1').
В вашем коде вы сравниваете то, что вы читаете, с значение ascii, так как вы сравниваете с '1'. Если он будет преобразован в число с помощью parseInt, тогда это будет фактически 1, а не 49. 1 не равно 49, так что это не сработает.
В других ваших функциях, где вы используете parseInt, вы сравниваете эти вещи и обрабатываете их как числа, а не как символы ascii. Итак, вам нужен parseInt.