Tengo un problemilla en mi programa de arduiino. Estoy usando un esp8266 para enviar los codigos de mi mando de tv almacenados en una BBDD a mi esp para que este lo mando por infrarrojos todo bien salvo que desde mi BBDD le paso el codigo correcto pero a traves de un string que es lo que se envia entonces al recibirlo ese string no puedo ponerlo en la funcion irsend.sendRC5(...) ya que eso recibe un unsigned long int. Tampoco puedo convertirlo a unsigned long int porque como recibo un string y ese string contiene letras si lo convierto a int me cambia totalmente el codigo y ya no sirve. Alguien puede echar una mano?
Adjunto codigo:
unsigned long int codigo;
String cod;
cod = client.readString(); //leemos el codigo del servidor
irsend.sendRC5(codigo, results.bits); //realiza el envio
como consigo esa variable cod de tipo string que se envie tal y como esta a la funcion sendRC5 que lo que recibe es unsigned long int?
desde mi servidor django envio por socket el codigo que es 20DF10EF si imprimo por serial la variable cod recibo bien ese codigo, pero cod es de tipo string.
Bueno convierte eso a número, simplemente quitando '0' si es número y si es letra le quitas 'A' y ya lo tienes. Rearma el hexadecimal uint32_t y asunto resuelto.
Esto puede servir
unsigned long x2i(char *s)
{
unsigned long x = 0;
for(;;) {
char c = *s;
if (c >= '0' && c <= '9') {
x *= 16;
x += c - '0';
}
else if (c >= 'A' && c <= 'F') {
x *= 16;
x += (c - 'A') + 10;
}
else break;
s++;
}
return x;
}
asi tal y como esta el codigo es cierto que la funcion x2i me convierte el string hexadecimal en un unsigned long pero claro en tipo decimal, pero el problema es que la funcion irsend.sendRC5(); recibe un valor unsigned long pero con valor en hexadecimal y el que yo tengo viene en decimal