Programation arduino condition if

mirabelle275 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   -

bsr svp quelqun peut m'expliquer la condition dans un programme que j 'ai trouvé

if (inaframe)

{

bit_timer --;

}

inaframe et bit_timer sont  declaré comme unsigned char  mais sans valeur initiale

donc je comprend pas le if fait condition de quoi ???

5 réponses

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 

Bonjour,

La variables de type scalaire non explicitement initialisés sont effectivement initialisées à zéro si elles sont globales (vrai en C comme ici en C++).

Donc par exemple inaframe est nulle au début. Heureusement car elle indique que le traitement de réception d'une trame est en cours. Cette variable passe à 1 au moment où on détecte un début de trame, c'est plus loin dans le code. Elle ne revient à zéro qu'en cas de timeout ou quand la trame est terminée.

En tout cas, ce code n'est certainement pas un code à lire. Il ne respecte pas les canons standards. Par exemple:

  • une fonction ne doit pas faire plus d'une page de texte.
  • les variables globales sont à proscrire sauf impossibilité. On est ici dans ce cas car une interruption ne communique qu'en utilisant des globales. Mais il ne devrait y avoir que quelques variables et explicitement nommées.
1
T3chN0g3n Messages postés 5247 Date d'inscription   Statut Membre Dernière intervention   1 179
 

Bonjour,

Documentation Arduino:  "any non-zero number evaluates to TRUE" 

Donc si je dit pas de bêtise,  si inaframe vaut zéro la condition est "False" et si inaframe >=1 la condition est "True".

PS: Pour améliorer la lisibilité de tes messages, pense à utiliser l'outil "Insérer un extrait de code" (dernier icone de la fenêtre de rédaction)

Cdlt.

0
mirabelle275 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 

merci pour votre reponse , mais inaframe n'est pas inialisé au depart comment elle peut etre evalué à 0 ou autre ?? ou par defaut une valeur non inialisé prend elle 0??

0
T3chN0g3n Messages postés 5247 Date d'inscription   Statut Membre Dernière intervention   1 179 > mirabelle275 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 

"This code is experimental, buggy, and is probably not suitable for any purpose."

[...]

"Anyone wanting to use this code is strongly encouraged to:

1. Reconsider."

 

→ Tout est dit ...
 

Toutefois les commentaires sous ce post semblent confirmer t'a supposition, une variable globale semble bien prendre la valeur "zéro" par défaut:

https://forum.arduino.cc/t/declare-variable-without-initialising/945139/4

1
mirabelle275 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   > T3chN0g3n Messages postés 5247 Date d'inscription   Statut Membre Dernière intervention  
 

ca repond tres bien a ce que je cherche merci ,

justement pour le programme je veux m'inspirer pour  faire mon propre projet en commençant par comprendre ce qu'il fait exactement 

0
georges97 Messages postés 13787 Date d'inscription   Statut Contributeur Dernière intervention   2 653
 

Bonsoir,

Il eut été utile de nous indiquer l'adresse de ce programme pour que nous sachions à quoi correspondent ces variables.

Il s'agit sans doute du programme ci-après :

https://github.com/eiginn/arduino_tnc/blob/master/arduino_tnc_014_w_tx.ino

Il apparaît alors que :

si la variable inaframe, déclaré en ligne 137 est positive (comme suggéré par T3chN0g3n que je salue)

alors la variable bit_timer est décrémentée par l'opérateur -- (qui suit le nom de variable à la ligne 365).

C'est donc cette instruction qui est exécutée conditionnement.

Reste à s'assurer que cette variable inaframe, définie comme caractère non signé n'égale pas 0 au lancement du programme, ce qui est possible pour une variable non-initialisée, pour déclencher la décrémentation.

Je n'irai pas plus loin faute d'expertise suffisante en codage Arduino. Sous réserve de correction par un de nos spécialistes C++

0
mirabelle275 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 

merci pour vos reponses , ce'st exactement ce programme la , mais mon besoin c'est juste la reception , et j'essai de comprendre le principe et le fonctionnement du programme , et vue que je ne suis pas spésialiste en C++ ou langage arduino donc.... toute aide est la bienvenue.

par exmple je ne comprend pas comment une variable non inialisé peut etre incrementé ou decrementé !!

0
georges97 Messages postés 13787 Date d'inscription   Statut Contributeur Dernière intervention   2 653 > mirabelle275 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 

Comme indiqué, mes connaissances sont limitées.

Une variable a une valeur aléatoire quand on la déclare. L'initialisation permet de la fixer, à 0 par exemple. Rien ne vous empêche de tester cela dans un embryon de programme à part, avec et sans initialisation.

Je remarque qu'aucun des unsigned char, des lignes 131 à 154 n'est initialisée (simples déclarations), ce qui signifie qu'il y a peu de chances que ce soient des erreurs successives de programmation.

Incidemment, je vois que bit_timer est initialisé en ligne 655

Mon interprétation :
 

soit il s'agit de variables locales recevant leur valeur lors de la transmission, à partir d'un capteur ou d'un terminal connecté
 

soit il s'agit de valeurs stockées dans un registre du microcontrôleur
 

soit il s'agit de valeurs transitant dans le buffer (voir macros du volume XBEE,  lignes 58 et suiv.).
 

Là encore, aucune vérification mais des suppositions. Personnellement, je testerais à part cette question de la déclaration sans initialisation, en créant une fonction qui utilise ces variables en les initialisant localement.
 

En attendant l'intervention d'un intervenant plus capé, si ça vous aide, je peux faire des tests de mon côté sur les hypothèses émises, sachant que je n'ai pas le périphérique utilisé.
 

N'hésitez pas à me dire si vous préférez attendre un autre intervenant pour éviter que je vous lance sur des hypothèses sans issues.

0
mirabelle275 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   > georges97 Messages postés 13787 Date d'inscription   Statut Contributeur Dernière intervention  
 

en effet l'idée est de recvoir un signal A-FSK audio sur la pin A0 d'un arduino  , ce dernier numerise le signal à travers son ADC avec utilisation du timer (// use 16-bit timer to check the ADC at 13200 Hz    // this is 11x the 1200Hz MARK freq, and 6x the 2200Hz SPACE freq.) les valeurs ADC (0à 255) sont translaté entre +/- 127 (ligne 307) puis viens le traitement des données pour demoduler ,

je vais encore creuser un peu dans le programme pour ne pas vous deranger et je vous tiens au courant,merci pour votre aide .

0
mirabelle275 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 

si quelqu'un a deja travaillé sur le programme en lien ??son aide serai precieuse merci

https://github.com/eiginn/arduino_tnc/blob/master/arduino_tnc_014_w_tx.ino

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

bonjour,

Comment peux-tu être certaine que ces variables n'ont pas été préalablement initialisées?

0