int leftPin = 10; int rightPin = 11; int clockSpeed = 300; int clockHalf = 0; void setup() { // The interrupts are key to reliable // reading of the clock and data feed pinMode(leftPin, OUTPUT); pinMode(rightPin, OUTPUT); pinMode(13, OUTPUT); // LED } void writeLow() { digitalWrite(leftPin, LOW); digitalWrite(rightPin, LOW); } void writeBit(int lowOrHigh) { if(lowOrHigh == 1) { if(clockHalf == 0) { digitalWrite(rightPin, LOW); digitalWrite(leftPin, HIGH); delayMicroseconds(clockSpeed); digitalWrite(leftPin, LOW); digitalWrite(rightPin, HIGH); delayMicroseconds(clockSpeed); //clockHalf = 1; } else { digitalWrite(leftPin, LOW); digitalWrite(rightPin, HIGH); delayMicroseconds(clockSpeed); digitalWrite(rightPin, LOW); digitalWrite(leftPin, HIGH); delayMicroseconds(clockSpeed); //clockHalf = 0; } } else { if(clockHalf == 0) { digitalWrite(rightPin, LOW); digitalWrite(leftPin, HIGH); delayMicroseconds(clockSpeed * 2); clockHalf = 1; } else { digitalWrite(leftPin, LOW); digitalWrite(rightPin, HIGH); delayMicroseconds(clockSpeed * 2); clockHalf = 0; } } } void writeNumber(int numToWrite) { if(numToWrite == 0) { writeBit(0); writeBit(0); writeBit(0); writeBit(0); writeBit(1); } else if(numToWrite == 1) { writeBit(1); writeBit(0); writeBit(0); writeBit(0); writeBit(0); } else if(numToWrite == 2) { writeBit(0); writeBit(1); writeBit(0); writeBit(0); writeBit(0); } else if(numToWrite == 3) { writeBit(1); writeBit(1); writeBit(0); writeBit(0); writeBit(1); } else if(numToWrite == 4) { writeBit(0); writeBit(0); writeBit(1); writeBit(0); writeBit(0); } else if(numToWrite == 5) { writeBit(1); writeBit(0); writeBit(1); writeBit(0); writeBit(1); } else if(numToWrite == 6) { writeBit(0); writeBit(1); writeBit(1); writeBit(0); writeBit(1); } else if(numToWrite == 7) { writeBit(1); writeBit(1); writeBit(1); writeBit(0); writeBit(0); } else if(numToWrite == 8) { writeBit(0); writeBit(0); writeBit(0); writeBit(1); writeBit(0); } else if(numToWrite == 9) { writeBit(1); writeBit(0); writeBit(0); writeBit(1); writeBit(1); } else if(numToWrite == 10) { writeBit(0); writeBit(1); writeBit(0); writeBit(1); writeBit(1); } else if(numToWrite == 11) { writeBit(1); writeBit(1); writeBit(0); writeBit(1); writeBit(0); } else if(numToWrite == 12) { writeBit(0); writeBit(0); writeBit(1); writeBit(1); writeBit(1); } else if(numToWrite == 13) { writeBit(1); writeBit(0); writeBit(1); writeBit(1); writeBit(0); } else if(numToWrite == 14) { writeBit(0); writeBit(1); writeBit(1); writeBit(1); writeBit(0); } else if(numToWrite == 15) { writeBit(1); writeBit(1); writeBit(1); writeBit(1); writeBit(1); } } void loop(){ digitalWrite(13, HIGH); for(int i = 0; i < 60; i ++) { writeBit(0); } writeNumber(11); // start sentinel // card data starts here writeNumber(1); writeNumber(2); writeNumber(3); writeNumber(4); writeNumber(5); writeNumber(6); writeNumber(7); writeNumber(8); writeNumber(9); writeNumber(0); // card data ends here writeNumber(15); // end sentinel for(int i = 0; i < 80; i ++) { writeBit(0); } writeLow(); digitalWrite(13, LOW); delay(300); }