Projet Control module

Bonjour tous le monde :slight_smile:

j'ai découvert arduino il ya une semaine en cherchant un moyen de pouvoir controller une boite de vitesse automatique (non récente). Je me suis donc mis à suivre des cours, tuto mais même si la logique peut être simple ce n'est pas du tous le cas.

Je vous explique explique le projet:

1-La carte arduino connecté au moteur reçois les informations nécessaire au bon fonctionnement .

2-Selon les informations reçues (RPM, Vitesse, Position pédale) => action sur des solenoides (3 +2 ) en 12V
(Les positions des solenoides controles le rapport de vitesse) example si :
-Le 1er en ON, le 2eme en OFF,le 3eme en OFF = la vitesse 1
-Si 1er en ON, le 2eme en OFF,le 3eme en ON = la vitesse 2 ect.... 4 vitesse au total.

3-Un afficheur 7 segments afficherais le numéro de vitesse (mini 1.2.3.4 max)

4-Deux boutons poussoirs pour changer les rapports toujours de 1 à 4 maximum .

Voici un Schéma approximatif de la chose :

Maintenant ce que j'ai fais:

J'ai trouvé sur internet des codes pour afficher les informations moteur en temps réel (via la prise diag):
arduino-consult.ino
Code à modifier car pas besoin de l’écran et je possède une carte Méga.

De ce que j'ai compris je seulement branché les pins Rx et Tx pour recevoir les infos.

En revanche je ne sais pas comment me branché (une 2éme fois) sans affecté les infos car une prise sera déjà connecté pour un affichage au tableau de bord.

Mon montage actuelle :

Voici mon code actuelle : (action appui sur bouton, +1 a l'ecran)

//   G F + A B
//   | | | | |   -> pins and segments they control
//   ---------
//  F|   A   |B
//   |---G---|   -> segments
//  E|   D   |C
//   ---------
//   | | | | |   -> pins and segments they control
//   E D + C DP

// Segments that make each number when lit:
// 0 => ABCDEF
// 1 => BC
// 2 => ABDEG
// 3 => ABCDG
// 4 => BCFG
// 5 => ACDFG
// 6 => ACDEFG
// 7 => ABC
// 8 => ABCDEFG
// 9 => ABCDFG

// Arduino digital pins used to light up
// corresponding segments on the LED display
#define A 2
#define B 3
#define C 4
#define D 5
#define E 6
#define F 7
#define G 8

// Pushbutton connected to pin 9
#define BUTTON 10

// Common anode;
// on when pin is low
// and off when pin is high
#define ON HIGH
#define OFF LOW

int count = 0; // current display count
int val = 0;   // digital input from button

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(BUTTON, INPUT);
  one();
}

void loop() {
  val = digitalRead(BUTTON);
  if (val == HIGH) {
    count++;
    delay(200);
    switch (count) {
      case 1:
        one();
        break;
      case 2:
        two();
        break;
      case 3:
        three();
        break;
      case 4:
        four();{
        count = -1;
        break;
      }
    }
  }
}

// 1 => BC
void one() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
}

// 2 => ABDEG
void two() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, OFF);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
}

// 3 => ABCDG
void three() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
}

// 4 => BCFG
void four() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
}

Ce que je souhaite c'est faire -1 si appuie sur un 2éme bouton et que même si je reste appuyé longtemps sa ne saute pas de chiffre
et ne pas tourner, si appui bouton + avec le chiffre 4 => zero action
idem pour le 1 et bouton -

Merci d'avance déjà pour avoir pris le temps de lire et pour les futur possible aides à réaliser ce projet.

J'avance un peu sur la programmation mais je reste bloqué sur la boucle.

voici mon code :

//   G F + A B
//   | | | | |   -> pins and segments they control
//   ---------
//  F|   A   |B
//   |---G---|   -> segments
//  E|   D   |C
//   ---------
//   | | | | |   -> pins and segments they control
//   E D + C DP

// 7 Segments Pin correspondance
const int A = 2;
const int B = 3;
const int C = 4;
const int D = 5;
const int E = 6;
const int F = 7;
const int G = 8;

// Push bouton
const int BUTTON = 10;
const int BUTTON2 = 11;

// Led remplace solenoid
const int LedSA = A14;
const int LedSB = A13;
const int LedSClutch = A12;
const int LedSLockup = A7;
const int LedSPressure = A6;


// on when pin is high
// off when pin is low
const int ON = HIGH;
const int OFF = LOW;

//vitesse
int vitesse = 1;


// action push bouton
int Push = +1;   
int Push2 = -1;   


void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(BUTTON, INPUT);
  pinMode(BUTTON2, INPUT);
  pinMode(LedSA, OUTPUT);        //solenoid A
  pinMode(LedSB, OUTPUT);        //solenoid B
  pinMode(LedSClutch, OUTPUT);   //solenoid Overrun Clutch 
  pinMode(LedSLockup, OUTPUT);  //solenoid Lock-up
  pinMode(LedSPressure, OUTPUT); //solenoid Line Pressure
 
}

void loop() { // début du loop  
  
  
  Push = digitalRead(BUTTON);                 // action bouton +
if (Push == HIGH)                             // pression capté
  vitesse++;                                  // vitesse +1
    delay(50);                                // temps de pression nécessaire
     switch (vitesse) { //début du cycle 1-4 
      case 1:                 //-
        Vitesse1();
         break;
      case 2:                 //
        Vitesse2();                        // A partir de 1 monter à 4
         break;   
      case 3:                 //
        Vitesse3();
         break;
      case 4:                 //-
        Vitesse4();
         break;
         
   }//fin cycle 1-4
   
   
  
  Push2 = digitalRead(BUTTON2);                 // action bouton -
if (Push2 == HIGH)                              // pression capté
  --vitesse;                                    //vitesse -1
    delay(50);                                  // temps de pression nécessaire
    switch (vitesse) {
      case 4:                 //-
        Vitesse4();
         break;
      case 3:                //
        Vitesse3();                        // A partir de 4 descendre à 1
         break;
      case 2:                //
        Vitesse2();
         break;
      case 1:                //-
        Vitesse12();
         break;
         
    }//fin cycle 4-1


} //fin du loop
   




// 1 => BC
void Vitesse1() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
  digitalWrite(LedSA, HIGH);       
  digitalWrite(LedSB, LOW);       
  digitalWrite(LedSClutch, LOW);   
  digitalWrite(LedSLockup, HIGH);
  digitalWrite(LedSPressure, LOW); // inverser
   
}

// 1 => BC
void Vitesse12() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
  digitalWrite(LedSA, HIGH);       
  digitalWrite(LedSB, LOW);       
  digitalWrite(LedSClutch, LOW);   
  digitalWrite(LedSLockup, HIGH);
  digitalWrite(LedSPressure, LOW); // inverser
   
}

// 2 => ABDEG
void Vitesse2() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, OFF);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  digitalWrite(LedSA, HIGH);       
  digitalWrite(LedSB, HIGH);       
  digitalWrite(LedSClutch, LOW);   
  digitalWrite(LedSLockup, HIGH);
  digitalWrite(LedSPressure, LOW); // inverser
}

// 3 => ABCDG
void Vitesse3() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  digitalWrite(LedSA, HIGH);       
  digitalWrite(LedSB, HIGH);       
  digitalWrite(LedSClutch, HIGH);   
  digitalWrite(LedSLockup, HIGH);
  digitalWrite(LedSPressure, LOW); // inverser
}

// 4 => BCFG
void Vitesse4() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  digitalWrite(LedSA, LOW);       
  digitalWrite(LedSB, LOW);       
  digitalWrite(LedSClutch, HIGH);   
  digitalWrite(LedSLockup, HIGH);
  digitalWrite(LedSPressure, LOW); // inverser
}

et montage:

La fonction led et bouton est bonne sauf :

-je reste appuie sur le bouton fais passé de 1 a 4 rapidement (je veut juste un saut de +1 même si je reste appuyé longtemps

-si je mets un clignotement d'une led pour chaque +1, elle reste allumé et fais sa boucle toute seul

Comment je peut dire que tels bouton ou pin est actif que x temps ( "delay(200)" ) ?

Merci

bonjour,
remplace tous les boutons

pinMode(BUTTON, INPUT);
PAR
pinMode(BUTTON, INPUT_PULLUP);

et tu peux rajouter ceci pour chaque bouton

if (Push == HIGH)  
while(Push == HIGH){}

Merci pour votre réponse :slight_smile:

Cependant je n'y arrive pas :

//   G F + A B
//   | | | | |   -> pins and segments they control
//   ---------
//  F|   A   |B
//   |---G---|   -> segments
//  E|   D   |C
//   ---------
//   | | | | |   -> pins and segments they control
//   E D + C DP

// 7 Segments Pin correspondance
const int A = 2;
const int B = 3;
const int C = 4;
const int D = 5;
const int E = 6;
const int F = 7;
const int G = 8;

// Push bouton
const int BUTTON = 10;
const int BUTTON2 = 11;

// Led remplace solenoid
const int LedSA = A14;
const int LedSB = A13;
const int LedSClutch = A12;
const int LedSLockup = A7;
const int LedSPressure = A6;


// on when pin is high
// off when pin is low
const int ON = HIGH;
const int OFF = LOW;

//vitesse
int vitesse = 1;


// action push bouton
int Push = +1;   
int Push2 = -1;   


void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP);
  pinMode(BUTTON2, INPUT_PULLUP);
  pinMode(LedSA, OUTPUT);        //solenoid A
  pinMode(LedSB, OUTPUT);        //solenoid B
  pinMode(LedSClutch, OUTPUT);   //solenoid Overrun Clutch 
  pinMode(LedSLockup, OUTPUT);  //solenoid Lock-up
  pinMode(LedSPressure, OUTPUT); //solenoid Line Pressure
 
}

void loop() { // début du loop  

  
  Push = digitalRead(BUTTON);                 // action bouton +
if (Push == HIGH)                             // pression capté
  vitesse++;                                  // vitesse +1
    delay(100);                                // temps de pression nécessaire
     switch (vitesse) { //début du cycle 1-4 
      case 1:                 //-
        Vitesse1();
         break;
         while(digitalRead(BUTTON));
      case 2:                 //
        Vitesse2();                        // A partir de 1 monter à 4
         break;  
         while(digitalRead(BUTTON)); 
      case 3:                 //
        Vitesse3();
         break;
         while(digitalRead(BUTTON));
      case 4:                 //-
        Vitesse4();
         break;
         
   }//fin cycle 1-4



  Push2 = digitalRead(BUTTON2);                 // action bouton -
if (Push2 == HIGH)                              // pression capté
  --vitesse;                                    //vitesse -1
    delay(100);                                  // temps de pression nécessaire
    switch (vitesse) {
      case 4:                 //-
        Vitesse4();
         break;
         while(digitalRead(BUTTON));
      case 3:                //
        Vitesse3();                        // A partir de 4 descendre à 1
         break;
         while(digitalRead(BUTTON));
      case 2:                //
        Vitesse2();
         break;
         while(digitalRead(BUTTON));
      case 1:                //-
        Vitesse1();
         break;
         
    }//fin cycle 4-1


} //fin du loop
   




// 1 => BC
void Vitesse1() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
  digitalWrite(LedSA, HIGH);       
  digitalWrite(LedSB, LOW);       
  digitalWrite(LedSClutch, LOW);   
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH); 
   
}

// 2 => ABDEG
void Vitesse2() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, OFF);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  digitalWrite(LedSA, HIGH);       
  digitalWrite(LedSB, HIGH);       
  digitalWrite(LedSClutch, LOW);   
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);
}

// 3 => ABCDG
void Vitesse3() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  digitalWrite(LedSA, HIGH);       
  digitalWrite(LedSB, HIGH);       
  digitalWrite(LedSClutch, HIGH);   
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH); 
}

// 4 => BCFG
void Vitesse4() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  digitalWrite(LedSA, LOW);       
  digitalWrite(LedSB, LOW);       
  digitalWrite(LedSClutch, HIGH);   
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH); 
}

le bouton + et - fonctionne bien mais si je reste appuiyé sur l'un deux sa passe au dernier directe ex:
si 1 affiché et que je reste un peu appuyé il monte jusqu'à 4 et inversement.

Bonjour,

Il faut que tu testes si le bouton a changé d'état en comparant à l'état précédent
Comme ceci par exemple:

  static int pushPrec = LOW;    // état précédent
  Push = digitalRead(BUTTON);                 // action bouton +
  if (Push != pushPrec)
  {
    // le bouton a changé d'état
    {
      if (Push == HIGH)                             // pression capté
        vitesse++;                                  // vitesse +1
    }
    pushPrec = Push;
  }

Bonjour
merci pour la réponse :slight_smile:

mais je ne comprend pas , désolé je débute complètement :confused:

J'utilise votre code comme ça ?

Push = digitalRead(BUTTON);                 // action bouton +
  if (Push != pushPrec)
  {
    // le bouton a changé d'état
    {
if (Push == HIGH)                             // pression capté
  vitesse++;                                  // vitesse +1
    }
    delay(100);                                // temps de pression nécessaire
     switch (vitesse) { //début du cycle 1-4 
      case 1:                 //-
        Vitesse1();
         break;
       case 2:                 //
        Vitesse2();                        // A partir de 1 monter à 4
         break;  
       case 3:                 //
        Vitesse3();
         break;
       case 4:                 //-
        Vitesse4();
         break;
         
   }//fin cycle 1-4
   
pushPrec = Push;

  }

Pas d'erreur dans le code mais la seul chose que sa à changé c'est que sa commence sans affichage et un 1er appuie sa commence au chiffre 2.

Comme ça:

void loop() { // début du loop
  static int pushPrec = LOW;    // état précédent
  Push = digitalRead(BUTTON);                 // action bouton +
  if (Push != pushPrec)
  {
    // le bouton a changé d'état
    {
      if (Push == HIGH)                             // pression capté
        vitesse++;                                  // vitesse +1
    }
    pushPrec = Push;
  }
  switch (vitesse) { //début du cycle 1-4
    case 1:                 //-
      Vitesse1();
      break;
    case 2:                 //
      Vitesse2();                        // A partir de 1 monter à 4
      break;
    case 3:                 //
      Vitesse3();
      break;
    case 4:                 //-
      Vitesse4();
      break;

  }//fin cycle 1-4

Tu fais la même chosse pour bouton2 et tu en profites en pour indenter correctement ton code (Utilises Ctrl T si tu est avec l'IDE sous Windows).

Ah super c'est nikel , Merci beaucoup.

Je suis sous Arduino 1.8.2 et ctrl +T = formatage automatique => je ne connais pas encore.

L'état précédent c'est l'état du bouton avant que tu entre dans la loop
Cet état est mémorisé dans l'exécution de la loop précédente par pushPrec = Push;
Et ça se répète à chaque fois que loop s’exécute, c'est a dire indéfiniment (ou du moins jusqu'à arrêt du système)

Je n'utilise pas la version 1.8.2, c'est bizarre qu'ils aient supprimé ctrl T, qui est très pratique.
Sur les versions précédentes on peut aussi y accéder par le menu Outils/Formatage automatique. Est ce qu'il est toujours présent dans la version 1.8.2?

Merci pour ton explication :slight_smile:

Par contre est-ce que je peux mettre une fin ?

Car si je suis sur "1" par exemple et que j'appuie une fois sur "-" . Il faudra que j'appuie deux fois sur "+" pour arriver à "2".

Est-ce normal ? comment l’empêcher ?

Bien sur tu peux limiter l'évolution de vitesse
Par exemple si vitesse est égal à 4 tu n'incrémente plus la vitesse même si tu appuies sur le bouton

...
   {
     if (Push == HIGH)                             // pression capté
       if (vitesse<3)
         vitesse++;                                  // vitesse +1
   }
...

Tu peux faire un test aussi en décrémentation

Ah ok , j'ai essayé comme ça :

//   G F + A B
//   | | | | |   -> pins and segments they control
//   ---------
//  F|   A   |B
//   |---G---|   -> segments
//  E|   D   |C
//   ---------
//   | | | | |   -> pins and segments they control
//   E D + C DP

// 7 Segments Pin correspondance
const int A = 2;
const int B = 3;
const int C = 4;
const int D = 5;
const int E = 6;
const int F = 7;
const int G = 8;

// Push bouton
const int BUTTON = 10;
const int BUTTON2 = 11;
const int BUTTON3 = 12;

// Led remplace solenoid
const int LedSA = A14;
const int LedSB = A13;
const int LedSClutch = A12;
const int LedSLockup = A7;
const int LedSPressure = A6;


// on when pin is high
// off when pin is low
const int ON = HIGH;
const int OFF = LOW;

//vitesse
int Rapport = 1;




// action push bouton
int Push = +1;
int Push2 = -1;
int PushD ;

// état précédent
static int pushPrec = LOW;
static int push2Prec = LOW;


void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP);
  pinMode(BUTTON2, INPUT_PULLUP);
  pinMode(BUTTON3, INPUT_PULLUP);
  pinMode(LedSA, OUTPUT);        //solenoid A
  pinMode(LedSB, OUTPUT);        //solenoid B
  pinMode(LedSClutch, OUTPUT);   //solenoid Overrun Clutch
  pinMode(LedSLockup, OUTPUT);  //solenoid Lock-up
  pinMode(LedSPressure, OUTPUT); //solenoid Line Pressure

}
void loop() { // début du loop

  //
  // Début du programme de passage vitesse inferrieure avec bouton -
  static int pushPrec = LOW;    // état précédent
  Push = digitalRead(BUTTON);                 // action bouton +
  PushD = digitalRead(BUTTON3);
  if (Push != pushPrec)
  {
    // le bouton a changé d'état
    {
      if ((Push == HIGH) && (PushD == HIGH) && (Rapport <= 1))        // pression capté
        Rapport++;                                  // vitesse +1
    }

    pushPrec = Push;
    
  }
  while (PushD = LOW)
  {
    PositionD();
  pinMode(BUTTON2, LOW);
  pinMode(BUTTON3, LOW);
  }
  
  switch (Rapport) { //début du cycle 1-4
    case 1:                 //-
      Vitesse1();
      break;
    case 2:                 //
      Vitesse2();                        // A partir de 1 monter à 4
      break;
    case 3:                 //
      Vitesse3();
      break;
    case 4:                 //-
      Vitesse4();
      break;

  }//fin cycle 1-4



  //
  // Fin du programme de passage vitesse inferrieure avec bouton +

  //
  // Début du programme de passage vitesse inferrieure avec bouton -
  static int push2Prec = LOW;    // état précédent
  Push2 = digitalRead(BUTTON2);                 // action bouton +
  PushD = digitalRead(BUTTON3);
  if (Push2 != push2Prec)
  {
    // le bouton a changé d'état
    {
      if ((Push2 == HIGH) && (PushD == HIGH) && (Rapport >= 4))        // pression capté
        --Rapport;                                  // vitesse -1
    }

    push2Prec = Push2;
    
  }

  while (PushD = LOW)
  {
    PositionD();
  pinMode(BUTTON2, LOW);
  pinMode(BUTTON3, LOW);
  }
  
  switch (Rapport) { //début du cycle 4-1
    case 1:                 //-
      Vitesse1();
      break;
    case 2:                 //
      Vitesse2();                        // A partir de 4 descendre à 1
      break;
    case 3:                 //
      Vitesse3();
      break;
    case 4:                 //-
      Vitesse4();
      break;

  }//fin cycle 4-1

  
  //
  // Fin du programme de passage vitesse inferrieure avec bouton -




} //fin du loop





// 1 => BC
void Vitesse1() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
  digitalWrite(LedSA, HIGH);
  digitalWrite(LedSB, LOW);
  digitalWrite(LedSClutch, LOW);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);

}

// 2 => ABDEG
void Vitesse2() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, OFF);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  digitalWrite(LedSA, HIGH);
  digitalWrite(LedSB, HIGH);
  digitalWrite(LedSClutch, LOW);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);
}

// 3 => ABCDG
void Vitesse3() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  digitalWrite(LedSA, HIGH);
  digitalWrite(LedSB, HIGH);
  digitalWrite(LedSClutch, HIGH);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);
}

// 4 => BCFG
void Vitesse4() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  digitalWrite(LedSA, LOW);
  digitalWrite(LedSB, LOW);
  digitalWrite(LedSClutch, HIGH);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);
}

// D => ABCDEF
const void PositionD() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, ON);
  digitalWrite(G, OFF);
  digitalWrite(LedSA, LOW);
  digitalWrite(LedSB, LOW);
  digitalWrite(LedSClutch, LOW);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, LOW);
}

Sauf que j'essaye de rajouter un bouton. ( s'il n'est pas en "on", rien ne marche ) et (si bouton off affiche "D" ici zéro)

comme ça donc ?

//   G F + A B
//   | | | | |   -> pins and segments they control
//   ---------
//  F|   A   |B
//   |---G---|   -> segments
//  E|   D   |C
//   ---------
//   | | | | |   -> pins and segments they control
//   E D + C DP

// 7 Segments Pin correspondance
const int A = 2;
const int B = 3;
const int C = 4;
const int D = 5;
const int E = 6;
const int F = 7;
const int G = 8;

// Push bouton
const int BUTTON = 10;
const int BUTTON2 = 11;

// Led remplace solenoid
const int LedSA = A14;
const int LedSB = A13;
const int LedSClutch = A12;
const int LedSLockup = A7;
const int LedSPressure = A6;


// on when pin is high
// off when pin is low
const int ON = HIGH;
const int OFF = LOW;

//vitesse
int vitesse = 1;


// action push bouton
int Push = +1;
int Push2 = -1;

// état précédent
static int pushPrec = LOW;
static int push2Prec = LOW;

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP);
  pinMode(BUTTON2, INPUT_PULLUP);
  pinMode(LedSA, OUTPUT);        //solenoid A
  pinMode(LedSB, OUTPUT);        //solenoid B
  pinMode(LedSClutch, OUTPUT);   //solenoid Overrun Clutch
  pinMode(LedSLockup, OUTPUT);  //solenoid Lock-up
  pinMode(LedSPressure, OUTPUT); //solenoid Line Pressure

}
void loop() { // début du loop

  //
  // Début du programme de passage vitesse inferrieure avec bouton -

  static int pushPrec = LOW;    // état précédent
  Push = digitalRead(BUTTON);                 // action bouton +
  if (Push != pushPrec)
  {
    // le bouton a changé d'état
    {
      if (Push == HIGH)                             // pression capté
      if (vitesse<4)
        vitesse++;                                  // vitesse +1
    }
    pushPrec = Push;
  }
  switch (vitesse) { //début du cycle 1-4
    case 1:                 //-
      Vitesse1();
      break;
    case 2:                 //
      Vitesse2();                        // A partir de 1 monter à 4
      break;
    case 3:                 //
      Vitesse3();
      break;
    case 4:                 //-
      Vitesse4();
      break;

  }//fin cycle 1-4
  //
  // Fin du programme de passage vitesse inferrieure avec bouton +
  //
  // Début du programme de passage vitesse inferrieure avec bouton -

  static int push2Prec = LOW;    // état précédent
  Push2 = digitalRead(BUTTON2);                 // action bouton +
  if (Push2 != push2Prec)
  {
    // le bouton a changé d'état
    {
      if (Push2 == HIGH)                             // pression capté
      if (vitesse >1)
        --vitesse;                                  // vitesse +1
    }
    push2Prec = Push2;
  }
  switch (vitesse) { //début du cycle 1-4
    case 1:                 //-
      Vitesse1();
      break;
    case 2:                 //
      Vitesse2();                        // A partir de 1 monter à 4
      break;
    case 3:                 //
      Vitesse3();
      break;
    case 4:                 //-
      Vitesse4();
      break;

  }//fin cycle 1-4
  //
  // Fin du programme de passage vitesse inferrieure avec bouton -



} //fin du loop





// 1 => BC
void Vitesse1() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
  digitalWrite(LedSA, HIGH);
  digitalWrite(LedSB, LOW);
  digitalWrite(LedSClutch, LOW);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);

}

// 2 => ABDEG
void Vitesse2() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, OFF);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  digitalWrite(LedSA, HIGH);
  digitalWrite(LedSB, HIGH);
  digitalWrite(LedSClutch, LOW);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);
}

// 3 => ABCDG
void Vitesse3() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  digitalWrite(LedSA, HIGH);
  digitalWrite(LedSB, HIGH);
  digitalWrite(LedSClutch, HIGH);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);
}

// 4 => BCFG
void Vitesse4() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  digitalWrite(LedSA, LOW);
  digitalWrite(LedSB, LOW);
  digitalWrite(LedSClutch, HIGH);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);
}

Pourquoi 3?

La comma ça, sa marche bien :slight_smile:

200sx200:
Pourquoi 3?

Parce que c'était une erreur :confused: . On va dire que c'était pour voir si tu suivais :smiley:

;D

//   G F + A B
//   | | | | |   -> pins and segments they control
//   ---------
//  F|   A   |B
//   |---G---|   -> segments
//  E|   D   |C
//   ---------
//   | | | | |   -> pins and segments they control
//   E D + C DP

// 7 Segments Pin correspondance
const int A = 2;
const int B = 3;
const int C = 4;
const int D = 5;
const int E = 6;
const int F = 7;
const int G = 8;

// Push bouton
const int BUTTON = 10;
const int BUTTON2 = 11;
const int BUTTON3 = 12;

// Led remplace solenoid
const int LedSA = A14;
const int LedSB = A13;
const int LedSClutch = A12;
const int LedSLockup = A7;
const int LedSPressure = A6;


// on when pin is high
// off when pin is low
const int ON = HIGH;
const int OFF = LOW;

//vitesse
int vitesse = 1;


// action push bouton
int Push = +1;
int Push2 = -1;
int Push3 = 1;

// état précédent
static int pushPrec = LOW;
static int push2Prec = LOW;
static int push3Prec = LOW;

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP);
  pinMode(BUTTON2, INPUT_PULLUP);
  pinMode(BUTTON3, INPUT_PULLUP);
  pinMode(LedSA, OUTPUT);        //solenoid A
  pinMode(LedSB, OUTPUT);        //solenoid B
  pinMode(LedSClutch, OUTPUT);   //solenoid Overrun Clutch
  pinMode(LedSLockup, OUTPUT);  //solenoid Lock-up
  pinMode(LedSPressure, OUTPUT); //solenoid Line Pressure

}
void loop() { // début du loop
  Push3 = digitalRead(BUTTON3);
  if (Push3 == HIGH)
  {
     Vitesse1();//
    // Début du programme de passage vitesse inferrieure avec bouton -

    static int pushPrec = LOW;    // état précédent
    Push = digitalRead(BUTTON);                 // action bouton +
    if (Push != pushPrec)
    {
      // le bouton a changé d'état
      {
        if (Push == HIGH)                               // pression capté
          if (vitesse < 4)
            vitesse++;                                  // vitesse +1
      }
      pushPrec = Push;
    }



    switch (vitesse) { //début du cycle 1-4
      case 1:                 //-
        Vitesse1();
        break;
      case 2:                 //
        Vitesse2();                        // A partir de 1 monter à 4
        break;
      case 3:                 //
        Vitesse3();
        break;
      case 4:                 //-
        Vitesse4();
        break;

    }//fin cycle 1-4
  }
    // Fin du programme de passage vitesse inferrieure avec bouton +
else Push3 == LOW;
  {
    PositionD();
  }

    //
    // Début du programme de passage vitesse inferrieure avec bouton -
if (Push3 == HIGH)
  {
 Vitesse1();
 
    static int push2Prec = LOW;    // état précédent
    Push2 = digitalRead(BUTTON2);                 // action bouton +
    if (Push2 != push2Prec)
    {
      // le bouton a changé d'état
      {
        if (Push2 == HIGH)                              // pression capté
          if (vitesse > 1)
            --vitesse;                                  // vitesse +1
      }
      push2Prec = Push2;
    }


    switch (vitesse) { //début du cycle 1-4
      case 1:                 //-
        Vitesse1();
        break;
      case 2:                 //
        Vitesse2();                        // A partir de 1 monter à 4
        break;
      case 3:                 //
        Vitesse3();
        break;
      case 4:                 //-
        Vitesse4();
        break;

    }//fin cycle 1-4
  }
  // Fin du programme de passage vitesse inferrieure avec bouton -

  else Push3 == LOW;
  {
    PositionD();
  }

} //fin du loop





// 1 => BC
void Vitesse1() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
  digitalWrite(LedSA, HIGH);
  digitalWrite(LedSB, LOW);
  digitalWrite(LedSClutch, LOW);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);

}

// 2 => ABDEG
void Vitesse2() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, OFF);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  digitalWrite(LedSA, HIGH);
  digitalWrite(LedSB, HIGH);
  digitalWrite(LedSClutch, LOW);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);
}

// 3 => ABCDG
void Vitesse3() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  digitalWrite(LedSA, HIGH);
  digitalWrite(LedSB, HIGH);
  digitalWrite(LedSClutch, HIGH);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);
}

// 4 => BCFG
void Vitesse4() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  digitalWrite(LedSA, LOW);
  digitalWrite(LedSB, LOW);
  digitalWrite(LedSClutch, HIGH);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, HIGH);
}

// D => ABCDEF
void PositionD() {
  digitalWrite(A, OFF);
  digitalWrite(B, OFF);
  digitalWrite(C, OFF);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
  digitalWrite(LedSA, LOW);
  digitalWrite(LedSB, LOW);
  digitalWrite(LedSClutch, LOW);
  digitalWrite(LedSLockup, LOW);
  digitalWrite(LedSPressure, LOW);
}

J'ai trouvé mon problème avec le 3eme bouton .
LA "PositionD" s'additionne au reste du coup example:
quand le "3" s'affiche avec le "0" tous les segement sont allumés.
J'ai donc tous éteint sur la "positionD" et la sa marche normalement.

Je continue à chercher car je veus qu'il affiche D en off et rien en on sauf de 1à4 pour les positions.

else Push3 == LOW;

Bonjour,
est-ce juste ?

j'ai du retiré le Vitess1(); en début de programme car il ce voyait sur le chiffre "2".

J'ai retiré le else et effectivement sa n'a rien changé donc inutile :slight_smile: merci

Le bouton3 simule la position sport(manuel) sur le levier de vitesse .

Peut-on avec l'arduino recevoir des infos via rs232 ou usb et les renvoyer en temps réels via aussi rs232 ou usb tous en pouvant utilisé ces informations ?

example:
Les informations sont originaire de l'ECU via une prise ODB1 (Prise de diagnostique de la voiture) ou DB9.

je souhaite me branché dessus pour utilisé les informations nécessaire au contrôle de la boite de vitesse.

Cependant je souhaite garder la prise de diagnostique libre.

Ou comment peut-on multiplier le nombre de prise sans interférer le signal (qu'il soit identique même avec 3 ou 4 recepteur de branché dessus ) ?

recevoir des infos via rs232 ou usb et les renvoyer en temps réels via aussi rs232 ou usb

donc tu voudrais les recevoir par un usb et les renvoyer par un autre usb ?