Maitriser une porte à distance avec un bouton ouvrir et un reset

Bonjour tout le monde,

Je bosse actuellement sur un petit projet qui comme souvent, s’avère moins simple que prévu :wink:

Il s’agit d’une porte bloquée par code, l’installation est de type Arduino - clavier - gache électrique.

Cette partie n’a pas posé de souci.
J’aimerais pouvoir déverrouiller et reverrouiller la porte de loin, si j’ai des invités par exemple. Pour ce faire, j’ai prévu deux boutons dans mon entrée (un pour ouvrir, un pour fermer avec un reset) et un câblage entre mon entrée et l’arduino de la porte.

Seulement depuis que j’ai mis ce système en place, la porte s’ouvre toute seule. L’utilisation du moniteur m’a confirmé que l’arduino lisait un signal arrivant de mon bouton “ouvrir”. Je l’ai recâblé, sans succès, donc j’imagine que c’est le code qui pêche…

Je vous le mets ci dessous :

#include <Keypad.h>
#define Password_Length 7

char Data[Password_Length]; 
char Master[Password_Length] = "000000"; 
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;
bool entree;

const byte ROWS = 4; 
const byte COLS = 3; 
const int LEDVERTE = 13;
const int LEDROUGE = 12;
const int GACHE = 11;  
const int PINGO = 10;  // Depuis l'entrée

char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};

byte rowPins[ROWS] = {3, 4, 5, 6}; 
byte colPins[COLS] = {7, 8, 9}; 

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup(){
  Serial.begin(9600);
  pinMode(PINGO, INPUT_PULLUP);
  pinMode(LEDVERTE, OUTPUT);
  pinMode(LEDROUGE, OUTPUT);
  pinMode(GACHE, OUTPUT);
  digitalWrite(LEDVERTE, LOW);
  digitalWrite(LEDROUGE, LOW);
  digitalWrite(GACHE, HIGH);  
}
  
void loop(){

  bool entree = false;

  if (digitalRead(PINGO) == LOW)  {
    Serial.println("Le bouton ouvrir a été actionné");
    entree = true;
  }

  if (entree) {
    digitalWrite(GACHE, LOW);
    digitalWrite(LEDVERTE, HIGH); 
    Serial.println("La porte est ouverte");
  }

  bool ok = false;
  char customKey = customKeypad.getKey();
   
  if (customKey){
    Serial.println(customKey);
    Data[data_count] = customKey; 
    data_count++; 
  }
  if(data_count == Password_Length-1){

    if(strcmp(Data, Master)==0){
      digitalWrite(LEDVERTE, HIGH); 
      Serial.println("C'est le bon code !");
      digitalWrite(GACHE, LOW);
      }
    else{
      digitalWrite(LEDROUGE, HIGH); 
      delay(2000);
      digitalWrite(LEDROUGE, LOW);
      }
    
    clearData();  
    
  }
}

void clearData(){
  while(data_count !=0){
    Data[data_count--] = 0; 
  }
  return;
}

Pour cette installation, j’ai trois câbles :

  • un câble PINGO (de la pin 10 à mon bouton “ouvrir”)
  • un câble reset (de la pin reset à mon bouton “fermer”)
  • un câble masse (de la pin GND aux interrupteurs (dédoublé au niveau des boutons))

Est-ce que quelqu’un voit où pourrait se situer le problème ?

hello

une piste:

si tu as cablé l'inter de fermeture sur la pinoche "reset" de la platine arduino:

le µ se reboot et il y a un moment très court ou les sorties peuvent présenter une tension égale à VCC

tu dois traiter l'inter de fermeture en le cablant sur une entrée normale
et traiter cette entrée dans le programme