Ayuda para enviar data atra vez de Bluetooh

Saludos a todos , estoy en un proyecto que es el siguiente .

es un control remoto utilizando bluetooh. lo que deseo hace si es posible es poder enviar
una linea de comando al arduino atravez del bluetooh y el haga la funcion.

aqui le dejo una lista de lo que utilizo

1-arduino nano v3
1-led infrarojo
1-bluetooh jy-mcu.

ya puedo tener comunicacion entre arduino y mi pc atra vez de bluetoooth y poder enviar informacion .

aqui el codigo original y de ejemplo.

IRsend irsend;

void setup()
{
  Serial.begin(9600);
}

void loop() {
  if (Serial.read() != -1) {
    for (int i = 0; i < 3; i++) {
      irsend.sendSony(0xa90, 12); // Sony TV power code
      delay(40);
    }
  }

}

aqui un codigo que estoy probando y buscando la forma que trabaje.

si miran bien el codigo lo que deseo hacer es que la linea de codigo donde aparece
irsend.sendSony(0xa90, 12); // Sony TV power code

esa linea la pueda enviar yo desde mi computadora al arduino y el arduino al recivirla haga esa funcion.

pero el codigo no puedo hacerlo andar y si alguien puede mirar el codigo y darme una ayuda o idea se lo agradecere.

#include <IRremote.h>
char myChar ;
IRsend irsend;

void setup()
{
  Serial.begin(9600);
 
}

void loop() {
  while(Serial.available() > 0){
    for (int i = 0; i < 3; i++){
    myChar = Serial.read();
    Serial.print(myChar); //echo
      delay(40);
    }
  }
}

Hola

Aver, es algo complicado de explicar:

Si se puede enviar la linea que quieres pero el microcontrolador no la entiende como una linea de codigo, la entiende como una cadena de texto y es así como la recibe y como la procesa.

Digamos que en el monitor Serial sale literalmente la cadena de texto y eso es lo que se manda, algo totalmente distinto a lo que necesitas.

Bien, explicado eso, lo que debes de hacer es dejar la función como esta y solo poner variables en los parametros de la función, de la siguiente forma:

#include <IRremote.h>
char myCODE ;
IRsend irsend;

void setup()
{
  Serial.begin(9600);
 
}

void loop() {
  if (Serial.read() != -1) {
  myCODE= Serial.read(); // lee el codigo desde el serial, antes de entrar al for.
    for (int i = 0; i < 3; i++) {
      irsend.sendSony((hex)myCODE, 12); // Sony TV power code
      delay(40);
    }
  }
}

Como ves en esta version la variable, es el parametro, que a su ves, es el codigo que pretendes enviar, con esto puedes enviar cualquier codigo distinto solo debes cumplir con la sintaxis del codigo "0xfff"

Edit:
no estoy seguro si usando cast hex con la cadena "0xa90" lo combierte a un numero exadecimal equivalente a la cadena o al valor que representa 0xa90.

Gracias amigo por tu sugerencia , el detalle es que en esa linea cambian 3 cosas

ok me explico

esta es la linea original.

irsend.sendSony(0xa90, 12);

el detalle es es linea podria ser asi :

irsend.sendSony(0xa90, 12);

irsend.sendNEC(0x000000, 32);
irsend.sendRC5(0x000000, 32);
irsend.sendRC6(0x000000, 32);

que si nos fijamos serian 3 parametros los q tendria que sustituir

primero seria el irsend.sendNEC

segundo seria el numero hex ejemplo 0x000000

y por ultimo los bits ejemplo 32);

esas 3 cosas no siempre seran igual , por eso busco la manera que yo pueda enviar la data correcta atra vez del bluetooth y arduino la pueda leer correctamente.

como el ejemplo original.

y un millon de gracias por tu ayuda ehrja

Bien

En ese caso lo que tienes que hacer es mandar tres parametros por el serial y al momento de recibirlos filtrar los parametros para cada funcion:

usando una sintaxis, por ejemplo:

objetivo,datos,bits = "sony,0xa90,12" ó "1,0xa90,12"

Para atrapar esta cadena necesitas un buffer, un array tipo char, el cual debe ser tan grande como la cadena mas grande que puedas poner.

cuando tengas informacion en el buffer lo vas a separa los tres parametros teniendo en cuenta que las comas separan los datos en la cadena que esta almacenada en el buffer.

Este codugo puede tener errores pero espero que te de una idea de lo que te planteo:

char buffer[15] = Serial.read();
string parametro[3];
byte a = 0;

for( i = 0; i < 15; i++) // for que lee la cadena del buffer
{
char c = buffer[i];      // lee caracter por caracter
     if (c != ",")           // si no es una coma es parte de un parametro
         {
            parametro[a] += c;   // el caracter se va a cumulando en el parametro a, puede ser x u otra letra...
          }else{ a++;}             // cuando encuentre una coma se incrementa a y es el siguiente parametro
                                        // el que se acumula. 
if(c ==" ") break;          // sale del for cuando ya no hay datos que leer en el buffer

}

En este punto ya tendrias los parametros separados en el arreglo parametros[]
para saber que funcion vas a usar lees el primer parametro y aplicas los siguientes parametros a la funcion:

switch (parametro[0])
{
case "1", "sony":
irsend.sendSony((hex) parametro[1], parametro[2]);
break;

case "2", "nec":
irsend.sendNEC((hex) parametro[1], parametro[2]);
break;

case "3", "rc5":
irsend.sendRC5((hex) parametro[1], parametro[2]);
...
...
...
//etc

}

disculpa amigo soy novato con esto pero no encuentro como echar andar ese codigo que me enviaste. :cry:

Porque lo que te envia son soluciones que debes añadir a tu código.