Reconocer letra con numero y accionar indicación en arduino

Saludos tengo un ejemplo el cual es recibir mensajes de otro dispositivo arduino maestro a mi arduino esclavo ya recibí el mensaje, busco la forma de que dependiendo del mensaje lo reconozca y accione las indicaciones, los mensajes recibidos puede ser ejemplo: Z12 Ó J45 son un ejemplo, me gustaría reconocer los mensajes y cuando los reciba poder con uno encender un led 1 y con el otro el led 2, saludos espero me puedan ayudar estoy en aprendizaje saludos profesores.

#include <Wire.h>
 
void setup() {
 Wire.begin(8);
 Wire.onReceive(receiveEvent); 
 Serial.begin(9600);           
 pinMode(13, OUTPUT);
}
 
void loop() {
delay(100);
}
 
// function that executes whenever data is received from master
void receiveEvent(int howMany) {
 while (0 <Wire.available()) {
    char c = Wire.read();
    Serial.print(c);
  }
      Serial.println();
    }

Utilizando la sentencia switch: switch...case - Arduino Reference

switch (c) {    

       case 'r': //enciende led  
         digitalWrite(pin,HIGH);
         delay(1000); 
       break;


       default:          
          Serial.println("Esperando dato..");                  
          delayMicroseconds(500); 



} //fin switch

Espero que te sirva.

Saludos.

Lo hice de este modo pero no pude tener resultado

#include <Wire.h>



 
void setup() {
 Wire.begin(8);
 Wire.onReceive(receiveEvent); 
 Serial.begin(9600);           
 pinMode(13, OUTPUT);
}
 
void loop() {
delay(100);
}
 
// function that executes whenever data is received from master
void receiveEvent(int howMany) {
 while (0 <Wire.available()) {
    char c = Wire.read();
    Serial.print(c);

  switch(c)
    {
      case Z12: Serial.println("Encender led 1"); 
      digitalWrite(13,HIGH);
                       break;
      case J45: Serial.println("Encender led 2"); 
      digitalWrite(12,HIGH);   
                       break;
    }
 

  }

     
          Serial.println();
    }

si lo se soy primerizo, no le entiendo

solo lo que busco es que reconozca el mensaje y tenga acción

Lo que @venado_bike te sugirió te permite identificar el caracter inicial del comando recibido sea 'Z' o 'J'
lo demas lo debes procesar sea antes o despues.

No puedes en un switch con nuestro IDE consultar por "Z12", el C++ de Arduino hasta donde se no permite hacerlo.

Entonces identificas el primer caracter y lo demás ya que son números lo pones en una variable que luego concatenas como bien te digo @ArduMyth

si ya vi que algo difícil y si quisiera comprar una palabra como encenderleduno o encenderleddos cualquiera de estas que llegue a Serial.print(c); se compare

En tu código cambia las líneas que te indico:

// function that executes whenever data is received from master
void receiveEvent(int howMany) {
 while (0 <Wire.available()) {
    char c = Wire.read();
    Serial.println(c); <<<--- Cambia esta línea

  switch(c)
  {
      case Z12:
         Serial.println("Encender led 1");
         digitalWrite(13,HIGH);
         break;
      case J45:
         Serial.println("Encender led 2");
         digitalWrite(12,HIGH);   
        break;
  }
 }
      Serial.println(c); <<<--- Cambia esta línea
}

¿ Que te sale por el monitor serial ?
¿ Sábes que la variable c solamente puede contener un caracter a la vez ? ¿ Lo sabes ? ¿ Entiendes por qué ?
¿ Sabes que es un array de caracteres ?

Ahora haz estos cambios a tu código

case Z12:   lo cambias por   case 'Z':
 y
case J45:   lo cambias por   case 'J':

En lugar de enviar "Z12" envía soalmente 'Z' y en lugar de enviar "J45" envía 'J' .

¿ Qué es lo que sucede ahora ?

Ya me cuentas

Ya lo modifique a modo de recibir la Z o J, pero me subraya error case Z:

#include <Wire.h>


 
void setup() {
 Wire.begin(8);
 Wire.onReceive(receiveEvent); 
 Serial.begin(9600);           
 pinMode(13, OUTPUT);
}
 
void loop() {
delay(100);
}
 
// function that executes whenever data is received from master
void receiveEvent(int howMany) {
 while (0 <Wire.available()) {
    char c = Wire.read();
 
 switch(c)
  {
      case Z:
         Serial.println("Encender led 1");
         digitalWrite(13,HIGH);
         break;
      case J:
         Serial.println("Encender led 2");
         digitalWrite(12,HIGH);   
        break;
  }
   }

Gracias por intentar guiarme

muchas gracias por la ayuda :wink:

Saludos me salio bien el ejercicio pero me encontré que no pude seguir una secuencia de comandos, solo la primera orden, como poder hacer que me siga la demás secuencia?

  switch(c)
    {
      case 'W': Serial.println("ENCENDER"); 
      digitalWrite(12,HIGH);
                       break;
      case 'Y': Serial.println("APAGAR"); 
      digitalWrite(12,LOW); 
      delay(300);
      digitalWrite(12,HIGH);
      delay(300); 
      digitalWrite(12,LOW);  
                       break;
    }

Saludos, deseo crear un ejercicio pero tiene un error en if(c=='Y'); me marca error alguien me puede ayudar

#include <Wire.h>



 
void setup() {
 Wire.begin(8);
 Wire.onReceive(receiveEvent); 
 Serial.begin(9600);           
 pinMode(12, OUTPUT);
}
 
void loop() {
delay(100);

}
 
// function that executes whenever data is received from master
void receiveEvent(int howMany) {
 while (0 <Wire.available()) {
    char c = Wire.read();

   
  }

    if(c=='W'); 
    {
      digitalWrite(12, HIGH);
      delay(300);
      digitalWrite(12, LOW);
      delay(300);
       digitalWrite(12, HIGH);
      Serial.println("ON");
    }
if(c=='Y');
    {
      digitalWrite(12, LOW);
      Serial.println("OFF");
    }
  }

Hola. A simple vista el punto y como después de if(c=='Y') está demás.