Problema con separar caracteres en código

Hola, tengo el siguiente problema: Estoy haciendo un ejercicio del libro del kit básico, el cual tengo 3 leds (led1, led2 y led3), y escribiendo en la consola se deben encender según el siguiente ejemplo:
Si escribo 100 se prende el led1.
Si escribo 101 se prende el led1 y led2.
Si escribo 010 se prende el led2.
Si escribo 000 se apagan.
Y así sucesivamente.

Lo que intento hacer es leer el valor e intentar separarlo con .charAt(n) y guardar cada valor en una letra (A, B y C respectivamente) y luego usar un if para decir que si el valor de A o B o C es 1, entonces se encienda el led, pero no funciona, he buscado pero aún no encuentro o no me queda claro una forma de hacerlo.

Adjunto mi código para que vean mi idea para resolver el problema.

[code]
int led1 = 2;
int led2 = 5;
int led3 = 12;
String valor;
int A;
int B;
int C;

boolean estado = false;


void setup() {
  pinMode(2, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(12, OUTPUT);
  Serial.begin(9600);

}

void loop() {

  valor = Serial.read();

  delay(2000);

  A = valor.charAt(1);
  B = valor.charAt(2);
  C = valor.charAt(3);

  if (A == 49) {

    digitalWrite(led1, HIGH);
  }
  else {

    digitalWrite(led1, LOW);
  }

  if (B == 49) {
    digitalWrite(led2, HIGH);
  }
  else
  {
    digitalWrite(led2, LOW);
  }

  if (C == 49) {
    digitalWrite(led3, HIGH);

[/code]

Según lo que he estado haciendo, en la consola me comienza a arrojar los valores del número que coloco en código ascii, por ejemplo, el 1 me lo convierte a 49, es por eso que las variables las igualé a esos valores, no se me guardan los valores, de que otra forma podría hacer esto?.

Saludos

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

1 Like

Estimado, muchas gracias por su respuesta, estoy analizando para entender el funcionamiento.
Saludos!

Estimado, tengo dos dudas en el código, estoy comenzando como aficionado en arduino y seguramente son básicas, pero porfavor si me pudieran ayudar a entender:

En el comienzo del “for”: Que endiendo que “byte i=0” inicia una variable “i” como tipo byte, pero no entiendo bien lo que viene después, el “i<valor.length(); i++” significa que el ciclo funciona mientras el valor de i sea menor al largo de valor? y el i++ suma uno a i ? O sea que funcionaría como un while o estoy equivocado?

Saludos y muchas gracias