Leonardo+RDM6300
- Войдите на сайт для отправки комментариев
Втр, 12/11/2013 - 18:47
имеется Arduino Leonardo и rfid reader RDM 6300
Прочитал все темы у нас, остановился на этой
Ридеры похожи, но не тоже самое. тем не менее по указаниям запустился скетч, но на любую карту выдает следующее
Reader 1:3FFFFFF Reader 1 converted to DEC:268435455 siteCode:511 serial number:16383
Иногда (где-то 1 из 150) выдает (опять же рандомно на любую карту):
Reader 1:3FFFFFF Reader 1 converted to DEC:67108863 siteCode:511 serial number:16383
Как жить дальше?
/* Modified from * Crazy People * By Mike Cook April 2009 * An RFID reader outputing 26 bit Wiegand code to pins:- * Reader attached to Pins 2 & 3 * Interrupt service routine gathers Wiegand pulses (zero or one) until 26 have been received * Then a string is sent to Serial */ volatile long reader1 = 0; volatile int reader1Count = 0; void reader1One(void) { reader1Count++; reader1 = reader1 << 1; reader1 |= 1; } void reader1Zero(void) { reader1Count++; reader1 = reader1 << 1; } void setup() { Serial.begin(9600); // Attach pin change interrupt service routines from the Wiegand RFID readers attachInterrupt(0, reader1Zero, RISING);//DATA0 to pin 2 attachInterrupt(1, reader1One, RISING); //DATA1 to pin 3 delay(10); // the interrupt in the Atmel processor misses out the first negitave pulse as the inputs are already high, // so this gives a pulse to the reader input line to get the interrupts working properly. // Then clear out the reader variables. // The readers are open collector sitting normally at a one so this is OK for(int i = 2; i<4; i++){ pinMode(i, OUTPUT); digitalWrite(i, HIGH); // enable internal pull up causing a one digitalWrite(i, LOW); // disable internal pull up causing zero and thus an interrupt pinMode(i, INPUT); digitalWrite(i, HIGH); // enable internal pull up } delay(10); // put the reader input variables to zero reader1 = 0; reader1Count = 0; } void loop() { if(reader1Count >=26){ int serialNumber=(reader1 >> 1) & 0x3fff; int siteCode= (reader1 >> 17) & 0x3ff; Serial.print(" Reader 1:"); Serial.print(reader1,HEX); Serial.print(" "); Serial.print("Reader 1 converted to DEC:"); Serial.print(reader1& 0xfffffff); Serial.print(" "); Serial.print("siteCode:"); Serial.print(siteCode); Serial.print(" "); Serial.print("serial number:"); Serial.println(serialNumber); reader1 = 0; reader1Count = 0; } }
кому интересно, данный код так и не заработал, но ознакомившись с этой и этой статьей ( в последней примечания конкретно про Leonardo), переписал скетч из первой статьи с доработками из второй и все заработало. результаты адекватные, а главное отличаются друг от друга на разных картах.