View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

L'appui sur un BP allume une LED.

ARDUINO - INITIATION - BP
Par X. HINAULT - Créé le 03/02/2010

Présentation

Ce programme L'appui sur un BP allume une LED.

Matériel Nécessaire

L'espace de développement Arduino

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

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

  • une plaque d'essai pour montage sans soudures,
  • des straps,
  • une LED rouge 5mm,
  • une résistance 1/4w de 200 Ohms environ,
  • un bouton poussoir pour CI,

Instructions de montage

  • Connecter sur la broche 2 (configurée en entrée) un BP connecté à la masse (0V)
  • Connecter sur la broche 3 (configurée en sortie) une LED en série avec sa résistance connectée au 0V

Le schéma théorique du montage

  • A noter que cette broche sera configurée en entrée avec la résistance interne de « rappel au + » (pullup) activée (pour plus de détail voir la rubrique « COMPRENDRE »).

Le schéma théorique du montage

Le circuit du montage


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.

Le déroulement du programme

Au niveau de la partie déclarative :

Déclaration de constantes utiles

  • On déclare les constantes utiles dans le programme :
    • Déclaration des constantes utiles pour l'utilisation des boutons poussoirs :
const int APPUI=0; // constante état du BP - appui sur niveau bas
const int PAS_APPUI=1; // constante état du BP - relâché sur niveau haut

Déclaration des constantes de broches

  • Déclaration des constantes pour les broches utilisées dans le programme :
const int BP=2; //declaration constante de broche 
const int LED=3; //declaration constante de broche 

Déclaration des variables globales

  • Déclaration des variables globales du programmes :
    • Déclaration d'une variable globale utile pour l'utilisation des boutons poussoirs :
int ETAT_BP=0; // variable témoin de l'état du BP

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

configuration des broches utilisées :

  • Configuration des broches en sortie : on met en sortie la broche utilisée avec la LED
pinMode(LED, OUTPUT); //met la broche en sortie 
  • Configuration des broches en entrée : on met en entrée la broche utilisée avec le bouton poussoir
pinMode(BP, INPUT); //met la broche en entree 
  • Activation du rappel au + interne des broches en entrée si nécessaire : on active le rappel au plus interne pour la broche connectée au BP. Ceci est indispensable car lorsque le BP n'est pas appuyé, la broche n'est connectée à "rien"... Le rappel au plus permet de fixer sa valeur à +5V en l'absence d'appui du BP.
digitalWrite(BP, HIGH) ; // activation du pullup de la broche en entrée

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

  • On commence par lire l'état du bouton poussoir à l'aide de l'instruction digitalRead(broche) et le résultat est mis dans la variable prévue pour mémoriser l'état du bouton poussoir.
ETAT_BP=digitalRead(BP); // lit l'état du BP et met la valeur 0/1 dans la variable
  • Ensuite, on réalise un test de la valeur de cette variable qui reflète l'état du bouton poussoir :
    • si le bouton est appuyé (càd si la variable = 0 car l'appui sur le BP connecte la broche au 0V), alors on allume la LED.
    • Sinon, la LED est éteinte.

if (ETAT_BP==APPUI){ // si l'état du BP est appuyé (càd si variable état BP = 0) 
// Attention à bien utiliser == et non =

  digitalWrite(LED,1); // allume la LED

}

else { // sinon (càd si variable état bp=1)

  digitalWrite(LED,0); // éteint la LED
}

// remarque : on aurait pu écrire ceci sur une seule ligne selon : 
// if (ETAT_BP==APPUI)digitalWrite(LED,1); else digitalWrite(LED,0);

  • Le programme recommence en boucle les instructions de la fonction loop( ). Au final, la LED va s'allumer en fonction de l'état du bouton poussoir. Il faut bien se rendre compte que le test est réalisé des milliers de fois par seconde, donc l'état de la LED reflète instantanément l'état du bouton poussoir.

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

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

Fonctionnement

  • La LED va s'allumer en fonction de l'état du bouton poussoir :
    • l'appui sur le BP allume la LED
    • le BP relâché éteint la LED

Le programme complet en langage Arduino :

A copier/coller directement dans l'éditeur Arduino


// --- Programme Arduino ---
// par X. HINAULT - 01/2010 

// --- Que fait ce programme ? ---
/* Une LED reste allumée tant qu'un bouton poussoir est appuyé et s'éteint lorsqu'il n'est pas appuyé */

// --- Fonctionnalités utilisées ---

// --- Circuit à réaliser ---
// Connecter BP à la masse sur la broche 2 (configurée en entrée)
// Connecter LED et sa résistance en série sur la broche 3 (configurée en sortie)

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

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

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

const int APPUI=0; // constante état du BP - appui sur niveau bas
const int PAS_APPUI=1; // constante état du BP - relâché sur niveau haut


// --- constantes des broches ---

const int BP=2; //declaration constante de broche 
const int LED=3; //declaration constante de broche 

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

int ETAT_BP; // variable d'état du bouton poussoir

// --- Initialisation des fonctionnalités utilisées ---

//**************** 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 --- 

pinMode(LED, OUTPUT); //met la broche en sortie 

pinMode(BP, INPUT); //met la broche en entree 

digitalWrite(BP, HIGH) ; // activation du pullup de la broche en entrée

} // 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 --- 

ETAT_BP=digitalRead(BP); // lit l'état du BP et met la valeur 0/1 dans la variable

if (ETAT_BP==APPUI){ // si l'état du BP est appuyé (càd si variable état BP = 0) 
// Attention à bien utiliser == et non =

  digitalWrite(LED,1); // allume la LED

}

else { // sinon (càd si variable état bp=1)

  digitalWrite(LED,0); // éteint la LED
}

// remarque : on aurait pu écrire ceci sur une seule ligne selon : 
// if (ETAT_BP==APPUI)digitalWrite(LED,1); else digitalWrite(LED,0);

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

// --- Fin programme ---