Les boîtiers claviers lecteur RFID pour entrée sécurisée semblent avoir pour une majorité, le gros défaut de laisser accessible de l'extérieur l'accès aux paramétrage. Certes protégé par un code d'accès, mais plus ennuyeux, laissant la sortie push ou celle d'un relais facilement shuntable pour un initié. D'où l'idée de convertir un code keypad arduino 4 x3 en weigand , clavier et antenne RFID seules en externe, inteface nano arduino et boîtier weigand de tonton Ali en interne. Seules les touches du clavier de 0 à 9 seront affectées, tout paramétrage ne pouvant s'exécuter que sur le boîtier interne. L'intérêt étant de conserver leurs grandes possibilités de paramétrage, en toute sécurité.
j'ai réussi à combiner 2 nano v3, l'une codeuse, la seconde décodeuse weigand, toutefois une erreur d'interprétation se traduit sur la console reliée au décodage.
Le codage keypad étant correct, l'affichage à la console validant bien la touche numérique 0 à 9 sélectionnée . Quand à celle du décodage, j'obtiens une valeur hexadécimale ne correspondant pas, évidemment aussi en décimal.
Etrangement comme décalé de +10 à chaque touche en hexa!
le problème n'est sans doute que d'un côté, codage ou décodage, mais lequel?
Voici en premier le code du codeur.
#include "Arduino.h"
#include "wiegandOutput.h"
#include <Keypad.h>//https://github.com/Chris--A/Keypad
const int ROW_NUM = 4;
const int COLUMN_NUM = 3;
char Keys [ROW_NUM][COLUMN_NUM]={
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte pin_rows[ROW_NUM] = {5,4,3,2};
byte pin_column[COLUMN_NUM] = {9,8,7};
Keypad keypad = Keypad(makeKeymap(Keys),pin_rows,pin_column,ROW_NUM,COLUMN_NUM);
WiegandOut wiegandOut(12,11);
void setup() {
Serial.begin(9600);}
void loop(){
char key = keypad.getKey();
if (key) {
Serial.println(key);
wiegandOut.send(key,26,false); // Send 26 bits with facility code
}}
type or paste code here
et ensuite le code plus connu du décodeur:
#include <Wiegand.h>
WIEGAND wg;
void setup() {
Serial.begin(9600);
// default Wiegand Pin 2 and Pin 3 see image on README.md
// for non UNO board, use wg.begin(pinD0, pinD1) where pinD0 and pinD1
// are the pins connected to D0 and D1 of wiegand reader respectively.
wg.begin();
}
void loop() {
if(wg.available())
{
Serial.print("Wiegand HEX = ");
Serial.print(wg.getCode(),HEX);
Serial.print(", DECIMAL = ");
Serial.print(wg.getCode());
Serial.print(", Type W");
Serial.println(wg.getWiegandType());
}
}


