DIY - Afficheur rapports arduino et xbox

  • Hello, depuis tout petit j'ai toujours rêvé d'avoir un afficheur avec un gros chiffre rouge pour me dire sur quel rapport je suis... ben, j'y suis presque.

    Sauf que ce fichu code arduino me fait perdre les derniers cheveux qui me restent. J'arrive à afficher les vitesses en montant et en descendant, a l'initialisation du digit ça part même sur un 0 (point mort) par contre si j'ai le malheur de vouloir descendre un rapport avant d'enclencher la 1ere, un 1 s'affiche. Alors que je souhaiterai ne pouvoir afficher la première qu'avec la première impulsion positive. Si je tripote le levier en descendant les rapports en partant du point mort, je ne voudrai avoir que le 0. Quelle ligne rajouter à ce fichu code ???? Si une âme charitable pouvait se pencher sur mon cas désespéré.... :((

    Afficher le Spoiler


    //GND to Pin 1 connected with 220 ohm resistor.

    //Arduino Sketch code

    const int a = 8; //For displaying segment "a"

    const int b = 9; //For displaying segment "b"

    const int c = 4; //For displaying segment "c"

    const int d = 5; //For displaying segment "d"

    const int e = 6; //For displaying segment "e"

    const int f = 2; //For displaying segment "f"

    const int g = 3; //For displaying segment "g"

    bool bPress = false;

    const int IncbuttonPin = 10; //With 220 ohm resistor

    const int DecbuttonPin = 11; //With 220 ohm resistor

    // Variables will change:

    int buttonPushCounter = 0; // counter for the number of button presses

    int IncbuttonState = 0; // current state of the button

    int lastIncbuttonState = 0; // previous state of the button

    int DecbuttonState = 0; // current state of the button

    int lastDecbuttonState = 0; // previous state of the button

    void setup() {

    // put your setup code here, to run once:

    pinMode(a, OUTPUT); //A

    pinMode(b, OUTPUT); //B

    pinMode(c, OUTPUT); //C

    pinMode(d, OUTPUT); //D

    pinMode(e, OUTPUT); //E

    pinMode(f, OUTPUT); //F

    pinMode(g, OUTPUT); //G

    pinMode( IncbuttonPin , INPUT_PULLUP );

    pinMode( DecbuttonPin , INPUT_PULLUP );

    Serial.begin(9600);

    displayDigit(buttonPushCounter);

    }

    void loop() {

    IncbuttonState = digitalRead(IncbuttonPin);

    DecbuttonState = digitalRead(DecbuttonPin);

    checkIncButtonPress();

    checkDecButtonPress();

    if ( bPress ) {

    bPress = false;

    turnOff();

    displayDigit(buttonPushCounter);

    }

    /*

    for(int i=0;i<10;i++)

    {

    displayDigit(i);

    delay(1000);

    turnOff();

    }

    */

    }

    void checkIncButtonPress()

    {

    // compare the IncbuttonState to its previous state

    if (IncbuttonState != lastIncbuttonState) {

    // if the state has changed, increment the counter

    if (IncbuttonState == LOW) {

    // if the current state is HIGH then the button went from off to on:

    bPress = true;

    buttonPushCounter++;

    if ( buttonPushCounter > 6) buttonPushCounter = 6 ;

    Serial.println("on");

    } else {

    // if the current state is LOW then the button went from on to off:

    Serial.println("off");

    }

    // Delay a little bit to avoid bouncing

    delay(50);

    }

    // save the current state as the last state, for next time through the loop

    lastIncbuttonState = IncbuttonState;

    }

    void checkDecButtonPress()

    {

    // compare the IncbuttonState to its previous state

    if (DecbuttonState != lastDecbuttonState) {

    // if the state has changed, increment the counter

    if (DecbuttonState == LOW) {

    // if the current state is HIGH then the button went from off to on:

    bPress = true;

    buttonPushCounter--;

    if ( buttonPushCounter < 1) buttonPushCounter = 1 ;

    Serial.println("on");

    } else {

    // if the current state is LOW then the button went from on to off:

    Serial.println("off");

    }

    // Delay a little bit to avoid bouncing

    delay(50);

    }

    // save the current state as the last state, for next time through the loop

    lastDecbuttonState = DecbuttonState;

    }

    void displayDigit(int digit)

    {

    //Conditions for displaying segment a

    if (digit != 1 && digit != 4)

    digitalWrite(a, HIGH);

    //Conditions for displaying segment b

    if (digit != 5 && digit != 6)

    digitalWrite(b, HIGH);

    //Conditions for displaying segment c

    if (digit != 2)

    digitalWrite(c, HIGH);

    //Conditions for displaying segment d

    if (digit != 1 && digit != 4 && digit != 7)

    digitalWrite(d, HIGH);

    //Conditions for displaying segment e

    if (digit == 2 || digit == 6 || digit == 8 || digit == 0)

    digitalWrite(e, HIGH);

    //Conditions for displaying segment f

    if (digit != 1 && digit != 2 && digit != 3 && digit != 7)

    digitalWrite(f, HIGH);

    //Conditions for displaying segment g

    if (digit != 0 && digit != 1 && digit != 7)

    digitalWrite(g, HIGH);

    }

    void turnOff()

    {

    digitalWrite(a, LOW);

    digitalWrite(b, LOW);

    digitalWrite(c, LOW);

    digitalWrite(d, LOW);

    digitalWrite(e, LOW);

    digitalWrite(f, LOW);

    digitalWrite(g, LOW);

    }

    Enfin, si c'est faisable... :B

  • External Content www.youtube.com
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

    424.png

  • Merci Maverick, je l'ai cherché un moment cette vidéo... au départ c'est cela que je voulais faire, puis j'ai trouvé un afficheur 7 segments, et du coup je voudrai le terminer. Mais certainement je ferai aussi cette version.

    Je précise, je ne peux récupérer directement des infos dans un jeu, car je suis sur xbox one, eh ouais, je ne suis pas parfait....

    mais mon code au dessus fonctionne à 99%, testé, et c'est ce problème de "point de départ" qui me reste à solutionner, avec un peu d'aide.... :timide:

  • En fait, il faudrait que la touche de descente ne puisse fonctionner qu'une fois la première enclenchée. Mais là, c'est au dessus de mes compétences maigrichonnes en code.