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();
}
#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();
}
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
// 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' .
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;
}
}
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;
}