Décrémentation

Résolu
Bonjour,

Je ne sais pas si c'est le bon endroit pour poster n'hésitez pas à le dire, ça concerne une programmation arduino

J'ai un projet en cours à savoir un intervalomètre programmable à partir d'un clavier 12 touches et un afficheur 16x2, mais devant l'ampleur de la tâche je vais remplacer le clavier par des touches incrémentation - décrémentation - validation et départ.

La partie incrémentation fonctionne et arrivé à la valeur max on ne peut plus incrémenter ce que je recherche. Je bloque sur la partie décrémentation, je m'explique: dès que j'incrémente jusqu'à une valeur supérieur à 10, la décrémentation passe de 10 à 90-80-70 etc..

si quelqu'un a une idée je suis preneur en vous remerciant par avance

Voici le code
#include <Adafruit_LiquidCrystal.h>
Adafruit_LiquidCrystal lcd(10, 11, 5 , 4, 3, 2);

#define valeurMin 1 // pour ne pas descendre en dessous de 0
#define valeurMax 30 // valeur arbitraire


const int Pin_p = 7;    // bouton poussoir +
const int Pin_m = 8;   //bouton poussoir -

int Pin_plus = 0;
int Pin_moins = 0;
int delai = 0; //délai entre 2 prises de vue


void setup(){

  lcd.begin(16, 2);
  pinMode(7, INPUT);  //la résistance de pulldown est à l'exterieur
  pinMode(8, INPUT);
 
  lcd.clear();
  lcd.setCursor(10, 0);
  lcd.print("delai");
}

void loop(){
  lcd.setCursor(10, 1);
  lcd.print(delai);

  if (digitalRead(7) == HIGH) {
    if (delai < valeurMax)delai++;
 
    delay(100);
    while ((digitalRead(7) == HIGH));
    }

  if (digitalRead(8) == HIGH) {
    if (delai > valeurMin)delai--;
    lcd.setCursor(10, 1);
    delay(100);
    while ((digitalRead(8) == HIGH));
  }
}

5 réponses

  1. Contributeur
    bonjour,
    je me demande si ce n'est pas un problème d'affichage:
    après avoir affiché 10, tu affiches 9, mais le zéro reste présent, donc tu vois 90.
    1. Contributeur
      peut-être ainsi:
      char affichage[80];
      sprintf(char , "%3d" , delai);
      lcd.print(affichage);
    2. @yg_beMerci sympa d'avoir répondu rapidement

      Effectivement c'est bien ça seul le 0 reste affiché . Peux-tu commenter le code?
    3. Contributeur
      @maxas-tu lu la documentation de la fonction sprintf?
      as-tu une question?
    4. @yg_beJe vais regarder la fonction sprintf?
  2. Modérateur
    Je note que dans ton code, tu déclares :
    const int Pin_p = 7;    // bouton poussoir +
    const int Pin_m = 8;   //bouton poussoir -
    
    int Pin_plus = 0;
    int Pin_moins = 0;


    Mais que tu utilises directement les valeurs numériques ailleurs dans le code :
    digitalRead(7)
    1. Dans le 2ème if j’ai intercalé ce bout de code, ça à l'air de fonctionner

      if (digitalRead(8) == HIGH) {
      if (delai > valeurMin)delai--;

      lcd.clear();
      lcd.setCursor(10, 0);
      lcd.print("delai");
      lcd.setCursor(10, 1);
      delay(10);
      while ((digitalRead( Pin_m) == HIGH));

      Reste à gérer les petits problèmes de rebond et surtout activer le décompte une fois le délai choisi et arrivé à 0 décrémenter la variable "nombre de clichés"

      La gestion du gestion du nombre de clichés se fera de la même manière, sauf que le minimum sera de 1000 jusqu'à au moins 3000

      Bref encore du boulot, d'autant plus que je ne suis encore un virtuose de la programmation
      1. Contributeur
        peux-tu alors marquer la discussion comme résolue?
    2. Je voudrais bien mais je ne vois pas où il faut cliquer

      Encore merci