Make wiegand idle check more simple/consistent using millis()

This commit is contained in:
Adam Goldsmith 2020-03-28 17:07:52 -04:00
parent df2210bf4d
commit 90248057d7

View File

@ -14,19 +14,17 @@
#define LED_RED 12; #define LED_RED 12;
#define BEEP_BEEP 10; #define BEEP_BEEP 10;
#define WEIGAND_WAIT_TIME 3000 // time to wait for another weigand pulse. #define WEIGAND_WAIT_TIME 500 // time to wait for another weigand pulse.
#define DATA_SIZE 32 #define DATA_SIZE 32
volatile uint32_t dataBits = 0; // stores all of the data bits volatile uint32_t dataBits = 0; // stores all of the data bits
volatile size_t bitCount = 0; // number of bits recieved volatile size_t bitCount = 0; // number of bits recieved
volatile unsigned char flagDone; // goes low when data is currently being captured volatile unsigned long weigand_idle_start;
volatile unsigned int weigand_counter; // countdown until we assume there are no more bits
inline void gotBit() { inline void gotBit() {
weigand_idle_start = millis();
bitCount++; bitCount++;
flagDone = 0;
weigand_counter = WEIGAND_WAIT_TIME;
} }
// interrupt that happens when INTO goes low (0 bit) // interrupt that happens when INTO goes low (0 bit)
@ -52,20 +50,13 @@ void setup() {
attachInterrupt(0, ISR_INT0, FALLING); attachInterrupt(0, ISR_INT0, FALLING);
attachInterrupt(1, ISR_INT1, FALLING); attachInterrupt(1, ISR_INT1, FALLING);
weigand_counter = WEIGAND_WAIT_TIME;
Keyboard.begin(); Keyboard.begin();
} }
void loop() void loop()
{ {
// This waits to make sure that there have been no more data pulses before processing data
if (!flagDone) {
if (--weigand_counter == 0)
flagDone = 1;
}
// if we have bits and we the weigand counter went out // if we have bits and we the weigand counter went out
if (bitCount > 0 && flagDone) { if (bitCount > 0 && (millis() - weigand_idle_start) >= WEIGAND_WAIT_TIME) {
unsigned char i; unsigned char i;
uint32_t data = dataBits >> (DATA_SIZE - bitCount + 1); uint32_t data = dataBits >> (DATA_SIZE - bitCount + 1);