int cld1Pin = 4; // Card status pin int rdtPin = 2; // Data pin int reading = 0; // Reading status #define BUFFER_SIZE 700 volatile int overwrite_fu = 0; volatile int buffer[BUFFER_SIZE] = {}; // Buffer for data volatile int i = 0; // Buffer counter volatile int bit = 0; // global bit void setup() { Serial.begin(115200); // The interrupts are key to reliable // reading of the clock and data feed attachInterrupt(0, changeBit, CHANGE); attachInterrupt(1, writeBit, FALLING); } void loop(){ // Active when card present while(digitalRead(cld1Pin) == LOW){ reading = 1; } // Active when read is complete // Reset the buffer if(reading == 1) { for (int x=0; x<BUFFER_SIZE; x++) { Serial.print(buffer[x]); } Serial.println(""); Serial.println("Read finished."); reading = 0; i = 0; } } // Flips the global bit void changeBit(){ if (bit == 0) { bit = 1; } else { bit = 0; } } // Writes the bit to the buffer void writeBit(){ if (i >= BUFFER_SIZE) { Serial.println("buffer overflow detected, perhaps increase the buffer size? FUUUUUUUUUU!"); } else { buffer[i] = bit; i++; } }