Energy monitor -- code quality

//Delay, otherwise missing the next character, why!?!?

You have the classic issue of reading the serial port when you don't know that there is anything there. serial.Available told you that there was something to read - the exclamation point, but at that point the character following it has not arrived. The arduino is fast enough that even at 115200 baud, reading again immediately will get -1 (no data). Your delay masks this problem, but it's better to ensure that there's something there before you read.