probleme programme debutant suite

Bonjour à tous
j'ai, il y a de cela quelques jours, mis un post sur le forum (probleme programme debutant) pour lequel j'ai eu beaucoup d'échange et cela m'a permis d'avancer dans mon problème.
Arrivé presqu'à la fin du codage, je reste bloqué malgré les dernières explications échangées sur le forum.
Voici le programme presque terminé. Quelqu'un peut-il m'aider car je ne m'en sors pas ? Merci d'avance.

[/color]

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

[color=#222222]// les pins utilisées pour les LEDs[/color]
[color=#222222]const byte pinLedBlanche = 4;[/color]
[color=#222222]const byte pinLedRose = 0;[/color]

[color=#222222]// la liste des états possible de notre système[/color]
[color=#222222]// ainsi qu'une variable etatCourant prenant une de ces valeurs[/color]
[color=#222222]enum {REPOS, ETAT_BLANC, ETAT_ROSE_ON, ETAT_ROSE_OFF} etatCourant;[/color]

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

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


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

[color=#222222]    case ETAT_ROSE_ON: // Led rose allumée[/color]
[color=#222222]      digitalWrite(pinLedRose, LOW);[/color]
[color=#222222]      temps = millis();[/color]
[color=#222222]      etatCourant = ETAT_ROSE_OFF;[/color]
[color=#222222]      break;[/color]

[color=#222222]    case ETAT_ROSE_OFF:[/color]
[color=#222222]      //[/color]
[color=#222222]      digitalWrite(pinLedRose, HIGH);[/color]
[color=#222222]      temps = millis(); // on stocke la nouvelle heure[/color]
[color=#222222]      etatCourant = ETAT_ROSE_ON; // on note le nouvel état de notre système[/color]
[color=#222222]      break;[/color]
[color=#222222]  }[/color]
[color=#222222]}[/color]

[color=#222222]void verifierTemps()[/color]
[color=#222222]{[/color]
[color=#222222]  if ((etatCourant == ETAT_ROSE_ON) || (etatCourant == ETAT_ROSE_OFF)) {[/color]
[color=#222222]    if (millis() - temps >= 500) { // délai de 500ms expiré[/color]
[color=#222222]        // .... coder ici ce que l'on doit faire[/color]
[color=#222222]       [/color]
[color=#222222]    }[/color]
[color=#222222]  }[/color]
[color=#222222]}[/color]

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

[color=#222222]void loop() {[/color]
[color=#222222]  // On vérifie l'appui bouton[/color]
[color=#222222]  button.tick();[/color]

[color=#222222]  // on vérifie l'événement temps qui passe[/color]
[color=#222222]  verifierTemps();[/color]
[color=#222222]}[/color]

[ltr][color=#ffffff]probleme programme debutant[/color][/ltr]
[ltr][color=#ffffff]probleme programme debutant[/color][/ltr]

je renvoie le code car il n'était pas très lisible

[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;

// la liste des états possible de notre système
// ainsi qu'une variable etatCourant prenant une de ces valeurs
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
      digitalWrite(pinLedRose, LOW);
      temps = millis();
      etatCourant = ETAT_ROSE_OFF;
      break;

    case ETAT_ROSE_OFF:
      //
      digitalWrite(pinLedRose, HIGH);
      temps = millis(); // on stocke la nouvelle heure
      etatCourant = ETAT_ROSE_ON; // on note le nouvel état de notre système
      break;
  }
}

void verifierTemps()
{
  if ((etatCourant == ETAT_ROSE_ON) || (etatCourant == ETAT_ROSE_OFF)) {
    if (millis() - temps >= 500) { // délai de 500ms expiré
        // .... coder ici ce que l'on doit faire
       
    }
  }
}

// ------------------------------------------------------
// 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]

Je pense que tu n'as plus qu'à remplacer cette ligne

  // .... coder ici ce que l'on doit faire

par un appel à

  simpleclick();

Tu ne dis pas ce que ce programme est sensé faire.
Tu ne dis pas ce qui ne va pas.

Avec ça, et vu d'ici, ma foi, tout va bien.

Voici ma demande initiale pour mon projet :
Bonjour
je suis débutant avec arduino
je souhaite réaliser le montage suivant dans un cadre de modélisme

2 leds (1 rose et 1 blanche)
1 BP
programme sous arduino transcrit sur atttiny 45

A la mise sous tension: les 2 leds éteintes.
1er appui sur le BP: la led blanche s'allume (en fixe).
2eme appui sur le BP: led blanche s'éteint et led rose clignote.
3eme appui: led rose s'éteint et led blanche s'allume (en fixe).
4eme appui: led blanche s'éteint et led rose clignote ..... et ainsi de suite.

J'ai rajouté simpleclick();
mais cela ne fonctionne pas
Voici de nouveau le code que j'utilise

[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;

// la liste des états possible de notre système
// ainsi qu'une variable etatCourant prenant une de ces valeurs
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
      digitalWrite(pinLedRose, LOW);
      temps = millis();
      etatCourant = ETAT_ROSE_OFF;
      break;

    case ETAT_ROSE_OFF:
      //
      digitalWrite(pinLedRose, HIGH);
      temps = millis(); // on stocke la nouvelle heure
      etatCourant = ETAT_ROSE_ON; // on note le nouvel état de notre système
      break;
  }
}

void verifierTemps()
{
  if ((etatCourant == ETAT_ROSE_ON) || (etatCourant == ETAT_ROSE_OFF)) {
    if (millis() - temps >= 500) { // délai de 500ms expiré
       simpleclick(); // .... coder ici ce que l'on doit faire
       
    }
  }
}

// ------------------------------------------------------
// 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]

Dans simple click, ajoute un Serial.println ("clic") ; juste avant le switch

Et Serial.begin (115200); dans le setup, puis règle la console sur ce débit

Est-ce que le message s'affiche dans la console lorsque tu appuies sur le bouton ?

rien ne s'affiche
Par contre, j'utilise ce programme sur un attiny 45, programme transféré par arduino, et donc les pins utilisés concernent l'attiny.

[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;

// la liste des états possible de notre système
// ainsi qu'une variable etatCourant prenant une de ces valeurs
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()
{
  Serial.println ("clic");
  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
      digitalWrite(pinLedRose, LOW);
      temps = millis();
      etatCourant = ETAT_ROSE_OFF;
      break;

    case ETAT_ROSE_OFF:
      //
      digitalWrite(pinLedRose, HIGH);
      temps = millis(); // on stocke la nouvelle heure
      etatCourant = ETAT_ROSE_ON; // on note le nouvel état de notre système
      break;
  }
}

void verifierTemps()
{
  if ((etatCourant == ETAT_ROSE_ON) || (etatCourant == ETAT_ROSE_OFF)) {
    if (millis() - temps >= 500) { // délai de 500ms expiré
     simpleclick();   
     // .... coder ici ce que l'on doit faire
        
    }
  }
}

// ------------------------------------------------------
// 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);
  Serial.begin (115200);
}

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

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

[/code]

Le click ne fait pas passer de l'état ETAT_LED_ROSE_ON à état LED_ROSE_OFF. C'est la tempo qui fait passer de ETAT_LED_ROSE_ON à état LED_ROSE_OFF.

// ------------------------------------------------------
// 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;
    }
  }
}

effectivement, je comprends mieux le principe...
Comme je l'avais précédemment dit dans un post, je suis débutant avec la programmation arduino (je suis beaucoup plus à l'aise avec la logique non programmable....) mais un grand merci pour tous ces éléments.

Je viens juste de tester le programme et tout fonctionne parfaitement bien. Super.
Je vais continuer à découvrir les méandres de la programmation.

Et merci encore à toutes les personnes sur ce forum qui m'ont aidé.

Bonne continuation.

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