/***** * Ingrediients: * Yourduino Nano * 74HC595 shift register (https://www.sparkfun.com/products/733) * 7-segment, 4-digit dispay (https://www.sparkfun.com/products/retired/12669) * Bunch of wires * Breadboard *** * On YouTube: https://www.youtube.com/watch?v=84Tbc-9MZ5E *****/ // Setup the 74HC595 SIPO pins const int latchPin = 6; // ST_CP (RCLK) const int clockPin = 7; // SH_CP (SRCLK) const int dataPin = 5; // DS (data serial) // display pins const int AD = 9; const int BD = 10; const int CD = 11; const int DD = 12; const int DEMAX = 4; const int disp_elements[DEMAX] = {AD, BD, CD, DD}; int disp_digits[DEMAX] = {0,0,0,0}; int disp_count = 0; // Binary vals for decimal numbers const int NMAX = 16; const int n[NMAX] = {0b11000000, // 0 0b11111001, // 1 0b10100100, // 2 0b10110000, // 3 0b10011001, // 4 0b10010010, // 5 0b10000010, // 6 0b11111000, // 7 0b10000000, // 8 0b10010000, // 9 0b00001000, // A (10) 0b10000011, // B (11) 0b11000110, // C (12) 0b10100001, // D (13) 0b10000110, // E (14) 0b10001110}; // F (15) // Time count - 1000milli = 1sec const unsigned long MLEN = 1000; unsigned long ct = 0; // Debug digit counter int x = 0; void setup() { Serial.begin(9600); // set pins to output so you can control the shift register pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); // Sets display pins pinMode(AD, OUTPUT); pinMode(BD, OUTPUT); pinMode(CD, OUTPUT); pinMode(DD, OUTPUT); // Initialize time ct = millis() + MLEN; // debug console //Serial.begin(9600); } void loop() { if (ct <= millis()) { ct = millis() + MLEN; /* while (x < DEMAX) { Serial.print(disp_digits[x], DEC); Serial.print(" "); x++; } Serial.println(""); x=0; */ addUp(); } // update one digit on the display per loop if (disp_count == DEMAX) { disp_count = 0; } changePattern(n[disp_digits[disp_count]]); digitalWrite(disp_elements[disp_count], HIGH); digitalWrite(disp_elements[disp_count], LOW); disp_count += 1; } // Increment the display digits void addUp() { int carry = 1; for(int y=0;y