Voila le programme rentré, sa fonctionne pas la séquence démarre toute seule et ne s'arrête jamais. je pense qu'il a un problème au niveau " if ( digitalRead( pushpin ) == LOW )" je chipote mais je n'arrive a rien ![]()
int ledpin = 9;
int pushpin = 8;
int luminosite = 0;
int variation = 5;unsigned long heure_dernier_changement = 0;
enum {
REPOS, // Attente pression poussoir
START, // 1ere etape
UP, // gradateur up
DOWN // et down
} etat = REPOS;
void setup()
{
pinMode (ledpin, OUTPUT);
pinMode (pushpin, INPUT );
}void loop()
{
switch( etat )
{
//---------------------------------------------
case REPOS:
// on attend le bouton
if ( digitalRead( pushpin ) == LOW )
etat = START;
// pas de break : on enchaîne directement sur START sans repasser par loop();
//---------------------------------------------
case START:
// 1ere étape du gradateur avec luminosite = 0
analogWrite(ledpin, luminosite);
// on continue après avec UP
etat = UP;
// on mémorise l'heure
heure_dernier_changement = millis();
break;
//---------------------------------------------
case UP:
if ( (millis() - heure_dernier_changement) > 1000 )
{
// maintenant je pré-calcule la valeur avant de l'écrire
luminosite = luminosite + variation;
analogWrite(ledpin, luminosite);
// si la dernière écriture était 0, on passe en DOWN
if ( luminosite == 25)
etat = DOWN ;
// on mémorise l'heure
heure_dernier_changement = millis();
}
break;
//---------------------------------------------
case DOWN:
if ( (millis() - heure_dernier_changement) > 1000 )
{
luminosite = luminosite - variation; // note que je change le signe ici plutot que la valeur
analogWrite(ledpin, luminosite);
// si la dernière écriture était 0, on passe en REPOS
if ( luminosite == 0)
etat = REPOS ;
// on mémorise l'heure
heure_dernier_changement = millis();
}
break;
//---------------------------------------------
} // switch
} // loop