Pages: [1]   Go Down
Author Topic: Voir la valeur des entrées analogiques sur LCD  (Read 1888 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Je souhaiterai faire un programmer qui m'indique sur un LCD 16x2 la valeur d'une entrée analogique multiplexer avec un 4051.
Le schema est le suivant


en fait j'arrive a afficher la valeur du premier potar mais je voudrai que lorsque j'en bouge un autre le LCD m'affiche le numéro du potar et ca valeur.
Voici ou en ai mon code qui fonctionne mais ai loin d'etre complet


/*
  
 Le but du circuit est de lire la valeur d'un des huits potentiometre sur
 l'afficheur LCD en passant par un multiplexage analogique des entrées
 
 

 */

// include the library code:
#include <LiquidCrystal.h>
#include <EEPROM.h>


// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Initialsé le 4051 avec les pins de sorti
int AnalogIn = 0;  // valeur de la Pin  analogique d'entrée
byte AnalogInValue1 = 0; //  valeur du potar 1
byte AnalogInValue2 = 0; //  valeur du potar 2
int oldAnalogInValue = 0; // valeur lu a l'entrée de la Pin
int r0 = 0;      //value select pin at the 4051 (s0)
int r1 = 0;      //value select pin at the 4051 (s1)
int r2 = 0;      //value select pin at the 4051 (s2)
int row = 0;     // storeing the bin code
int count = 0;    // just a count
int  bin [] = {000, 1, 10, 11, 100, 101, 110, 111};//bin = binär, some times it is so easy
byte val1; // valeur enreg dans l'eeprom du potar 1
byte val2; // valeur enreg dans l'eeprom du potar 2

void setup() {
  
  // set le bon LCD
  lcd.begin(16, 2);
  // ecrire message sur LCD
  lcd.print("valeur Pot");
  
  // initialise les pins de sorti pour 4051
  pinMode(8, OUTPUT);    // s0
  pinMode(9, OUTPUT);    // s1
  pinMode(10, OUTPUT);    // s2
  
}

void loop() {
  
  // set the cursor to column 0, line 1
  
  
  //scanner les entrées du 4051
  for (count=0; count<=7; count++) {
    row = bin[count];      
    r0 = row & 0x01;
    r1 = (row>>1) & 0x01;
    r2 = (row>>2) & 0x01;
    digitalWrite(8, r0);
    digitalWrite(9, r1);
    digitalWrite(10, r2);
    delay (0);
  
    
  // enreg la valeur du potar 1 dans l'eeprom add 1  
    if (count == 0){
      AnalogInValue1 = analogRead (AnalogIn)/ 4;
      EEPROM.write (1, AnalogInValue1);
      val1 = EEPROM.read (1);
    }
  // enreg la valeur du potar 2 dans l'eeprom add 2
    if (count == 1){
      AnalogInValue2 = analogRead (AnalogIn)/ 4;
      EEPROM.write (2, AnalogInValue2);
      val2 = EEPROM.read (2);
    }
      // mettre le curseur en 2 ligne
     lcd.setCursor(0, 1);
     //print vlaeur du potar 1
     lcd.print(val1, DEC);
  }
}


merci pour votre aide
je sais que le code n'est pas très avancer mais comme je suis un Newbie j'ai encore du mal avec les automatismes de la programmation
 :-? :-?
Logged

Central Europe
Offline Offline
Edison Member
*
Karma: 7
Posts: 1220
Use the Source, Luke.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

quelques petites remarques:

Ecrire dans l'EEPROM chaque fois que loop() est appelé, est une très mauvaise idée. "'EEPROM est spécifié pour 100000 cycles d'écriture, après il a le droit de mourir en bon style. Avec ce que tu fais, plus d'EEPROM fonctionnant après 10 secondes. Plutôt il vaudrait utiliser un array pour tes valeurs.

Ton truc avec l'array bin est très douteux. If fait quelque chose, mais je croix que ce n'est pas ce que tu veux. A quoi bon? Dans ton array bin tu as les valeurs de 0 à 7 sur les indices 0 à 7. Pourquoi pas seulement:
Code:
r0 = count & 0x01;
   r1 = (count>>1) & 0x01;
   r2 = (count>>2) & 0x01;

Et enfin, si tu gardes les valeurs dans un array, tu peux afficher toutes les valeurs à ta discrétion, l'une après l'autre, toutes en même temps. Tous dépend de ce que tu veux achever.

Korman
« Last Edit: September 24, 2010, 06:29:21 am by Korman » Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3641
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je confirme, tu vas flinguer ton eeprom ... et dans ton code ça n'a aucune utilité !

Si tu veux afficher la valeur si un potar change, il suffit dans ta boucle d'enregistrer la tension de chaque potar à chaque cycle, et d'une boucle complète à l'autre tu compares la valeur à la précédente. Tu choisis un écart significatif, et si l'écart mesuré entre les deux valeurs est supérieur à ton écart significatif, alors le LCD affiche ce potar.
Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci B@tto pour ton aide ,
J'ai réussi a faire ce petit programme qui fonctionne en émulation mais je voudrai savoir s'il était possible de simplifié avec un switch ou un Array.

/*
  
 
 Le but du circuit est de lire la valeur d'un des huits potentiometre
 l'afficheur LCD en passant par un multiplexage analogique des entrées
 
 */

// include the library code:
#include <LiquidCrystal.h>
#include <EEPROM.h>


// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


int analogIn = 0;  // valeur de la Pin  analogique d'entrée

int valuepot1 = 0; //  valeur du potar 1
int valuepot2 = 0; //  valeur du potar 2
int oldvaluepot1 = 0;
int oldvaluepot2 = 0;
int valuepot3 = 0; //  valeur du potar 3
int valuepot4 = 0; //  valeur du potar 4
int oldvaluepot3 = 0;
int oldvaluepot4 = 0;
int valuepot5 = 0; //  valeur du potar 5
int valuepot6 = 0; //  valeur du potar 6
int oldvaluepot5 = 0;
int oldvaluepot6 = 0;
int valuepot7 = 0; //  valeur du potar 7
int valuepot8 = 0; //  valeur du potar 8
int oldvaluepot7 = 0;
int oldvaluepot8 = 0;

// Initialsé le 4051 avec les pins de sorti

int r0 = 0;      //value select pin at the 4051 (s0)
int r1 = 0;      //value select pin at the 4051 (s1)
int r2 = 0;      //value select pin at the 4051 (s2)
int row = 0;     // storeing the bin code
int count = 0;    // just a count
int  bin [] = {000, 1, 10, 11, 100, 101, 110, 111};//bin = binär, some times it is so easy

void setup() {
  
  // set up the LCD's number of rows and columns:
  lcd.begin(16, 2);
  
  
  
  // initialise les pins de sorti pour 4051
  pinMode(8, OUTPUT);    // s0
  pinMode(9, OUTPUT);    // s1
  pinMode(10, OUTPUT);    // s2
  
}

void loop() {
    
  //scanner les entrées du 4051
  for (count=0; count<=7; count++) {
    row = bin[count];      
    r0 = row & 0x01;
    r1 = (row>>1) & 0x01;
    r2 = (row>>2) & 0x01;
    digitalWrite(8, r0);
    digitalWrite(9, r1);
    digitalWrite(10, r2); //Serial.println(bin[count]);
    delay (0);
  
  
    
  // enreg la valeur du potar 1 dans une variable
    if (count==0){
      valuepot1 = analogRead (analogIn);
      if (valuepot1 != oldvaluepot1){
        valuepot1 = analogRead (analogIn);
        lcd.setCursor(0,0);
        lcd.print("Valeur Pot1");
        lcd.setCursor(0,1);
        lcd.print(valuepot1,DEC);
      }
    }
    oldvaluepot1 = (valuepot1);
    
    // enreg la valeur du potar 2 dans une variable
    if (count==4){
      valuepot2 = analogRead (analogIn);
      if (valuepot2 != oldvaluepot2){
        valuepot2 = analogRead (analogIn);
        lcd.setCursor(0,0);
        lcd.print("Valeur Pot2");
        lcd.setCursor(0,1);
        lcd.print(valuepot2,DEC);
      }
    }
    oldvaluepot2 = (valuepot2);
    
    // enreg la valeur du potar 3 dans une variable
    if (count==2){
      valuepot3 = analogRead (analogIn);
      if (valuepot3 != oldvaluepot3){
        valuepot3 = analogRead (analogIn);
        lcd.setCursor(0,0);
        lcd.print("Valeur Pot3");
        lcd.setCursor(0,1);
        lcd.print(valuepot3,DEC);
      }
    }
    oldvaluepot3 = (valuepot3);
    
    // enreg la valeur du potar 4 dans une variable
    if (count==6){
      valuepot4 = analogRead (analogIn);
      if (valuepot4 != oldvaluepot4){
        valuepot4 = analogRead (analogIn);
        lcd.setCursor(0,0);
        lcd.print("Valeur Pot4");
        lcd.setCursor(0,1);
        lcd.print(valuepot4,DEC);
      }
    }
    oldvaluepot4 = (valuepot4);
    
    // enreg la valeur du potar 5 dans une variable
    if (count==1){
      valuepot5 = analogRead (analogIn);
      if (valuepot5 != oldvaluepot5){
        valuepot5 = analogRead (analogIn);
        lcd.setCursor(0,0);
        lcd.print("Valeur Pot5");
        lcd.setCursor(0,1);
        lcd.print(valuepot5,DEC);
      }
    }
    oldvaluepot5 = (valuepot5);
    
    // enreg la valeur du potar 6 dans une variable
    if (count==5){
      valuepot6 = analogRead (analogIn);
      if (valuepot6 != oldvaluepot6){
        valuepot6 = analogRead (analogIn);
        lcd.setCursor(0,0);
        lcd.print("Valeur Pot6");
        lcd.setCursor(0,1);
        lcd.print(valuepot6,DEC);
      }
    }
    oldvaluepot6 = (valuepot6);
    
    // enreg la valeur du potar 7 dans une variable
    if (count==3){
      valuepot7 = analogRead (analogIn);
      if (valuepot7 != oldvaluepot7){
        valuepot7 = analogRead (analogIn);
        lcd.setCursor(0,0);
        lcd.print("Valeur Pot7");
        lcd.setCursor(0,1);
        lcd.print(valuepot7,DEC);
      }
    }
    oldvaluepot7 = (valuepot7);
    
    // enreg la valeur du potar 8 dans une variable
    if (count==7){
      valuepot8 = analogRead (analogIn);
      if (valuepot8 != oldvaluepot8){
        valuepot8 = analogRead (analogIn);
        lcd.setCursor(0,0);
        lcd.print("Valeur Pot8");
        lcd.setCursor(0,1);
        lcd.print(valuepot8,DEC);
      }
    }
    oldvaluepot8 = (valuepot8);
  }
}
      
    
  
Logged

FRANCE
Offline Offline
Sr. Member
****
Karma: 0
Posts: 338
Arduino rocks .... oulalalalala
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

passer par un tableau valeurpotard[8] et valeuroldpotard[8]
va te permettre d alleger ton code, plutot que de mettre plein de IF qui vont ralentir ton processeur ET peut etre generer des erreurs de ocdes ( parentheses et accolades sont responsables de la plus part des bugs)

Code:
for(int i=0;i<8;i++)
{
if(valeurpotard[i]!=valeuroldpotard[i])
{
//blablablabla

}
lcd.setCursor(0+(10*i),0);//affichage déclaé par rapport au numero de boucle
       lcd.print("Valeur Pot %d",i);
       lcd.setCursor(0+(10*i),1);
       lcd.print(valeurpotard[i],DEC);
}
« Last Edit: October 03, 2010, 05:43:32 am by karistouf » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dis, le logiciel que tu utilises il émule quoi exactement ? est il possible de me dire où l'on peut se le procurer ?

A+
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 104
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

je me permets de répondre car j'ai utilisé ce logiciel en Sciences de l'Ingénieur: il s'agit de protéus isis ares: on l'a utilisé pour simuler des circuits électroniques/électrotechniques, il a une énorme bibliothèque de composants.
Logged

J'apprends tous les jours!

Pages: [1]   Go Up
Jump to: