Reglage delay par potentiometre

Bonjour
j'ai réalisé ce montage très simple, qui me permet lors d'une pression sur BP, l'allumage d'une led, une seconde pression sur le poussoir, le clignotement d'une autre led, et ainsi de suite...

Je souhaiterais ne garder que la partie clignotement de la led mais en ayant la possibilité par le bais d'un potentiometre, de régler le Delay de clignotement.
Je suis débutant dans la programmation et je n'y arrive pas malgré mes multiples recherches. je vous joins le code de base qui fonctionne.
merci d'avance.

[code]

#include <OneButton.h>
const byte buttonPin = 3; // notre bouton est sur la pin 3
OneButton button(buttonPin, true); // true pour le mettre en INPUT_PULLUP
unsigned long temps;

// les pins utilisées pour les LEDs
const byte pinLedBlanche = 4;
const byte pinLedRose = 0;

/
enum {REPOS, ETAT_BLANC, ETAT_ROSE_ON, ETAT_ROSE_OFF} etatCourant;

// ------------------------------------------------------
// Cette fonction installe l'état initial
// ------------------------------------------------------
void mettreAuRepos()
{
  digitalWrite(pinLedBlanche,  LOW);
  digitalWrite(pinLedRose, LOW);
  etatCourant = REPOS;
}

// ------------------------------------------------------
// La fonction de call back, appellée automatiquement quand on clique
// ------------------------------------------------------
void simpleclick()
{
  switch (etatCourant) {
    case REPOS: // on était au repos et on a un appui, on allume la blanche
      digitalWrite(pinLedBlanche, HIGH); // LED blanche alimentée
      etatCourant = ETAT_BLANC; // on note le nouvel état de notre système
      break;

    case ETAT_BLANC:// blanc allumée, on a un appui,ETEINTE
      digitalWrite(pinLedBlanche, LOW); // LED blanche ETEINTE
      digitalWrite(pinLedRose, HIGH);
      temps = millis(); // on stocke la nouvelle heure
      etatCourant = ETAT_ROSE_ON; // on note le nouvel état de notre système
      break;

    case ETAT_ROSE_ON: // Led rose allumée
    case ETAT_ROSE_OFF:
      digitalWrite(pinLedBlanche, HIGH); // LED blanche alimentée
      digitalWrite(pinLedRose, LOW);
      etatCourant = ETAT_BLANC; // on note le nouvel état de notre système
      break;
  }
}

void verifierTemps()
{
  if (millis() - temps >= 500) // délai de 500ms expiré
  {
    temps = millis();
    switch (etatCourant)
    {
      case ETAT_ROSE_ON:
        digitalWrite(pinLedRose, LOW);
        etatCourant = ETAT_ROSE_OFF;
        break;
      case ETAT_ROSE_OFF:
        digitalWrite(pinLedRose, HIGH);
        etatCourant = ETAT_ROSE_ON;
        break;
    }
  }
}

// ------------------------------------------------------
// On initialise notre système dans le setup
// ------------------------------------------------------
void setup() {
  pinMode (pinLedBlanche, OUTPUT);
  pinMode(pinLedRose, OUTPUT);
  //conditions Initiales
  mettreAuRepos();
  // On attache la fonction simpleClick() comme callBack
  button.attachClick(simpleclick);
 }

void loop() {
  // On vérifie l'appui bouton
  button.tick();

  // on vérifie l'événement temps qui passe
  verifierTemps();
}
[/code]

vous n'avez aucun code gérant un potentiomètre

Si c'est votre code, postez le dessin de la machine à état.

bonjour et merci pour votre réponse rapide

le fait est que justement je ne sais pas comment créer un code pour la gestion du potentiomètre

Il faudrait avoir quelque part dans ton code

  • un analogRead() qui retourne l'information de position du potentiomètre
  • une formule qui détermine la durée de la temporisation en utilisant la valeur retournée par analogRead() et qui place cette valeur dans une variable qui remplacera la constante, 500, dans verifierTemps().

Merci pour cette réponse

En fait

Je me suis pas bien expliqué au départ
Il faudrait peut-être pas tenir compte du code que j’ai fourni. Je pensais pouvoir m’en servir en le modifiant mais cela serait peut-être plus simple en tenant pas compte de ce code

Il faut que la led s’allume un temps T1 (durée réglable avec P1) et s’éteint un temps T2 (durée réglable avec P1)

Je suis débutant en programmation et je dois dire que j’ai un peu de mal…;

Le plus simple serait alors de partir de blinkWithoutDelay qui fait partie des codes d'exemples qui sont installés avec l'IDE.
Ma remarque au-dessus reste applicable à blinkWithoutDelay.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.