Bonjour à tous et merci de me lire!
Je voudrais activé un relais avec une temporisation, par l'intermédiaire d'un bouton poussoir!
Matériel :
Arduino uno
Clavier matriciel 4X4
4 Relais arduino 5v
Un bouton poussoir.
Ce que je veux :
Une fois l'arduino alimenté,
Je sélectionne la temporisation = (touche 1, 2 ou 3 du clavier, qui correspond chacune à une tempo différente)
Après j'appuis sur le BP = le relais est alimenté (pendant x seconde selon la tempo sélectionné)
Puis le relais ce ferme
Après je reappuis sur le BP = le relais est alimenté (pendant x seconde selon la tempo sélectionné)
Puis le relais ce ferme, ainsi de suite!
J'ai créé ce code :
Mon problème c'est que le relais ne veux pas s'éteindre! Je ne sais pas pourquoi!Code:#include <Keypad.h> #define relais_1 10 const int bouton_NO = 11; //le bouton NO est connecté à la broche 11 de la carte Adruino //--- Constantes utilisées avec le clavier 4x4 const byte LIGNES = 4; // 4 lignes const byte COLONNES = 4; //4 colonnes const int L1=2; //declaration constante de broche const int L2=3; //declaration constante de broche const int L3=4; //declaration constante de broche const int L4=5; //declaration constante de broche const int C1=6; //declaration constante de broche const int C2=7; //declaration constante de broche const int C3=8; //declaration constante de broche const int C4=9; //declaration constante de broche //--- Définition des touches char touches[LIGNES][COLONNES] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; // tableaux de lignes et colonnes byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4}; //connexions utilisées pour les broches de colonnes du clavier char touche; // variable de stockage valeur touche appuyée // création d'un objet keypad = initialisation clavier Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES ); // les broches de lignes sont automatiquement configurées en ENTREE avec pullup interne activé // les broches de colonnes sont automatiquement configurées en SORTIE int tempo; // variable temporisation des relais 1 et 2 (lessive machine 13kg) long temps_relais_1; // variable temps (foncion millis() relais_1 ) int etat_bouton_NO; //variable qui enregistre l'état du bouton int memoire_BP = HIGH; //état relâché par défaut int valeur_bouton; // variable memoire du bouton NO void setup() { // on initialise les sorties et on éteind les leds connectées pinMode(relais_1, OUTPUT); digitalWrite(relais_1, HIGH); pinMode(bouton_NO, INPUT); //le bouton est une entrée valeur_bouton = 0 ; // Variable valeur_bouton est égale à 0 tempo = 0; } void loop() {// debut de la fonction loop() // --- ici instructions à exécuter par le programme principal --- etat_bouton_NO = digitalRead(bouton_NO); // lecture de l'état du bouton touche = clavier.getKey(); // lecture de la touche appuyée if(touche != NO_KEY){ // si une touche a été frappée -- gestion de la touche appuyée if(touche=='1') //si les touches '1' est tapée. {tempo=500;} // variable tempo est à 500. if(touche=='2') {tempo=1000;} if(touche=='3') {tempo=1500;} } { if((etat_bouton_NO != memoire_BP) && (etat_bouton_NO == LOW)) // Si le bouton a un état différent de celui enregistré ET { // que cet état est "appuyé" valeur_bouton = 1; // Alors la variable valeur_bouton ce met à "1" } memoire_BP = etat_bouton_NO; // on enregistre l'état du bouton pour le tour suivant if(valeur_bouton == 1) // Si la variable valeur_bouton est à "1" {temps_relais_1 = millis() + tempo; // La variable temp_relais_1 est égale à millis() + temporisation sélectionné digitalWrite(relais_1, LOW);} // Le relais_1 est activé } if (millis() >= temps_relais_1) // Si millis() est égale ou supérieur à temps_relais_1 alors {digitalWrite(relais_1, HIGH); // Le relais_1 se désactive valeur_bouton = 0; // Remise à "0" de la variable valeur_bouton } }
Merci d'avance pour vos réponses!
-----