Différences entre versions de « Afficheur LCD-part 2-Code Arduino »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
(Page créée avec « {{afficheur-lcd-part2-nav}} The sketch for this is based on that of lesson 11. Load it up onto your Arduino and you should find that warming the temperature sensor by puttin... »)
 
 
(3 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
{{afficheur-lcd-part2-nav}}
 
{{afficheur-lcd-part2-nav}}
  
The sketch for this is based on that of lesson 11. Load it up onto your Arduino and you should find that warming the temperature sensor by putting your finger on it will increase the temperature reading.
+
Le sketch est basé sur le [[Afficheur LCD|tutoriel précédent]].  
  
Also if you wave your hand over the photocell blocking out some of the light, the reading will decrease.
+
Vous noetez probablement les modifications (voir ci-dessous).
 +
 
 +
Chargez le sur votre Arduino et vous devriez voir la température s'afficher.
 +
 
 +
En maintenant le senseur entre vos doigts, vous devriez voir la température s'élever.
 +
 
 +
Si vous agitez/placez vos mains au dessus de la photo-résistance (bloquant ainsi une partie de la lumière), la valeur afficher à l'écran devrait également diminuer.
  
 
  <nowiki>
 
  <nowiki>
 
     /*
 
     /*
     Adafruit Arduino - Lesson 12. Light and Temperature
+
     www.MCHobby.be - Lecture de la temperature et lumiere
 +
                    avec Afficheur LCD.
 +
    Source:
 +
      Adafruit Arduino - Lesson 12. Light and Temperature  
 +
      Transalted by MCHobby with authorization of Adafruit Industries
 
     */
 
     */
 
      
 
      
Ligne 15 : Ligne 25 :
 
     int lightPin = 1;
 
     int lightPin = 1;
 
      
 
      
     // BS E D4 D5 D6 D7
+
     //               BS E D4 D5 D6 D7
     LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
+
     LiquidCrystal lcd( 7, 8, 9, 10, 11, 12);
 
      
 
      
 
     void setup()
 
     void setup()
 
     {
 
     {
    lcd.begin(16, 2);
+
      lcd.begin(16, 2);
 
     }
 
     }
 
      
 
      
 
     void loop()
 
     void loop()
 
     {
 
     {
    // Display Temperature in C
+
      // Afficher la température en degres Celcius
     int tempReading = analogRead(tempPin);
+
      int tempReading = analogRead(tempPin);
 +
      float tempVolts = tempReading * 5.0 / 1024.0;
 +
      float tempC = (tempVolts - 0.5) * 100.0;
 +
      float tempF = tempC * 9.0 / 5.0 + 32.0;
 +
      //         ----------------
 +
      lcd.print("Temp C         ");
 +
      lcd.setCursor(6, 0);
 +
      lcd.print(tempC);
 +
     
 +
      // Affiche la luminosité sur la 2ieme ligne
 +
      int lightReading = analogRead(lightPin);
 +
      lcd.setCursor(0, 1);
 +
      //        ----------------
 +
      lcd.print("Lumiere        ");
 +
      lcd.setCursor(8, 1);
 +
      lcd.print(lightReading);
 +
      delay(500);
 +
     }
 +
</nowiki>
 +
 
 +
J'ai trouvé qu'il était utile de mette l'identification des broches de l'afficheur sur la ligne de commentaire précédent la commande 'lcd'.
 +
 
 +
<nowiki>//                BS E D4 D5 D6 D7
 +
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
 +
</nowiki>
 +
 
 +
Cela rend les modifications plus faciles si vous décidez de changer les broches utilisées.
 +
 
 +
Dans la fonction 'loop', il y a maintenant deux opérations intéressant qui s'y déroulent. Premièrement, nous convertissons la valeur analogique du senseur de température en "température réelle". En seconde position, nous faisons le nécessaire pour afficher cette valeur.
 +
 
 +
Pour commencer, penchons nous sur le calcul de la température.
 +
 
 +
<nowiki>    int tempReading = analogRead(tempPin);
 
     float tempVolts = tempReading * 5.0 / 1024.0;
 
     float tempVolts = tempReading * 5.0 / 1024.0;
 
     float tempC = (tempVolts - 0.5) * 100.0;
 
     float tempC = (tempVolts - 0.5) * 100.0;
     float tempF = tempC * 9.0 / 5.0 + 32.0;
+
     float tempF = tempC * 9.0 / 5.0 + 32.0;</nowiki>
    // ----------------
+
 
     lcd.print("Temp F ");
+
La valeur brute lue depuis le senseur de température est d'abord multipliée par 5 et ensuite divisé par 1024 pour nous fournir la tension (entre 0 et 5v) sur la broche analogique 'tempPin'.
 +
 
 +
Pour convertir la tension provenant du TMP36 en degrés Celcuis (en température réelle), il faut soustraire 0.5V à la mesure puis multiplié par 100.
 +
 
 +
Pour convertir la température en degrés Fahrenheit, il faut multiplier par 9/5 puis ajouter 32.
 +
 
 +
Constamment rafraichir l'information lue sur un écran LCD peut être un peu délicat. Le problème principale réside dans le fait que l'information (lue sur le senseur de température) peut avoir un nombre différent de caractères. Ainsi, si la température passe de 12.45 degrés Celsius à 9.32 degré Celsius alors il y a un caractère de plus (de l'ancienne valeur, le dernier) qui n'est pas effacée de l'écran lorsque l'on affiche la valeur 9.32.
 +
 
 +
Dans pareil cas, l'affiche présenterai 9.325 (le dernier "5" provenant de l'ancien affichage de la valeur 12.45).
 +
 
 +
Les anciennes valeurs affichées présente donc le danger de ne pas être totalement "effacée" avant l'affichage d'une nouvelle valeur.
 +
 
 +
Pour éviter ce problème, le programme écrit entièrement le contenu de la ligne à chaque fois (en utilisant des espace comme dans la ligne lcd.print("Temp C          ");
 +
 
 +
<nowiki>    // ----------------
 +
     lcd.print("Temp C          ");
 
     lcd.setCursor(6, 0);
 
     lcd.setCursor(6, 0);
     lcd.print(tempF);
+
     lcd.print(tempC);
    // Display Light on second row
 
    int lightReading = analogRead(lightPin);
 
    lcd.setCursor(0, 1);
 
    // ----------------
 
    lcd.print("Light ");
 
    lcd.setCursor(6, 1);
 
    lcd.print(lightReading);
 
    delay(500);
 
    }
 
 
</nowiki>
 
</nowiki>
 +
 +
Le commentaire un peu bizarre est utilisé pour se souvenir de la largeur de la ligne (16 colonnes). Vous pouvez alors afficher (imprimer) une chaine de caractères de cette longueur avec des espaces où les valeurs seront affichées.
 +
 +
Ensuite, pour remplir les "blancs", placez le curseur à la position où la valeur du senseur doit être affichée.
 +
 +
Cette approche est utilisée à l'identique pour afficher le niveau de luminosité. Il n'y a pas d'unité pour le niveau de luminosité, nous affichons juste la valeur brute telle qu'elle est lue sur l'entrée analogique.
  
 
<small>Créer par [http://learn.adafruit.com/users/srmonk Simon Monk] pour AdaFruit</small>
 
<small>Créer par [http://learn.adafruit.com/users/srmonk Simon Monk] pour AdaFruit</small>

Version actuelle datée du 5 janvier 2013 à 22:45

Le sketch est basé sur le tutoriel précédent.

Vous noetez probablement les modifications (voir ci-dessous).

Chargez le sur votre Arduino et vous devriez voir la température s'afficher.

En maintenant le senseur entre vos doigts, vous devriez voir la température s'élever.

Si vous agitez/placez vos mains au dessus de la photo-résistance (bloquant ainsi une partie de la lumière), la valeur afficher à l'écran devrait également diminuer.

    /*
    www.MCHobby.be - Lecture de la temperature et lumiere
                     avec Afficheur LCD.
    Source:
      Adafruit Arduino - Lesson 12. Light and Temperature    
      Transalted by MCHobby with authorization of Adafruit Industries
    */
     
    #include <LiquidCrystal.h>
     
    int tempPin = 0;
    int lightPin = 1;
     
    //                BS  E D4  D5  D6  D7
    LiquidCrystal lcd( 7, 8, 9, 10, 11, 12);
     
    void setup()
    {
       lcd.begin(16, 2);
    }
     
    void loop()
    {
       // Afficher la température en degres Celcius
       int tempReading = analogRead(tempPin);
       float tempVolts = tempReading * 5.0 / 1024.0;
       float tempC = (tempVolts - 0.5) * 100.0;
       float tempF = tempC * 9.0 / 5.0 + 32.0;
       //         ----------------
       lcd.print("Temp C          ");
       lcd.setCursor(6, 0);
       lcd.print(tempC);
       
       // Affiche la luminosité sur la 2ieme ligne
       int lightReading = analogRead(lightPin);
       lcd.setCursor(0, 1);
       //         ----------------
       lcd.print("Lumiere         ");
       lcd.setCursor(8, 1);
       lcd.print(lightReading);
       delay(500);
    }

J'ai trouvé qu'il était utile de mette l'identification des broches de l'afficheur sur la ligne de commentaire précédent la commande 'lcd'.

//                BS E D4 D5 D6 D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

Cela rend les modifications plus faciles si vous décidez de changer les broches utilisées.

Dans la fonction 'loop', il y a maintenant deux opérations intéressant qui s'y déroulent. Premièrement, nous convertissons la valeur analogique du senseur de température en "température réelle". En seconde position, nous faisons le nécessaire pour afficher cette valeur.

Pour commencer, penchons nous sur le calcul de la température.

    int tempReading = analogRead(tempPin);
    float tempVolts = tempReading * 5.0 / 1024.0;
    float tempC = (tempVolts - 0.5) * 100.0;
    float tempF = tempC * 9.0 / 5.0 + 32.0;

La valeur brute lue depuis le senseur de température est d'abord multipliée par 5 et ensuite divisé par 1024 pour nous fournir la tension (entre 0 et 5v) sur la broche analogique 'tempPin'.

Pour convertir la tension provenant du TMP36 en degrés Celcuis (en température réelle), il faut soustraire 0.5V à la mesure puis multiplié par 100.

Pour convertir la température en degrés Fahrenheit, il faut multiplier par 9/5 puis ajouter 32.

Constamment rafraichir l'information lue sur un écran LCD peut être un peu délicat. Le problème principale réside dans le fait que l'information (lue sur le senseur de température) peut avoir un nombre différent de caractères. Ainsi, si la température passe de 12.45 degrés Celsius à 9.32 degré Celsius alors il y a un caractère de plus (de l'ancienne valeur, le dernier) qui n'est pas effacée de l'écran lorsque l'on affiche la valeur 9.32.

Dans pareil cas, l'affiche présenterai 9.325 (le dernier "5" provenant de l'ancien affichage de la valeur 12.45).

Les anciennes valeurs affichées présente donc le danger de ne pas être totalement "effacée" avant l'affichage d'une nouvelle valeur.

Pour éviter ce problème, le programme écrit entièrement le contenu de la ligne à chaque fois (en utilisant des espace comme dans la ligne lcd.print("Temp C ");

    // ----------------
    lcd.print("Temp C          ");
    lcd.setCursor(6, 0);
    lcd.print(tempC);

Le commentaire un peu bizarre est utilisé pour se souvenir de la largeur de la ligne (16 colonnes). Vous pouvez alors afficher (imprimer) une chaine de caractères de cette longueur avec des espaces où les valeurs seront affichées.

Ensuite, pour remplir les "blancs", placez le curseur à la position où la valeur du senseur doit être affichée.

Cette approche est utilisée à l'identique pour afficher le niveau de luminosité. Il n'y a pas d'unité pour le niveau de luminosité, nous affichons juste la valeur brute telle qu'elle est lue sur l'entrée analogique.

Créer par Simon Monk pour AdaFruit

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.