[DÉBUTANT] Bouton(analog) désynchronisé

Bonjour à tous,

premièrement j'aimerais si c'est posssible avoir un tuteur (par messenger ou quelque chose du genre).
Deuxiement je cherche à que lorsque ledDesc() est en marche que lorsque je réappuis sur le bouton ils arrêtent. Pour l'instant ca fonctionne mais avec un délais aléatoire.

int ledCnt;
int readBtn;
bool btnState = false;
bool prvState = false;
bool ledOn = false;
long debounce = 20;
long time = 0;

void setup() {

  Serial.begin(9600);                                          //Démarrer serial
  for (int pinCnt = 13; pinCnt >= 2; pinMode(pinCnt--, OUTPUT)); //Position des pins 13 à 2 en OUTPUT
  digitalWrite(13, LOW);                                       //Pin 13 off
}

void loop() {

  readBtn = analogRead(A2);                                // Entrer la valeur de l'analog A2 (BOUTON) dans une variable
  if (readBtn <= 1035 && readBtn >= 1015) btnState = true; // Transformer la valeur du bouton en état
  else btnState = false;

  if (btnState == true && prvState == false && (millis() - time) > debounce) //Verifier l'état du bouton
  {
    if (ledOn == true) ledOn = false;
    else ledOn = true;
    time = millis();
  }

  prvState = btnState;
  if (ledOn == true) ledDesc();
  Serial.println(readBtn);

}

void ledDesc()                                                              //Led qui allume en descendant
{
  ledCnt = 11;
  while (ledCnt >= 2)
  {
    digitalWrite(ledCnt, HIGH);
    delay(50);
    digitalWrite(ledCnt, LOW);
    ledCnt--;
    Serial.println(readBtn);
  }
}

Merci beaucoup de votre aide.

Bonjour et bienvenue

Merci de corriger votre post ci dessus et rajoutez les code tags autour du code:
[code]`` [color=blue]// votre code ici[/color] ``[/code].

ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)

ensuite on pourra se pencher sur le soucis...

premièrement j'aimerais si c'est posssible avoir un tuteur (par messenger ou quelque chose du genre).

ça on ne fait pas, ici il n'y a que des bénévoles qui savent se montrer patients et offrir des idées si vous montrez que vous bossez et commencez par lire les posts épinglés en haut du forum sur les bons usages... :slight_smile:

OK parfait pour le tuteur... Ouais j'ai eu quelque soucis dans mes copier coller du code et de correction du post mais tout est dans l'ordre maintenant.

Merci - c'est tout de suite plus lisible!

bon commencez par parcourir les tutos d'eskimon

le tuto d'eskimon sur les boutons par exemple :slight_smile:

quand vous faites cela

readBtn = analogRead(A2);
  if (readBtn <= 1035 && readBtn >= 1015) btnState = true; // Transformer la valeur du bouton en état
  else btnState = false;

analogRead() va retourner une valeur entre 0 et 1023 donc votre if pour la partie readBtn <= 1035 sera toujours vraie --> cette partie ne sert donc à rien par exemple. --> il vaut mieux lire l'état d'un bouton par du tout ou rien sur une pin digitale ou avec un digitalRead()

Sinon combien de temps pensez vous que la fonction ledDesc() prends? est-elle interruptible si vous appuyez sur le bouton?

un autre tuto à regarder c'est celui de la gestion du temps (ou l'exemple blink without delay qui est fourni avec l'IDE)

bon commencez par parcourir les tutos d'eskimon

le tuto d'eskimon sur les boutons par exemple :slight_smile:

Merci pour les références je vais allé jeter un oeil.

analogRead() va retourner une valeur entre 0 et 1023

Haaa d'accord ... je ne comprends pas totalement tout ... lorsque j'avais plus d'un bouton j'avais des lectures différente. Il se base sur quoi pour la valeur afficher, le voltage,l'ampérage ou la résistance?

il vaut mieux lire l'état d'un bouton par du tout ou rien sur une pin digitale ou avec un digitalRead()

Ouais je sais c'est plus simple mais malheureusement j'aimerais garder mes digital pour du output :wink:

Sinon combien de temps pensez vous que la fonction ledDesc() prends? est-elle interruptible si vous appuyez sur le bouton?

ledDesc() doit etre infini tant et aussi longtemps je ne réappuis pas sur le bouton et j'ai a peu près un délais entre 500ms a 2 sec lorsque je réappuis et meme des fois rien ne ce passe.

un autre tuto à regarder c'est celui de la gestion du temps (ou l'exemple blink without delay qui est fourni avec l'IDE)

Merci ainsi pour celui ci.

Ouais je sais c'est plus simple mais malheureusement j'aimerais garder mes digital pour du output :wink:

On peut faire un digitalRead() sur un pin analogique...ça retourne HIGH si la tension est supérieure à un certain seuil et LOW sinon (de mémoire je crois que c'est HIGH si la tension présente est supérieur à 0.7 x Vcc et LOW si inférieure à 0.3 x Vcc)

ledDesc() n'est pas infinie - elle prend en gros 10 x 50ms (à cause du délai bloquant de 50ms) et un peu plus pour les commandes des pins. Donc pendant ces 500ms aucun bouton n'est vérifié (vous ne remontez pas à la loop pour vérifier le bouton)...