He detectado varios problemas que me ocurren sin tener porque aparecer, aparentemente.
En ocasiones deja de funcionar cuando añado un simple Serial.print en el código, lo comento y vuelve a funcionar correctamente...
Tengo una rutina para generar una cadena alfanumerica aleatoria:
void GenerateRamdom(char *ranstr, int len)
{
char alphabet[62] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
len = len+1;
memset(ranstr, 0, len);
for(int i = 0; i<(len-1); i++){
ranstr[i]= alphabet[random(0,61)];
}
}
Si os fijais, pongo len = len+1 y posteriormente dentro del for, i<(len-1). Es algo redundante, pero así es como he conseguido que me funcione, de hecho de devuelve cadenas como:
wMRl6vfI
bdoy839S
8WLzAVx6
baMaJqbb
Si lo pongo como debería de ser a mi entender:
void GenerateRamdom(char *ranstr, int len)
{
char alphabet[62] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
memset(ranstr, 0, len);
for(int i = 0; i<len; i++){
ranstr[i]= alphabet[random(0,61)];
}
}
Me responde con cadenas así:
wMRl6vfI¦n
bdoy839S¦n
8WLzAVx6¦n
baMaJqbb¦n
LA52knf1¦n
uSrsm49L¦n
ULlyH5PH¦n
alWWrTQ1¦n
Además, dispongo de un código mucho más largo para un UNO con shield ethernet, si incluyo esto:
client.print(" name=");
char newstr[6];
GenerateRamdom(newstr, 6);
client.print(newstr);
Deja de funcionar, si lo comento, funciona correctamente. Lo más gracioso es que esa parte del código está dentro de una rutina que se activa mediante un botón y el programa se detiene al principio, sin ni siquiera hacer lo que debe hacer antes de que pulse el botón.
En un principio pensé que podría ser algun problema de memoria llena, pero el total de variables son 1020bytes y el programa 13,794bytes, lo cual no llega ni a la mitad de su capacidad.
A alguien le ha ocurrido algo así? Estoy empezando a pensar que mi UNO puede tener algún defecto. Es una placa nueva comprada hace 1 semana y ya no sé que pensar.
Saludos.