State machine comparision

I would not have if Serial.available() in loop() because that means that none of the states is called unless there is something in the Serial input buffer. And if you take characters from it with Serial,read() then there may be none left to allow the rest of the program to work.

Also, I would not have a "state" for reading the serial input. I would check that all the time and independently of all states and save the data because you never know when the data might arrive, and serial data is very slow. See Serial Input Basics

Using ENUMs can make code easy to understand but you can manage states with any values in any variable - you just need something that lets the program know where it is in a sequence of actions. If you look at the code in Serial Input Basics you will see that it uses the boolean variable newData to reflect the state of whether a new message has arrived.

...R