Logo Mon Club Elec

Titre

: « Les bienfaits de la méditation »

La méditation est une pratique ancestrale qui a été utilisée depuis des milliers d’années pour améliorer la santé physique et mentale. Aujourd’hui, elle est de plus en plus reconnue comme une méthode efficace pour réduire le stress et améliorer la qualité de vie. Dans cet article, nous allons examiner les bienfaits de la méditation et comment elle peut être intégrée à votre routine quotidienne. Nous verrons également comment elle peut vous aider à mieux gérer votre stress et à améliorer votre bien-être.

Titre

Titre

Présentation

Ce programme permet de saisir un nombre entier long au clavier matriciel et l’afficher dans le moniteur Série.
Le signe est – est pris en compte par appui sur la touche *.
La saisie est validée par appui sur la touche #

Dans un but didactique, la saisie des touches appuyées est réalisée.

Ce programme utilise les fonctionnalités suivantes :

  • la connexion série vers le PC
  • un Clavier matriciel 4×4 (16 touches)

Matériel Nécessaire

L’espace de développement Arduino

  • … pour éditer, compiler le programme et programmer la carte Arduino.
Titre

Le matériel suivant pour réaliser le montage associé

  • des straps,
Titre
  • un clavier matriciel 4×4 (16 touches)
Titre

Instructions de montage

  • Connexion série entre la carte Arduino et le PC (utilise les broches 0 et 1)
  • Connecter sur la broche 2 la Colonne 4 du Clavier
  • Connecter sur la broche 3 la Colonne 3 du Clavier
  • Connecter sur la broche 4 la Colonne 2 du Clavier
  • Connecter sur la broche 5 la Colonne 1 du Clavier
  • Connecter sur la broche 16 la Ligne 4 du Clavier
  • Connecter sur la broche 17 la Ligne 3 du Clavier
  • Connecter sur la broche 18 la Ligne 2 du Clavier
  • Connecter sur la broche 19 la Ligne 1 du Clavier

Le schéma théorique du montage

Titre
Le schéma théorique du montage

Le circuit du montage

Titre
Le schéma du montage à réaliser

Explication du programme

Structure globale du programme

Ce programme simple comprend :

  • une entête déclarative
  • une partie « configuration » qui ne sera exécutée qu’une fois (fonction setup( ) )
  • une partie constituée d’une boucle sans fin que le programme répètera à l’infini ( fonction loop( ) ) : c’est le coeur du programme.

Déroulement du programme

Le programme se déroule de la façon suivante :

  • Après avoir pris en compte les instructions de la partie déclarative,
  • puis après avoir exécuté la partie configuration ( fonction setup( ) ),
  • le programme bouclera sans fin ( fonction loop ( ) ), exécutant de façon répétée le code compris dans la boucle sans fin.
Titre
Le déroulement du programme

Au niveau de la partie déclarative :

Inclusion des librairies utilisées

  • On inclut les librairies des fonctionnalités utilisées :
    • Inclusion de la librairie pour le clavier matriciel :

#include <Keypad.h> // inclusion de la librairie pour clavier matriciel 

Déclaration de constantes utiles

  • On déclare les constantes utiles dans le programme :
    • Déclaration des constantes utiles pour l’utilisation du clavier 4×4 :

//--- Constantes utilisées avec le clavier 4x4
const byte LIGNES = 4; // 4 lignes
const byte COLONNES = 4; //4 colonnes

Déclaration des constantes de broches

  • Déclaration des constantes pour les broches utilisées dans le programme :

const int C4=2; //declaration constante de broche 
const int C3=3; //declaration constante de broche 
const int C2=4; //declaration constante de broche 
const int C1=5; //declaration constante de broche 
const int L4=16; //declaration constante de broche 
const int L3=17; //declaration constante de broche 
const int L2=18; //declaration constante de broche 
const int L1=19; //declaration constante de broche 

Déclaration des variables globales

  • Déclaration des variables globales du programmes :
    • Déclaration variables globales des touches du clavier 4×4

//--- Définition des touches 
char touches[LIGNES][COLONNES] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};


  • Déclaration variables globales de lignes et de colonnes du clavier 4×4
// tableaux de lignes et colonnes
byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4}; //connexions utilisées pour les broches de colonnes du clavier

char touche; // variable de stockage valeur touche appuyée


  • Déclaration variables globales utilisée par le programme
long valeur; 

Déclarations des objets utiles pour les fonctionnalités utilisées

  • Déclaration des objets utiles pour les fonctionnalités utilisées :
    • Déclaration d’un objet clavier matriciel :

// création d'un objet keypad = initialisation clavier 
Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
// les broches de lignes sont automatiquement configurées en ENTREE avec pullup interne activé 
// les broches de colonnes sont automatiquement configurées en SORTIE


Au niveau de la fonction d’initialisation setup( ) :

Initialisation des fonctionnalités utilisées :

  • On initialise les différentes fonctionnalités utilisées :
    • Initialisation de la communication série avec le PC
Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission 


configuration des broches utilisées :

  • Les broches de lignes et d’entrée sont configurées automatiquement lors de l’initialisation du clavier

Au niveau de la boucle principale, la fonction loop ( ) :

  • On stocke la valeur saisie en appelant la fonction SAISIE_LONG() qui renvoie la valeur long saisie au clavier et on l’affiche.

valeur=SAISIE_LONG(); 
Serial.println(valeur); 

  • Le programme recommence en boucle les instructions de la fonction loop( ).

Se reporter aux commentaires présents dans le programme pour plus de détails.

Autres Fonctions du programme :

  • Le coeur du programme est ici, dans la fonction SAISIE_LONG qui renvoie la valeur long correspondant au nombre saisi :

long SAISIE_LONG (){ // fonction qui renvoie une valeur long signé (32bits)

//---- variables locales utilisées dans la fonction
long saisie_long[11]={0,0,0,0,0,0,0,0,0,0,0}; // crée un tableau de variables pour saisir valeur - long maxi = 10 chiffres + signe
char compt_touche; // variable de comptage du nombre de touches saisies
long nombre_saisi; // variable de calcul du nombre saisi
//float valeurf; // variable de caclul de la valeur convertie    
char touche_long; // variable locale pour valeur touche appuyée de 0 à 15

//---- initialisation des variables utilisées ----
compt_touche=0; // aucune touche saisie au démarrage
nombre_saisi=0; // initialise la variable


//-------- initialisation curseur --------
//// mode clignotant

//------ gestion appui touche sur clavier

 while (compt_touche<11) { // tant que pas appuis maxi = 11 touches pour long + signe (valeur maxi=+2 147 483 647)

       touche_long= clavier.getKey(); // lecture de la touche appuyée

       if (touche_long!= NO_KEY){ // si une touche a été frappée -- gestion de la touche appuyée 

           Serial.println(touche_long); // debug

           if (compt_touche==0) { // au premier passage 
              if (touche_long=='*') { // si appui signe - 
                saisie_long[10]=-1; // mémorise -1 dans le 11ème caractère 
                continue; // poursuit while comme si pas de premier passage
              }
             else {
               if (saisie_long[10]==0)saisie_long[10]=1; // mémorise le signe + dans le 11ème caractère si pas déjà à -1
             }
           } // fin if compt_touche==0


           if (touche_long=='#') break; // sort du while si appui sur #

           //---- calcul valeur numérique touches 0 à 9  (3ères lignes x 3ères colonnes)
           //--- à partir lignes colonnes ---
           for (byte i=0;i<3;i++) {
             for (byte j=0; j<3;j++){
               if (touche_long==touches[i][j]) touche_long=(j+1)+(i*3);//calcul de la valeur numérique
             }
           }
           //---- à patir valeur ascii --- 

           // touche 0
           if (touche_long=='0') touche_long=0;

           //---- calcul valeur numériques autres touches 
           if (touche_long=='A') touche_long=10;
           if (touche_long=='B') touche_long=11;
           if (touche_long=='C') touche_long=12;
           if (touche_long=='D') touche_long=13;

           saisie_long[compt_touche]=touche_long; //enregistre le caractère dans tableau code_saisi


           compt_touche=compt_touche+1; // on incrémente la variable compt qui mémorise le nombre de caractères saisis

           //delay () 


         } //---- fin gestion appui clavier

}// fin du While = fin de la lecture du clavier

//--------- calcul valeur saisie en fonction du nombre de chiffres saisis et x signe (saisie_long[10]) ---------
if (compt_touche==0)nombre_saisi=0;   // si aucun chiffre saisi
if (compt_touche==1)nombre_saisi=(saisie_long[0]);   // si 1 seul chiffre saisi
if (compt_touche==2)nombre_saisi=(saisie_long[0]*10)+(saisie_long[1]*1);   // si 2 chiffres saisi
if (compt_touche==3)nombre_saisi=(saisie_long[0]*100)+(saisie_long[1]*10)+(saisie_long[2]*1);   // si 3 chiffres saisi
if (compt_touche==4)nombre_saisi=(saisie_long[0]*1000)+(saisie_long[1]*100)+(saisie_long[2]*10)+(saisie_long[3]*1);   // si 4 chiffres saisi
if (compt_touche==5)nombre_saisi=(saisie_long[0]*10000)+(saisie_long[1]*1000)+(saisie_long[2]*100)+(saisie_long[3]*10)+(saisie_long[4]*1);   // si 5 chiffres saisi
if (compt_touche==6)nombre_saisi=(saisie_long[0]*100000)+(saisie_long[1]*10000)+(saisie_long[2]*1000)+(saisie_long[3]*100)+(saisie_long[4]*10)+(saisie_long[5]*1);   // si 6 chiffres saisi
if (compt_touche==7)nombre_saisi=(saisie_long[0]*1000000)+(saisie_long[1]*100000)+(saisie_long[2]*10000)+(saisie_long[3]*1000)+(saisie_long[4]*100)+(saisie_long[4]*10)+(saisie_long[5]*1);   // si 6 chiffres saisi
if (compt_touche==8)nombre_saisi=(saisie_long[0]*10000000)+(saisie_long[1]*1000000)+(saisie_long[2]*100000)+(saisie_long[3]*10000)+(saisie_long[4]*1000)+(saisie_long[5]*100)+(saisie_long[6]*10)+(saisie_long[7]*1);   // si 7 chiffres saisi
if (compt_touche==9)nombre_saisi=(saisie_long[0]*100000000)+(saisie_long[1]*10000000)+(saisie_long[2]*1000000)+(saisie_long[3]*100000)+(saisie_long[4]*10000)+(saisie_long[5]*1000)+(saisie_long[6]*100)+(saisie_long[7]*10)+(saisie_long[8]*1);   // si 8 chiffres saisi
if (compt_touche==10)nombre_saisi=(saisie_long[0]*1000000000)+(saisie_long[1]*100000000)+(saisie_long[2]*10000000)+(saisie_long[3]*1000000)+(saisie_long[4]*100000)+(saisie_long[5]*10000)+(saisie_long[6]*1000)+(saisie_long[7]*100)+(saisie_long[8]*10)+(saisie_long[9]*1);   // si 9 chiffres saisi

//Serial.println(int(saisie_long[10])); // debug - affiche signe

nombre_saisi=nombre_saisi*long(saisie_long[10]); // prise en compte du signe 

//------ à réaliser en sortie de lecture du clavier ----

compt_touche=0; // réinitialise le nombre de touche saisies

//-------- initialisation curseur --------
//// désactive mode clignotant

//----- renvoi de la valeur saisie ----

return (nombre_saisi); // renvoie la valeur - sortie de la fonction 

}

Mise en oeuvre du programme

Préparation du montage et programmation de la carte Arduino :

  • Commencer par réaliser le montage indiqué sur plaque d’expérimentation
  • Ensuite, programmer la carte Arduino avec ce programme (en bas de page) selon la procédure habituelle

Préparation du Terminal côté PC dans le logiciel Arduino

  • Côté PC, il faut ouvrir la fenêtre terminal de l’IDE Arduino : pour ce faire, un simple clic sur le bouton « Sérial Monitor ».
Titre
  • La fenêtre « Terminal » s’ouvre alors :
Titre
  • Il faut alors régler le débit de communication sur la même valeur que celle utilisée par le programme avec lequel nous allons programmer la carte Arduino :
Titre

Fonctionnement

  • saisir un nombre entier long au clavier matriciel et l’afficher dans le moniteur Série.

Le signe est – est pris en compte par appui sur la touche *.
La saisie est validée par appui sur la touche #

Titre

Le programme complet en langage Arduino :

A copier/coller directement dans l’éditeur Arduino


// --- Programme Arduino ---
// par X. HINAULT - Le 06/03/2010
// www.mon-club-elec.fr 

// --- Que fait ce programme ? ---
/* saisir un nombre entier au clavier matriciel 
et l'afficher dans le moniteur Série

la touche * sert de signe -
la touche # sert à valider la valeur 

*/

// --- Fonctionnalités utilisées ---
// Utilise la connexion série vers le PC 
// Utilise un Clavier matriciel 4x4 (16 touches) 

// --- Circuit à réaliser ---
// Connexion série entre la carte Arduino et le PC (utilise les broches 0 et 1)  

// Connecter  sur la broche 2 la Colonne 4 du Clavier
// Connecter  sur la broche 3 la Colonne 3 du Clavier
// Connecter  sur la broche 4 la Colonne 2 du Clavier
// Connecter  sur la broche 5 la Colonne 1 du Clavier

// Connecter  sur la broche 16 la Ligne 4 du Clavier
// Connecter  sur la broche 17 la Ligne 3 du Clavier 
// Connecter  sur la broche 18 la Ligne 2 du Clavier
// Connecter  sur la broche 19 la Ligne 1 du Clavier

//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

#include <Keypad.h> // inclusion de la librairie pour clavier matriciel 

// --- Déclaration des constantes ---

//--- Constantes utilisées avec le clavier 4x4
const byte LIGNES = 4; // 4 lignes
const byte COLONNES = 4; //4 colonnes


// --- constantes des broches ---

const int C4=2; //declaration constante de broche 
const int C3=3; //declaration constante de broche 
const int C2=4; //declaration constante de broche 
const int C1=5; //declaration constante de broche 

const int L4=16; //declaration constante de broche 
const int L3=17; //declaration constante de broche 
const int L2=18; //declaration constante de broche 
const int L1=19; //declaration constante de broche 

// --- Déclaration des variables globales ---

//--- Définition des touches 
char touches[LIGNES][COLONNES] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

// tableaux de lignes et colonnes
byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4}; //connexions utilisées pour les broches de colonnes du clavier

char touche; // variable de stockage valeur touche appuyée

long valeur; 

// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

// création d'un objet keypad = initialisation clavier 
Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
// les broches de lignes sont automatiquement configurées en ENTREE avec pullup interne activé 
// les broches de colonnes sont automatiquement configurées en SORTIE


//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage --- 

Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission 



// les broches de lignes et d'entrée sont configurées automatiquement lors de l'initialisation du clavier 

// ------- Broches en sortie -------  


// ------- Broches en entrée -------  


// ------- Activation du rappel au + interne des broches en entrée si nécessaire -------  


} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

// --- ici instructions à exécuter par le programme principal --- 


valeur=SAISIE_LONG(); 
Serial.println(valeur); 

//} // fin gestion de la touche appuyée 

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

//*************** Autres Fonctions du programme *************

long SAISIE_LONG (){ // fonction qui renvoie une valeur long signé (32bits)

//---- variables locales utilisées dans la fonction
long saisie_long[11]={0,0,0,0,0,0,0,0,0,0,0}; // crée un tableau de variables pour saisir valeur - long maxi = 10 chiffres + signe
char compt_touche; // variable de comptage du nombre de touches saisies
long nombre_saisi; // variable de calcul du nombre saisi
//float valeurf; // variable de caclul de la valeur convertie    
char touche_long; // variable locale pour valeur touche appuyée de 0 à 15

//---- initialisation des variables utilisées ----
compt_touche=0; // aucune touche saisie au démarrage
nombre_saisi=0; // initialise la variable


//-------- initialisation curseur --------
//// mode clignotant

//------ gestion appui touche sur clavier

 while (compt_touche<11) { // tant que pas appuis maxi = 11 touches pour long + signe (valeur maxi=+2 147 483 647)

       touche_long= clavier.getKey(); // lecture de la touche appuyée

       if (touche_long!= NO_KEY){ // si une touche a été frappée -- gestion de la touche appuyée 

           Serial.println(touche_long); // debug

           if (compt_touche==0) { // au premier passage 
              if (touche_long=='*') { // si appui signe - 
                saisie_long[10]=-1; // mémorise -1 dans le 11ème caractère 
                continue; // poursuit while comme si pas de premier passage
              }
             else {
               if (saisie_long[10]==0)saisie_long[10]=1; // mémorise le signe + dans le 11ème caractère si pas déjà à -1
             }
           } // fin if compt_touche==0


           if (touche_long=='#') break; // sort du while si appui sur #

           //---- calcul valeur numérique touches 0 à 9  (3ères lignes x 3ères colonnes)
           //--- à partir lignes colonnes ---
           for (byte i=0;i<3;i++) {
             for (byte j=0; j<3;j++){
               if (touche_long==touches[i][j]) touche_long=(j+1)+(i*3);//calcul de la valeur numérique
             }
           }
           //---- à patir valeur ascii --- 

           // touche 0
           if (touche_long=='0') touche_long=0;

           //---- calcul valeur numériques autres touches 
           if (touche_long=='A') touche_long=10;
           if (touche_long=='B') touche_long=11;
           if (touche_long=='C') touche_long=12;
           if (touche_long=='D') touche_long=13;

           saisie_long[compt_touche]=touche_long; //enregistre le caractère dans tableau code_saisi


           compt_touche=compt_touche+1; // on incrémente la variable compt qui mémorise le nombre de caractères saisis

           //delay () 


         } //---- fin gestion appui clavier

}// fin du While = fin de la lecture du clavier

//--------- calcul valeur saisie en fonction du nombre de chiffres saisis et x signe (saisie_long[10]) ---------
if (compt_touche==0)nombre_saisi=0;   // si aucun chiffre saisi
if (compt_touche==1)nombre_saisi=(saisie_long[0]);   // si 1 seul chiffre saisi
if (compt_touche==2)nombre_saisi=(saisie_long[0]*10)+(saisie_long[1]*1);   // si 2 chiffres saisi
if (compt_touche==3)nombre_saisi=(saisie_long[0]*100)+(saisie_long[1]*10)+(saisie_long[2]*1);   // si 3 chiffres saisi
if (compt_touche==4)nombre_saisi=(saisie_long[0]*1000)+(saisie_long[1]*100)+(saisie_long[2]*10)+(saisie_long[3]*1);   // si 4 chiffres saisi
if (compt_touche==5)nombre_saisi=(saisie_long[0]*10000)+(saisie_long[1]*1000)+(saisie_long[2]*100)+(saisie_long[3]*10)+(saisie_long[4]*1);   // si 5 chiffres saisi
if (compt_touche==6)nombre_saisi=(saisie_long[0]*100000)+(saisie_long[1]*10000)+(saisie_long[2]*1000)+(saisie_long[3]*100)+(saisie_long[4]*10)+(saisie_long[5]*1);   // si 6 chiffres saisi
if (compt_touche==7)nombre_saisi=(saisie_long[0]*1000000)+(saisie_long[1]*100000)+(saisie_long[2]*10000)+(saisie_long[3]*1000)+(saisie_long[4]*100)+(saisie_long[4]*10)+(saisie_long[5]*1);   // si 6 chiffres saisi
if (compt_touche==8)nombre_saisi=(saisie_long[0]*10000000)+(saisie_long[1]*1000000)+(saisie_long[2]*100000)+(saisie_long[3]*10000)+(saisie_long[4]*1000)+(saisie_long[5]*100)+(saisie_long[6]*10)+(saisie_long[7]*1);   // si 7 chiffres saisi
if (compt_touche==9)nombre_saisi=(saisie_long[0]*100000000)+(saisie_long[1]*10000000)+(saisie_long[2]*1000000)+(saisie_long[3]*100000)+(saisie_long[4]*10000)+(saisie_long[5]*1000)+(saisie_long[6]*100)+(saisie_long[7]*10)+(saisie_long[8]*1);   // si 8 chiffres saisi
if (compt_touche==10)nombre_saisi=(saisie_long[0]*1000000000)+(saisie_long[1]*100000000)+(saisie_long[2]*10000000)+(saisie_long[3]*1000000)+(saisie_long[4]*100000)+(saisie_long[5]*10000)+(saisie_long[6]*1000)+(saisie_long[7]*100)+(saisie_long[8]*10)+(saisie_long[9]*1);   // si 9 chiffres saisi

//Serial.println(int(saisie_long[10])); // debug - affiche signe

nombre_saisi=nombre_saisi*long(saisie_long[10]); // prise en compte du signe 

//------ à réaliser en sortie de lecture du clavier ----

compt_touche=0; // réinitialise le nombre de touche saisies

//-------- initialisation curseur --------
//// désactive mode clignotant

//----- renvoi de la valeur saisie ----

return (nombre_saisi); // renvoie la valeur - sortie de la fonction 

}


// --- Fin programme ---

Noter cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Archive Mon Club Elec

Articles populaires

Newsletter

Inscrivez-vous maintenant et bénéficiez d'un soutien continu pour réaliser vos travaux électriques en toute sécurité.