Programation arduino condition if

Fermé
mirabelle275 Messages postés 6 Date d'inscription lundi 21 novembre 2022 Statut Membre Dernière intervention 22 novembre 2022 - 21 nov. 2022 à 15:10
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 22 nov. 2022 à 21:01

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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
22 nov. 2022 à 21:01

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 5060 Date d'inscription samedi 16 février 2019 Statut Membre Dernière intervention 11 octobre 2024 1 127
21 nov. 2022 à 16:49

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 lundi 21 novembre 2022 Statut Membre Dernière intervention 22 novembre 2022
22 nov. 2022 à 10:19

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 5060 Date d'inscription samedi 16 février 2019 Statut Membre Dernière intervention 11 octobre 2024 1 127 > mirabelle275 Messages postés 6 Date d'inscription lundi 21 novembre 2022 Statut Membre Dernière intervention 22 novembre 2022
Modifié le 22 nov. 2022 à 13:55

"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 lundi 21 novembre 2022 Statut Membre Dernière intervention 22 novembre 2022 > T3chN0g3n Messages postés 5060 Date d'inscription samedi 16 février 2019 Statut Membre Dernière intervention 11 octobre 2024
22 nov. 2022 à 14:00

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 12314 Date d'inscription lundi 31 janvier 2011 Statut Contributeur Dernière intervention 12 octobre 2024 2 367
Modifié le 21 nov. 2022 à 17:36

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 lundi 21 novembre 2022 Statut Membre Dernière intervention 22 novembre 2022
22 nov. 2022 à 10:17

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 12314 Date d'inscription lundi 31 janvier 2011 Statut Contributeur Dernière intervention 12 octobre 2024 2 367 > mirabelle275 Messages postés 6 Date d'inscription lundi 21 novembre 2022 Statut Membre Dernière intervention 22 novembre 2022
Modifié le 22 nov. 2022 à 11:18

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 lundi 21 novembre 2022 Statut Membre Dernière intervention 22 novembre 2022 > georges97 Messages postés 12314 Date d'inscription lundi 31 janvier 2011 Statut Contributeur Dernière intervention 12 octobre 2024
22 nov. 2022 à 11:34

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 lundi 21 novembre 2022 Statut Membre Dernière intervention 22 novembre 2022
22 nov. 2022 à 10:35

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 23255 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 11 octobre 2024 Ambassadeur 1 541
22 nov. 2022 à 13:32

bonjour,

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

0