el código no está completo
Serial.read () solo devuelve un carácter, por lo que no hay charAt ()
prueba este código (Monitor serial @ 115200 baudios + configurar el monitor serial para enviar '\n' (new line))
void setup() {
Serial.begin(115200); // Monitor serial @ 115200 baudios
}
void loop() {
if (Serial.available()) { // si hemos empezado a recibir algo
String valor = Serial.readStringUntil('\n');
valor.trim(); // eliminar space, '\r', '\n', ...
Serial.print(F("esto es lo que recibí: ")); Serial.println(valor);
Serial.print(F("número de caracteres: ")); Serial.println(valor.length());
for (byte i=0; i<valor.length(); i++) {
Serial.print(F("valor[")); Serial.print(i); Serial.print(F("] = '"));
Serial.print(valor.charAt(i)); Serial.print(F("'\t(ASCII: "));
Serial.print((byte) valor.charAt(i)); Serial.println(F(")"));
}
}
}
usar la clase String y readStringUntil no es genial, pero esa es una manera fácil de comenzar
Sugeriría estudiar Serial Input Basics