Make wiegand idle check more simple/consistent using millis()
This commit is contained in:
parent
df2210bf4d
commit
90248057d7
@ -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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user