Décrémentation [Résolu]

Signaler
-
 max -
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

Messages postés
13948
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021
785
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.
Messages postés
13948
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021
785
peut-être ainsi:
char affichage[80];
sprintf(char , "%3d" , delai);
lcd.print(affichage);
>
Messages postés
13948
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021

Merci sympa d'avoir répondu rapidement

Effectivement c'est bien ça seul le 0 reste affiché . Peux-tu commenter le code?
Messages postés
13948
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021
785 > max
as-tu lu la documentation de la fonction sprintf?
as-tu une question?
>
Messages postés
13948
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021

Je vais regarder la fonction sprintf?
Messages postés
14759
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 janvier 2021
275
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)
Effectivement, je corrige pour voir
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
Messages postés
13948
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 janvier 2021
785
peux-tu alors marquer la discussion comme résolue?
Je voudrais bien mais je ne vois pas où il faut cliquer

Encore merci