Go Down

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

200sx200

#15
Jun 02, 2017, 08:20 pm Last Edit: Jun 02, 2017, 08:46 pm by 200sx200
;D


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 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.

trimarco232

Quote
else Push3 == LOW;
Bonjour,
est-ce juste ?

200sx200

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 :) merci


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

200sx200

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 ) ?


trimarco232

Quote
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 ?

200sx200

#20
Jun 03, 2017, 03:25 pm Last Edit: Jun 03, 2017, 04:57 pm by 200sx200
c'est ça oui.
je pense plus rs232in  => rs232out + (rs232out ou USBout).

Mais faut que l'arduino puisse travailler avec ces valeurs aussi.

Détails :

J'ai "qu'une" prise diag dans l'auto qui sort de l'ECU.
Avec cette prise je voudrais connecter l'arduino qui contrôlera la boite avec ces informations, mais aussi un écran 7" pour affiché les valeurs moteur en continue (peut-être possible directement avec l'arduino méga ou avec une 2ème ? ), tous en gardant une prise de libre en cas de diagnostique.

J'ai trouvé ça pour arduino :
https://www.sainsmart.com/sainsmart-7-7-inch-tft-lcd-screen-sd-card-slot-tft-shield-for-arduino-mega2560-r3.html

trimarco232

le LCD n'est pas urgent

il faut raccorder le véhicule à une des liaisons serial hardware du mega
ainsi :
requête :
console (usb) -> mega(serial1) -> nissan
réponse :
nissan -> (serial1)mega -> (usb)console




200sx200

#22
Jun 03, 2017, 10:54 pm Last Edit: Jun 03, 2017, 11:04 pm by 200sx200
J'avais dessiné ça :



Sauf qu'il faut un shield rs232 car c'est du 12V,
c'est ça ?


Nissan consult arduino:
source:
http://arduino.cybrax-computers.com/


trimarco232

Quote
Sauf qu'il faut un shield rs232 car c'est du 12V, c'est ça ?
alors ça je n'en sais rien, je suis parti de la photo que tu as mis en début de topic :
- il ne semble pas qu'il y ait de conversion 12v <-> 5v au niveau des tx et rx
- tx et rx sont reliés entre eux sur le convertisseur ft232 : on est donc en half duplex sur un fil. Si c'est du LIN BUS (peux-tu avoir l'info ?), il faudra l'interfacer proprement


200sx200

#25
Jun 04, 2017, 12:19 pm Last Edit: Jun 04, 2017, 12:43 pm by 200sx200
J'suis donc dans l'optique de commander :
-RS232-Shield
-Cable-de-raccordement-Digitus-serie SUB-D
-sd-card-slot-tft-shield-for-arduino La j'ai pas compris, le kit avec la Mega est moins cher de 3€ que celui sans  :smiley-eek-blue: ICI

trimarco232

Quote
le LCD n'est pas urgent
rappel

Quote
RS232 Shield
pour quoi faire ?

Quote
Câble de raccordement Digitus série [1x SUB-D mâle 9
pour quoi faire ?

200sx200

le LCD n'est pas urgent
C'est vrai mais c'est un bon moyen de voir si les infos sont bien reçue comme il faut et en temps réelle.
De plus la programmation du LCD prendras du temps.

"RS232 Shield" pour quoi faire ?
Pour eviter de branché directement sur la carte "Tx/Rx" car +12V/-12V risquerai de l'endommager (source Arduino) ?

"Câble de raccordement Digitus série [1x SUB-D mâle 9" pour quoi faire ?
Pour relié l'ECU à la Shield

200sx200

J'ai redessiner mon idée:



Je pense qu'une deuxième carte est nécessaire sachant le nombre de donnée à manipuler .

trimarco232

Quote
+12V/-12V
qu'est-ce qui fonctionne avec ces tensions ?


Quote
Je pense qu'une deuxième carte est nécessaire sachant le nombre de donnée à manipuler
peut-être prématuré (en tous cas tu fais des dessins, c'est bien !)



--> il y a un nouveau connecteur : subD diag, c'est pour y brancher quoi ?

Go Up