Projet Control module


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 l'ecran)
code: [select]
//   g f + b
//   | | | | |   -> pins , segments control
//   ---------
//  f|   a   |b
//   |---g---|   -> segments
//  e|   d   |c
//   ---------
//   | | | | |   -> pins , segments control
//   e d + c dp

// segments 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 light up
// corresponding segments on led display
#define 2
#define b 3
#define c 4
#define d 5
#define e 6
#define f 7
#define g 8

// pushbutton connected pin 9
#define button 10

// common anode;
// on when pin low
// , off when pin high
#define on high
#define off low

int count = 0; // current display count
int val = 0;   // digital input 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 => 0 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 :
code: [select]
//   g f + b
//   | | | | |   -> pins , segments control
//   ---------
//  f|   a   |b
//   |---g---|   -> segments
//  e|   d   |c
//   ---------
//   | | | | |   -> pins , segments control
//   e d + c dp

// 7 segments pin correspondance
const int = 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 high
// off when pin 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();                        // 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();                        // 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 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


Arduino Forum > International > Français (Moderators: jfs, Snootlab) > Projet Control module


arduino

Comments

Popular posts from this blog

Flip address is out of range arduino uno r3

Arduino Uno not uploading

Indesign and MathType fonts