diff --git a/hidReader.ino b/hidReader.ino index 115097a..537d813 100644 --- a/hidReader.ino +++ b/hidReader.ino @@ -14,19 +14,17 @@ #define LED_RED 12; #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 -volatile uint32_t dataBits = 0; // stores all of the data bits -volatile size_t bitCount = 0; // number of bits recieved +volatile uint32_t dataBits = 0; // stores all of the data bits +volatile size_t bitCount = 0; // number of bits recieved -volatile unsigned char flagDone; // goes low when data is currently being captured -volatile unsigned int weigand_counter; // countdown until we assume there are no more bits +volatile unsigned long weigand_idle_start; inline void gotBit() { + weigand_idle_start = millis(); bitCount++; - flagDone = 0; - weigand_counter = WEIGAND_WAIT_TIME; } // interrupt that happens when INTO goes low (0 bit) @@ -52,20 +50,13 @@ void setup() { attachInterrupt(0, ISR_INT0, FALLING); attachInterrupt(1, ISR_INT1, FALLING); - weigand_counter = WEIGAND_WAIT_TIME; Keyboard.begin(); } 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 (bitCount > 0 && flagDone) { + if (bitCount > 0 && (millis() - weigand_idle_start) >= WEIGAND_WAIT_TIME) { unsigned char i; uint32_t data = dataBits >> (DATA_SIZE - bitCount + 1);