//Definitions int Q0=8; //Read pins int Q1=7; int Q2=6; int Q3=5; int P0=12; //Write pins int P1=11; int P2=10; int P3=9; int rb0=0; //Read bits int rb1=0; int rb2=0; int rb3=0; int CP=13; //Clock pin, set to LED pin of Arduino int count=0; int PE=4; //Parallel enable (write, active LOW) void setup() { Serial.begin(9600); pinMode(Q0, INPUT); pinMode(Q1, INPUT); pinMode(Q2, INPUT); pinMode(Q3, INPUT); pinMode(P0, OUTPUT); pinMode(P1, OUTPUT); pinMode(P2, OUTPUT); pinMode(P3, OUTPUT); pinMode(PE, OUTPUT); pinMode(CP, OUTPUT); digitalWrite(PE,HIGH); //Sets PE HIGH so counting begins digitalWrite(P0,HIGH); //Sets initial count (0111=7) digitalWrite(P1,HIGH); //P0 is least significant bit digitalWrite(P2,HIGH); digitalWrite(P3,LOW); } void loop() { //Writes bits by wiggling PE //Bits loaded on rising clock pulse if (count == 15) { digitalWrite(PE,LOW); digitalWrite(CP,HIGH); delay(3); digitalWrite(CP,LOW); digitalWrite(PE,HIGH); } rb0=digitalRead(Q0); //Reads the output bits rb1=digitalRead(Q1); rb2=digitalRead(Q2); rb3=digitalRead(Q3); //Convert bits to decimal count = rb0 + 2*rb1 + 4*rb2 + 8*rb3; Serial.println(count); //Prints the count to the Serial Monitor digitalWrite(CP,HIGH); //Advances the count by one delay(3); digitalWrite(CP,LOW); delay(500); //Slows the operation so you can see it happening }