Had to tell someone... AND THANK YOU for the help. I am on Cloud9 after taking this:
/*
This code is a proof of concept for having an Arduino device mimic a 26bit wiegand card.
Data is wiggled at 5mS interbit time.
Pulse width is .3mS
Pin14 is dZero
Pin17 is dOne
26bit wiegand
bit1 = even parity, but is fixed at zero in this example
parity is set to be ignored in Quintron sw
bit2-9 = facility code, set to 774 decimal, 0000 0110 binary MSB
bit10-25 = 16 bit value for UserID, set to 1 decimal, 0000 0001 binary MSB
bit26 = odd parity, always zero
parity is set to be ignored in Quintron sw
Sequence is to send the "card read", wait 10 seconds, send the card read again.
*/
// the setup routine runs once when you press reset;
// Give the pins each a name.
int dZero = 4;
int dOne = 7;
// pulse is 100 microS;
int pulse=100;
// interBitDelay is 5mS;
int interbitDelay=1;
long randNumber;
void setup() {
// initialize the serial communication:
Serial.begin(9600);
// initialize the digital pin as an output.;
pinMode(dZero, OUTPUT);
pinMode(dOne, OUTPUT);
digitalWrite(dZero, HIGH); // Set voltage level high to start)
digitalWrite(dOne, HIGH); // Set voltage level high to start)
}
/*
Basic loop, send card read, wait 7-10 seconds, repeat.
Creating a "bit" is accomplished by driving the
appropriate data pin LOW for 100microS, returning to HIGH,
then DELAY 1mS to complete the bit transmission.
*/
void loop() {
//text send just before card read;
Serial.println("Card read.");
Serial.println(" ");
// Bit 1: Parity bit, transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 2: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 3: transmit a one;
digitalWrite(dOne, LOW);
delayMicroseconds(pulse);
digitalWrite(dOne, HIGH);
delay(interbitDelay);
// Bit 4: transmit a one;
digitalWrite(dOne, LOW);
delayMicroseconds(pulse);
digitalWrite(dOne, HIGH);
delay(interbitDelay);
// Bit 5: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 6: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 7: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 8: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 9: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// NOW THE CARD NUMBER;
// Bit 10: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 11: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 12: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 13: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 14: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 15: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 16: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 17: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 18: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 19: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 20: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 21: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 22: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 23: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 24: transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Bit 25: transmit a one;
digitalWrite(dOne, LOW);
delayMicroseconds(pulse);
digitalWrite(dOne, HIGH);
delay(interbitDelay);
// Bit 26: ending parity, transmit a zero;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
// Pause for between 7 and 10 seconds;
randNumber = random(5000, 8000);
//Send data to the serial port each time a read occurs";
Serial.println("Card data transmitted.");
Serial.print("Random delay of ");
Serial.print(randNumber);
Serial.println("mS.");
Serial.println(" ");
delay(randNumber);
}
And just a few minutes later creating this using your help:
/*
Version 2, this code is a proof of concept for having an Arduino
device mimic a 37bit default card format wiegand card.
Data is wiggled at 1mS interbit time.
Pulse width is 100uS
Pin14 is dZero
Pin17 is dOne
37bit wiegand
bit1 = even parity, but is fixed at zero in this example
parity is set to be ignored in Quintron sw
bit2-17 = facility code, set to 774 decimal, 0110 0000 binary MSB
bit18-36 = 19 bit value for UserID, set to 1 decimal, 0000 0001 binary MSB
bit37 = odd parity, always zero
parity is set to be ignored in Quintron sw
Sequence is to send the "card read", wait 5-8 seconds, send the card read again.
*/
// the setup routine runs once when you press reset;
// Give the pins each a name.
int dZero = 4;
int dOne = 7;
int led = 13;
// pulse is 100 microS;
int pulse=100;
// interBitDelay is 5mS;
int interbitDelay=1;
long randNumber;
// Card data is 37 bits;
// Card f/c code is 0000 0000 0100 0000;
// long cardData = 0b0000 0000 0110 0000 0000000000000000001;
long cardData = 0b0000000000110000000000000000000000010;
void setup() {
// initialize the serial communication:
Serial.begin(9600);
// initialize the digital pin as an output.;
pinMode(dZero, OUTPUT);
pinMode(dOne, OUTPUT);
digitalWrite(dZero, HIGH); // Set voltage level high to start);
digitalWrite(dOne, HIGH); // Set voltage level high to start);
digitalWrite(led, LOW); // Set LED off to start);
}
/*
Basic loop, send card read, wait 7-10 seconds, repeat.
Creating a "bit" is accomplished by driving the
appropriate data pin LOW for 100microS, returning to HIGH,
then DELAY 1mS to complete the bit transmission.
*/
void loop() {
//text send just before card read;
// Serial.println("Card read.");
// Serial.println(" ");
// Blink LED 13 to show card data sent;
digitalWrite(led, HIGH);
for (int bitCount = 36; bitCount >= 0; bitCount--)
{
byte currentBit = bitRead(cardData, bitCount);
if (currentBit == 0)
{
pulseD0();
}
else
{
pulseD1();
}
}
Serial.println();
// Pause for between 7 and 10 seconds;
randNumber = random(5000, 8000);
//Send data to the serial port each time a read occurs";
Serial.println("Card data transmitted.");
Serial.print("Random delay of ");
Serial.print(randNumber);
Serial.println("mS.");
Serial.println(" ");
delay(randNumber);
}
void pulseD0() {
// Transmit a zero bit;
digitalWrite(dZero, LOW);
delayMicroseconds(pulse);
digitalWrite(dZero, HIGH);
delay(interbitDelay);
Serial.print("0");
}
void pulseD1()
{
// Transmit a one bit;
digitalWrite(dOne, LOW);
delayMicroseconds(pulse);
digitalWrite(dOne, HIGH);
delay(interbitDelay);
Serial.print("1");
}
Freakin' amazing.