Bonjour, je poste sa car j'ai une question sans réponse

Je débute la programmation et je bloque sur une connerie, je la fais courte

J'ai installé un boitier dans ma chambre avec un Arduino Mega 2560 R3 et les composants relié dessus son un écran lcd 16x2, servo moteur MG90, 2 leds vertes, 2 rouges et un keypad a l'extérieur.
Sur le boitier à l'intérieur j'y ai mis un bouton poussoir

Tout fonctionne parfaitement je mets le mots de passe sa déverouille et lorsque j'appuie sur la touche # ou * les leds repasse au rouge et le servo passe en mode fermé

Mon problème est donc de rajouter un bouton poussoir en utilisant la fonction input pull up donc pas besoin de résistance c'est fournis par l'arduino, mais comment changé l'état vérouiller ou ouvert mais en fonctionnant dans les 2 sens donc si c'est fermé quand j'appuie sa ouvre si c'est ouvert j'appuie sa ferme

Si quelqu'un peut m'éclaircir un petit peu sur le sujet d'avance merci !

Je vous laisse mon code pour vous y jeter un petit coup d'oeil

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// Librairie indispensable 
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
 
#include <Servo.h>
#include <Keypad.h>
 
Servo ServoMotor;
// Vous pouvez changer le mot de passe mais changer le nombre de caractère plus bas (**)
char* password = "12345"; 
int buzzer = A0;
int position = 0;
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
    {'1','2','3','A'},
    {'4','5','6','B'},
    {'7','8','9','C'},
    {'*','0','#','D'}
};
byte rowPins[ROWS] = { 49, 48, 47, 46 };
byte colPins[COLS] = { 45, 44, 43, 42 };
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
 
// Leds Extérieur
int Red = A1;
int Green = A2;
// Leds Intérieur
int Rouge = A3;
int Vert = A4;
 
void setup()
{
    lcd.begin(16, 2);
    Serial.begin(9600);
    pinMode(Red, OUTPUT);
    pinMode(Green, OUTPUT);
    pinMode(Rouge, OUTPUT);
    pinMode(Vert, OUTPUT);
    pinMode(buzzer, OUTPUT);
    ServoMotor.attach(2);
    LockedPosition(true);
}
 
void loop()
{
    char key = keypad.getKey();
    if (key == '*' || key == '#')
    {
        delay(3500);
 
        tone(buzzer,200,50);
        delay(100);
        tone(buzzer, 200, 300);
        delay(1000); 
        position = 0;
        LockedPosition(true);
    }
    if (key == password[position])
    {
        position ++;
    }
    if (position == 5)//(**)Nombre de caractère pour le mot de passe (**)
    {
        LockedPosition(false);
    }
    delay(100);
}
 
void LockedPosition(int locked)
{
    if (locked)
    {
        lcd.setCursor(0, 0);
        lcd.print("Bonjour la porte");
        lcd.setCursor(0, 1);
        lcd.print("est verrouiller");
        digitalWrite(Red, HIGH);
        digitalWrite(Rouge, HIGH);
        digitalWrite(Green, LOW);
        digitalWrite(Vert,LOW);
        ServoMotor.write(11);
    }
    else
    {
        lcd.clear();
        tone(buzzer,523,50);
        delay(50);
        tone(buzzer, 783, 50);
        delay(50);
        tone(buzzer, 1046, 50);
        delay(50);
        tone(buzzer, 1568, 50);
        delay(50);
        tone(buzzer, 2093, 70);
        delay(250);
        digitalWrite(Red, LOW);
        digitalWrite(Green, HIGH);
        digitalWrite(Vert,HIGH);
        ServoMotor.write(95);
        lcd.setCursor(1, 0);
        lcd.print("La porte est");
        lcd.setCursor(1, 1);
        lcd.print("deverouiller");
    }
}