Controlando un LED a distancia

Buenas!!

Mi proyecto es el siguiente, tengo un Arduino mega (Emisor) que manda una señal de radio frecuencia a un Arduino UNO (Receptor).
En esta parte del programa, que es el que me da error, mando un mensaje de 4 dígitos para variar la intensidad de la tira LED (Anoda) únicamente en el caso del color rojo.
El LED tendrá que cambiar su intensidad del 0 al 255, pero digamos que de los valores 50 al 200 el programa se bloqueada (creo que el fallo viene del if) y no se como arreglarlo.

Como la tira LED es anoda, el valor analogico de encendido será 0 y el de apagado 255 (al revés).

Ojala me puedan ayudar con el programa del receptor y poder regular la intensidad del LED.

RECEPTOR

[////// Programa del Receptor ////

#include <RH_ASK.h>       // incluye libreria RadioHead.h
#include <SPI.h>              // incluye libreria SPI necesaria por RadioHead.h
   
RH_ASK rf_driver;             // crea objeto para modulacion por ASK



void setup() {
  rf_driver.init();                // inicializa objeto con valores por defecto
  Serial.begin(9600);         // inicializa monitor serie a 9600 bps
  pinMode (6, OUTPUT);    //Pin Rojo PWM
  pinMode (5, OUTPUT);    //Pin Azul PWM
  pinMode (3, OUTPUT);    //Pin Verde PWM
}

void loop() {
  uint8_t buf[5];                     // espacio para almacenar mensaje recibido
  uint8_t buflen = sizeof(buf);   // longitud del buffer de mensaje
  String info = "";
    
  
  if (rf_driver.recv(buf, &buflen)){ // si existen datos correctos recibidos   (CREO QUE DE AQUÍ VIENE EL ERROR)
    int i;
    Serial.print("Mensaje: ");  // imprime Mensaje:
    info =((String)(char*)buf);
    info.trim();
    Serial.println(info+ " :" + info.length());   // imprime buffer de mensaje


    char I8 = info[10];                
    char I9 = info[11];
    char I10 = info[12];
    char I11 = info[13];
    
    int val8 = String(I8).toInt();
    int val9 = String(I9).toInt();
    int val10 = String(I10).toInt();
    int val11 = String(I11).toInt();

    int Int = (val8)*1000 + val9*100 + val10*10 + val11;    /// Agrupamos los valores que recibimos en Int (va desdel 1000-2023 
    
    int Intensidad = map(Int, 1000, 2023, 0, 255);

    analogWrite(6, Intensidad);
    analogWrite(5, 255);
    analogWrite(3, 255);

  }
}

EMISOR

//// Programa del Emisor ////

#include <RH_ASK.h>    // incluye libreria RadioHead.h
#include <SPI.h>    // incluye libreria SPI necesaria por RadioHead.h
 
RH_ASK rf_driver;   // crea objeto para modulacion por ASK
  
  const char * pInt;   // INTENSIDAD

  char msg[4];       // MENSAJE FINAL

  int potenciometro1;
  String pot1s;


void setup() {
  rf_driver.init();   // inicializa objeto con valores por defecto
    
  pinMode(A1, INPUT);      //// pulsadores pulsadores de on/off y carga

  
  Serial.begin(9600);

  pinMode (2, OUTPUT);   //// LED RGB
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
}


///////////////////////////  INTENSIDAD   /////////////////


void loop() {

  int potenciometro1 = analogRead(A1) + 1000;
   
  String pot1s = String(potenciometro1, DEC);
  
  int pot1_len = pot1s.length() + 1;
  char char_pot1[pot1_len];
  pot1s.toCharArray(char_pot1, pot1_len);
  Int = char_pot1;
  strcat(msg, Int);
  
}
  
  
  Serial.println(msg);

  rf_driver.send((uint8_t *)msg, strlen(msg));  // funcion para envio del mensaj
  rf_driver.waitPacketSent();     // espera al envio correcto
  delay(300);        // demora de 1 segundo entre envios
  
  
}

Muchas gracias!!

Hola,

Me podrías explicar más acerca de lo que quieres hacer, yo hice algo similar (creo), pero usando módulos bluetooth (HC-05).

Saludos

A ver como va esta variación de tu código, no entiendo para que lo pasas a String para luego reconvertirlo a bytes y formar un entero.

void loop() {
  uint8_t buf[5], buffer[30];                 // espacio para almacenar mensaje recibido
  uint8_t buflen = sizeof(buf);   // longitud del buffer de mensaje
  String info = "";
   
 
  if (rf_driver.recv(buf, &buflen)){ // si existen datos correctos recibidos   (CREO QUE DE AQUÍ VIENE EL ERROR)
    int i;
    Serial.print("Mensaje: ");  	// imprime Mensaje:
	sprintf(buffer, "%s : %d", buf, buflen);
    Serial.println(buffer);   		// imprime buffer de mensaje

    int Int = (int) buf[0]*1000 +  (int) buf[1]*100 + (int) buf[2]*10 +  (int) buf[3];    /// Agrupamos los valores que recibimos en Int (va desdel 1000-2023
   
    int Intensidad = map(Int, 1000, 2023, 0, 255);

    analogWrite(6, Intensidad);
    analogWrite(5, 255);
    analogWrite(3, 255);

  }
}

La librería te entrega una cadena de bytes. Opera de la forma directa.