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" ); };
}