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!!