simplifier un programme ?

Bonjour,

J'ai fait ce petit programme qui me permet de lire la valeur de huit potentiomètres multiplexer sur un LCD et je voudrai le simplifier, mais je ne sais pas comment.
Dans ce programme j'ai repeter la même operation pour les huits potentiometres, n'y a t'il pas un moyen de simplifier cela ?
Merci pour votre aide

Voici le programme:

/*
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
byte val1; // valeur enreg dans l'eeprom du potar 1
byte val2; // valeur enreg dans l'eeprom du potar 2

void setup() {

// set up the LCD's number of rows and columns:
lcd.begin(16, 2);

// initialise les pins de sorti pour 4051
pinMode(10, OUTPUT); // s0
pinMode(9, OUTPUT); // s1
pinMode(8, 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); //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.clear();
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(1,1);
lcd.print(valuepot8,DEC);
}
}
oldvaluepot8 = (valuepot8);
}
}

Salut,

Quand dans un programme, on répète plus d'une fois la même chose, c'est signe qu'il est temps de faire une fonction :

print "Bonjour";
print "Un";
print "Bonjour";
print "Deux";
print "Bonjour";
print "Trois";
print "Bonjour";
print "Quatre";
print "Bonjour";
print "Cinq";

est équivalent à :

void ecris(char * texte){
  print "Bonjour";
  print texte;
}
ecris("un");
ecris("deux");
ecris("trois");
ecris("quatre");
ecris("cinq");

De plus l'usage de tableaux est utile pour stocker des valeurs d'un même type :

char * texte={"un","deux","trois","quatre","cinq"};
int n;
for(n=0;n<5;n++){
  ecris(texte[n]);
}

Va appeler la fonction "ecris" avec chacune des 5 valeurs du tableau "texte".

churchill

bonjour

une peut plus simple

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

// rajouter
int donne[8]; // tableau valeur lue


// 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
byte val1; // valeur enreg dans l'eeprom du potar 1
byte val2; // valeur enreg dans l'eeprom du potar 2

void setup() {
  
  // set up the LCD's number of rows and columns: 
  lcd.begin(16, 2);
  
  
  
  // initialise les pins de sorti pour 4051
  pinMode(10, OUTPUT);    // s0
  pinMode(9, OUTPUT);    // s1
  pinMode(8, 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); //Serial.println(bin[count]);
    delay (5000);  // temps pour la lecture sur le LCD 5 secondes
    
    // dans le tableau tu aura les valeurs de chaque potar donne[0]= potar 
    
    donne[count] = analogRead (analogIn);
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Valeur Pot");
         lcd.print(donne[count]);
        lcd.setCursor(0,1);
        lcd.print(donne[count],DEC);
  }
  
}