начинает выполняться loop. в нём вайл выполняется, пока что-то в уарт не прилетит. прилетело. этой чудной строчкой
int val = Serial.read() -'0';
val`у присваивается некое непонятное число. что вы там в уарт отсылаете и что там val`у присваивается, вникать даже и пытаться не буду.
вариант первый: предположим, что val`у присвоено число 1. дальше выполнение переходит в этот while (val == 1) и выполняться этот цикл будет бесконечно, т.к. внутри этого цикла val`у значения нигде не присваивается, т.е. и значение никогда не меняется. а раз val никогда не поменяется, то и из цикла не выйдет.
вариант второй: val`у присвоено число 2. всё тоже самое, только застрянет в while (val == 1)
вариант третий: val`у присвоено число, отличное от 1 или 2. код циклов "while (val == 1){}" и "while (val == 2){}" выполняться не будет.
если и после этого вам что-то непонятно, значит или я не достаточно доходчиво объясняю или
в общем ограничимся вариантом, что плохо объясняю