Go Down

Topic: Projet Control module (Read 13659 times) previous topic - next topic

200sx200

Bonjour tous le monde :)

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)
Code: [Select]
//   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.

200sx200

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

voici mon code :
Code: [Select]
//   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

infobarquee

bonjour,
remplace tous les boutons

Code: [Select]
pinMode(BUTTON, INPUT);
PAR
pinMode(BUTTON, INPUT_PULLUP);


et tu peux rajouter ceci pour chaque bouton

Code: [Select]
if (Push == HIGH) 
while(Push == HIGH){}
AUCUNE AIDE PAR MP

200sx200

#3
May 31, 2017, 08:53 pm Last Edit: Jun 01, 2017, 04:50 am by 200sx200
Merci pour votre réponse :)

Cependant je n'y arrive pas :
Code: [Select]
//   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.

kamill

Bonjour,

Il faut que tu testes si le bouton a changé d'état en comparant à l'état précédent
Comme ceci par exemple:
Code: [Select]
  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;
  }

200sx200

Bonjour
merci pour la réponse :)

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

J'utilise votre code comme ça ?

Code: [Select]
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.

kamill

Comme ça:
Code: [Select]
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).

200sx200

#7
Jun 01, 2017, 04:58 pm Last Edit: Jun 01, 2017, 05:11 pm by 200sx200
Ah super c'est nikel , Merci beaucoup.

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

kamill

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?

200sx200

#9
Jun 01, 2017, 05:37 pm Last Edit: Jun 02, 2017, 06:14 pm by 200sx200
Merci pour ton explication :)

200sx200

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 ?

kamill

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
Code: [Select]
...
   {
     if (Push == HIGH)                             // pression capté
       if (vitesse<3)
         vitesse++;                                  // vitesse +1
   }
...


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

200sx200

#12
Jun 02, 2017, 07:06 pm Last Edit: Jun 02, 2017, 07:24 pm by 200sx200
Ah ok , j'ai essayé comme ça :

Code: [Select]
//   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)

200sx200

#13
Jun 02, 2017, 07:28 pm Last Edit: Jun 02, 2017, 07:42 pm by 200sx200
comme ça donc ?
Code: [Select]
//   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 :)

kamill

#14
Jun 02, 2017, 07:48 pm Last Edit: Jun 02, 2017, 07:49 pm by kamill
Pourquoi 3?
Parce que c'était une erreur  :smiley-confuse: . On va dire que c'était pour voir si tu suivais  :D

Go Up