Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Commentez, partagez et proposez des Tutos en langage C !
App inventor2 et les PICS
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1170
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#11 Message par paulfjujo » jeu. 13 déc. 2018 11:51

bonjour à tous,



Appinventor 2 n'aime pas les blancs dans des valeurs numeriques negatives!
:!!: Raciste ?

:sifflotte: 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
Aides toi, le ciel ou Fantastpic t'aideras


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité