1 er programme Bp on off cage escalier

Bonjour, je viens de commencer a étudier la programmation de mon Mega256
Après plusieurs recherche sur le bouton poussoir, j'ai programmer le mien avec plus de fonction.

Voici mon premier programme pour un Bouton poussoir qui allume ou éteint une cage d'escalier.

Une pression prolonger sur le bp ne change rien.

Possible de changer l'état avec le moniteur série

Puis-je raccourcir ou amélioré mon code ?? Merci pour vos idées

// Programme 1 bouton allume ou éteint une lampe. Si le boutton n'est pas relacher, rien ne se passe.
// Modifier avec le pin 3 qui fait la meme fonction.
// Utilise aussi le moniteur serie pour activer avec 1 ou eteindre avec 0 sinon eteint avec message erreur

const int buttonPin  = 2;    
const int buttonPin2 = 3;
const int ledPin     = 13;   
 
int Status      = 0;    
int LastStatus  = 0;     
int EtatLed     = 0;   
int bp          = 0;
int kelbp;
int EtatTexte = "" ;
String inString = "";

 
void setup() {
  Serial.begin(115200);
  pinMode(buttonPin, INPUT); 
  pinMode(buttonPin2, INPUT); 
  pinMode(ledPin, OUTPUT);  
  pinMode(buttonPin, HIGH);
  pinMode(buttonPin2, HIGH);
  

}
 
void loop() {

  Status = digitalRead(buttonPin) || digitalRead(buttonPin2) ; // Lit le statut du Pin 2 et 3
  bp  = ( digitalRead(buttonPin) ); // Lit le statut du Pin 2
 
   while (Serial.available()) { // tant que des caractères sont en attente dans le moniteur serie
    int redi = Serial.read(); // on lit le caractère
    Serial.print("Lampe est "); // on l'affiche
    inString = (char)redi; // Convertis le read en char
    EtatLed = (inString.toInt()); // Convertis en Int
    imprimtext(); 
    Serial.println (" par le PC");
    }
   
  
  if ( bp == 1) { (kelbp = 1); } else { (kelbp = 2) ;  }; // Si le Pin 2 est enfoncer note 1 dans kelbp sinon note 2
    
  if (Status != LastStatus) { // Si le status du Pin est changer, exécute le code suivant
    
    if (Status == 1) { if(EtatLed==1) EtatLed=0; else EtatLed=1; // Si le bp est enfoncer et si la led est allumer, éteint  sinon inverse
 Serial.print("Lampe LED ");
  imprimtext(); 
  Serial.print(" par le boutton ");
  Serial.print( kelbp );
Serial.println ();
}
  
     LastStatus = Status; // rend l'ancien status le meme que le nouveau
  
  }
  
  digitalWrite(ledPin, EtatLed); // Ecrit sur le pin 13 l etat de la led
 

    delay(20);

} //Fin script loop

void imprimtext() // Fonction a appeler dans le script
{
 if ( EtatLed == 0) { Serial.print( "éteint" ); } else if (EtatLed ==1) { Serial.print("allumer"); } else { (EtatLed = 0); Serial.print( "éteint suite à un mauvais code" ); };
}

// Programme 1 bouton allume ou éteint une lampe. Si le boutton n'est pas relacher, rien ne se passe.
// Modifier avec le pin 3 qui fait la meme fonction.
// Utilise aussi le moniteur serie pour activer avec 1 ou eteindre avec 0 sinon eteint avec message erreur

c'est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement - n'utilisez pas la librairie du bouton faites le vous même avec une machine à états)

Merci et effectivement, cela rajoute des fonctions. Merci aussi pour ton merveilleux Tuto :wink: