Arduino 14arduino_goodfields_64.jpgUNO avec Buzzer, #define
 
Sommaire

La  piste UNO+buzzer La piste UNO+buzzer #  ou directives de compilation # ou directives de compilation
La page principale ... La page principale ...
   
Vers le début Vers Page 2 Vers sommaire La piste UNO+buzzer

Un buzzer/ampli
Bon, dans un premier temps, on va continuer notre démarche vers l'appareil de mesure (selfmètre capacimètre) avec notre UNO, sans utiliser la fonction "Tone". Donc on va se faire un petit buzzer/ampli à base de NE555 (oui, oui ca existe toujours, et pour un prix identique à un simple transistor !)
Voilà mon schéma :
cliquez pour agrandir : photo/14_buzzer.gif La sortie peut être raccordée à un petit HP de 8 à 32 Ohms, ou un émetteur pastille piézo.
On peut régler la fréquence (en mode buzzer, 800 Hertz est commun pour le Morse), et le volume.
Le cavalier permet de l'utiliser soit en "ampli" soit en "buzzer". Bien évidemment, c'est un ampli "tout-ou-rien", donc n'attendez pas une quelconque musicalité, que l'ARDUINO ne saurait faire avec une sortie digitale !.

   
Vers le début Vers Page 2 Vers sommaire # ou directives de compilation
Au niveau logiciel, voici quelques explications concernant les découpages que j'utilise :
Les lignes commencant par # s'adressent au compilateur, on dit des "directives de précompilation".


#define contre int
Ainsi, "#define debug 1" crée une "constante" de nom "debug" et de valeur "1".
Vous me direz c'est comme : "int debug=1;" Oui, et non.
Oui, parce que finalement debug=1, mais avec le define c'est une constante qui ne peut pas varier en cours d'exécution, alors qu'avec le int debug=1; on peut changer la valeur en cours de route. Donc, dans ce cas là, armer le debug quand on veut, et le désarmer aussi, sans recompiler.
Deuxième différence (qui peut avoir un intérêt si on a peu de RAM) : le "#define" est résolu par le compilateur comme une constante, donc prends de la place dans le programme, alors que "int" réserve un emplacement (de 2 octets) dans la RAM, or la RAM est pas très grande dans le UNO...


#include
On a déjà vu cette directive pour inclure des bibliothèques (library). En ce qui me concerne, j'ai constitué un paquet de sous-programmes que je ré-utilise dans tous mes programmes. Afin de ne pas recopier toutes les lignes dans le programmes, ce qui le rend très long, j'ai fait un fichier "sp.h" que j'inclus par :
#include "sp.h"
C'est comme si vous ajoutiez le contenu de "sp.h" dans le programme.
Vous remarquerez les " et non pas <> comme pour une library (le fonctionnement est différent).
J'ai aussi fait un "decl_sp.h" qui comporte les déclarations nécessaires correspondantes aux modules de "sp.h".
C'est bien pratique pour, encore une fois, rendre les programmes modulaires et ré-utilisables.

Voir aussi "decl1300_morse.h", "gest1300_morse.h" et "graf1300_morse.h" qui sont respectivement des déclarations, la gestion de paramètres (une partie de l'application), et le grafcet qui gère le morse.

On peut envisager de faire une bibliothèque si on veut faire encore plus "figé" (voir le site ARDUINO).


#if #elseif #endif
On peut avec cette directive inclure une partie de source selon la valeur d'une "variable" :
#define tone_mode 1		// 0=non(tout ou rien pour buzzer externe) 1=oui(tone)
#if tone_mode == 1
    tone(sortie_gbf, CW_PITCH) ;
#else
    digitalWrite(sortie_gbf, HIGH) ;
#endif
Autres exemples :
#if !defined TABLE_SIZE
#define TABLE_SIZE 100
#elif defined ARRAY_SIZE
#define TABLE_SIZE ARRAY_SIZE
int table[TABLE_SIZE];
#endif  


#if TABLE_SIZE
#undef TABLE_SIZE
#define TABLE_SIZE 200
 
#elif TABLE_SIZEអ
#undef TABLE_SIZE
#define TABLE_SIZE 50
 
#else
#undef TABLE_SIZE
#define TABLE_SIZE 100
#endif


la suite ... la suite ... La page principale ... La page principale ...

Photos de la page :

Dernière mise à jour : 11:40:01 18/09/2020