Appinventor 2 n'aime pas les blancs dans des valeurs numeriques negatives!
Raciste ?
non,encore un piege à Ions!
blanc=espace=space=0x20=32
Sur uneappli mesure de temperature avec capteur OWS numerique DS18B20
je profite du temps froid pour avoir des mesures negatives ..
et voila que l'appli *.APK se plante à cause d'un blanc entre le signe - et la valeur numerique
sachant que pour les valeurs positive , il y a d'office ,
un blanc,à la place du signe +, qui est bien accepté par Appinventor
j'avais fait des tests prealable en envoyant , via terminal Vbray et un autre HC06 relié au PC via cle USB/APM
pour simuler l'appli PIC12F
*j15108;*T126.875
*j15105;*T16.875
*j15108;*T6.875
*j15108;*T-6.875
*j15108;*T-126.875
NO problemo, pas de blanc ni sur valeur positive, ni sur valeur negative
mais l'appli PIC en envoie un (entre le - et le 0)
exemple : - 0.312°C à 7H00 ce matin
pour -0,3°C sur ma centrale meteo NOR-TEC (qui marche nickel , rapport qualité/prix imbattable)
donc modif coté appli PIC12F1840
Code : Tout sélectionner
// en entrée la mesure brute DS18B20
// en sortie la valeur ascci dans CRam1
void DS18B20_Build_value(unsigned int temp2write)
{
int jj;
const unsigned int RES_SHIFT = TEMP_RESOLUTION - 8;
unsigned char temp_whole;
char Signe=0;
unsigned int temp_fraction;
// Check if temperature is negative
// Check if temperature is negative
if (temp2write & 0x8000) {
Signe=1 ;
CRam1[0] = '-';
temp2write = ~temp2write + 1;
}
else
{
Signe=0;
CRam1[0] = ' ';
}
// Extract temp_whole
temp_whole = temp2write >> RES_SHIFT ;
// Convert temp_whole to characters
CRam1[1] = (temp_whole/10)%10 + 48; // Extract tens digit
if (CRam1[1]=='0')CRam1[1]=' ';
CRam1[2] = temp_whole%10 + 48; // Extract ones digit
// Extract temp_fraction and convert it to unsigned int
temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;
CRam1[3]='.';
// Convert temp_fraction to characters
CRam1[4] = temp_fraction/1000 + 48; // Extract thousands digit
CRam1[5] = (temp_fraction/100)%10 + 48; // Extract hundreds digit
CRam1[6] = (temp_fraction/10)%10 + 48; // Extract tens digit
//CRam1[7]= temp_fraction%10 + 48; // Extract ones digit
CRam1[7]=0;// ';';
CRam1[8]=0;
Ltrim(CRam1+1);
// valeur dans un entier long = Mesure * 1000, non utilisée
// DS18B20_Temp1= ( temp_whole *1000) +temp_fraction ;
}
le Ltrim permet d'enlever ce blanc, qui etait généré par l'abscence de dizaine de degres
ou sinon il faudrait afficher
-00.312°C ..pas glop !
et j'utilise comme argument, CRam1+1, pour ne pas strapper le signe
"-" negatif, T-4.625
" " positif , T 18.875