Upload
frasekh
View
42
Download
3
Tags:
Embed Size (px)
DESCRIPTION
Digital Clock
Citation preview
/* 4 digit 7 segment display: http://www.sparkfun.com/products/9483 Datasheet: http://www.sparkfun.com/datasheets/Components/LED/7-Segment/YSD-439AR6B-35.pdf 7 segments + 4 digits + 1 colon = 12 pins required for full control */// modified connexion by niq_ro from http://nicuflorica.blogspot.com// for my Luckylight KW4-563ASA// dataseet: http://www.tme.eu/ro/Document/dfc2efde2e22005fd28615e298ea2655/KW4-563XSA.pdf
int digit1 = 11; //PWM Display pin 12 (digit1 is common anonds A1 from right side)int digit2 = 10; //PWM Display pin 9 (digit2 is common A2)int digit3 = 9; //PWM Display pin 8 (digit3 is common anods A3)int digit4 = 6; //PWM Display pin 6 (digit4 is common anods, from left side)
//Pin mapping from Arduino to the ATmega DIP28 if you need it//http://www.arduino.cc/en/Hacking/PinMappingint segA = 2; //Display pin 11int segB = 3; //Display pin 7int segC = 4; //Display pin 4int segD = 5; //Display pin 2int segE = 12; //Display pin 1int segF = 7; //Display pin 10int segG = 8; //Display pin 5int segDP = 13; // Display pin 3
#include <Wire.h>#include "RTClib.h"RTC_DS1307 RTC;
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib// original sketck from http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/// add part with SQW=1Hz from http://tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the-i2c-bus/// add part with manual adjust http://www.bristolwatch.com/arduino/arduino_ds1307.htm
byte SW0 = A0;byte SW1 = A1;byte SW2 = A2;
// use for hexa in zecimal conversionint zh, uh, ore;
int zm, um, miniti;
void setup() { // Serial.begin(57600); Wire.begin(); RTC.begin(); RTC.adjust(DateTime(__DATE__, __TIME__));// if you need set clock... just remove // from line above this
// part code for flashing LEDWire.beginTransmission(0x68);Wire.write(0x07); // move pointer to SQW address// Wire.write(0x00); // turns the SQW pin off Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave at 1Hz// Wire.write(0x13); // sends 0x13 (hex) 00010011 (binary) 32kHz
Wire.endTransmission();
if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); // following line sets the RTC to the date & time this sketch was compiled RTC.adjust(DateTime(__DATE__, __TIME__)); } // dht.begin();
pinMode(segA, OUTPUT); pinMode(segB, OUTPUT); pinMode(segC, OUTPUT); pinMode(segD, OUTPUT); pinMode(segE, OUTPUT); pinMode(segF, OUTPUT); pinMode(segG, OUTPUT); pinMode(segDP, OUTPUT);
pinMode(digit1, OUTPUT); pinMode(digit2, OUTPUT); pinMode(digit3, OUTPUT); pinMode(digit4, OUTPUT); // pinMode(13, OUTPUT);
Serial.begin(9600); Serial.println("test for niq_ro");
pinMode(SW0, INPUT); // for this use a slide switch pinMode(SW1, INPUT); // N.O. push button switch pinMode(SW2, INPUT); // N.O. push button switch
digitalWrite(SW0, HIGH); // pull-ups on digitalWrite(SW1, HIGH); digitalWrite(SW2, HIGH);
}
void loop() {digitalWrite(segDP, HIGH); DateTime now = RTC.now(); int timp = now.hour()*100+now.minute();// int timp = (now.minute(), DEC);// displayNumber(12); // this is number to diplay// int timp = 1234; Serial.print(now.hour(), DEC); Serial.print(":"); Serial.print(now.minute(), DEC); Serial.print(" -> "); Serial.print(timp); Serial.println(" !");
// display parts for(int i = 250 ; i >0 ; i--) { if (timp > 1000) displayNumber01(timp); else displayNumber02(timp); }
for(int i = 250 ; i >0 ; i--) { if (timp > 1000) displayNumber03(timp); else displayNumber04(timp); }
if (!(digitalRead(SW0))) set_time(); // hold the switch to set time}
void set_time() { byte minutes1 = 0; byte hours1 = 0; byte minutes = 0; byte hours = 0;
while (!digitalRead(SW0)) // set time switch must be released to exit { minutes1=minutes; hours1=hours; while (!digitalRead(SW1)) // set minutes
{ minutes++; // converting hexa in zecimal: zh = hours / 16; uh = hours - 16 * zh ; ore = 10 * zh + uh; zm = minutes / 16; um = minutes - 16 * zm ; miniti = 10 * zm + um; for(int i = 20 ; i >0 ; i--) { displayNumber01(ore*100+miniti); }
if ((minutes & 0x0f) > 9) minutes = minutes + 6; if (minutes > 0x59) minutes = 0; Serial.print("Minutes = "); if (minutes >= 9) Serial.print("0"); Serial.println(minutes, HEX); delay(150); }
while (!digitalRead(SW2)) // set hours { hours++; // converting hexa in zecimal: zh = hours / 16; uh = hours - 16 * zh ; ore = 10 * zh + uh; zm = minutes / 16; um = minutes - 16 * zm ; miniti = 10 * zm + um; for(int i = 20 ; i >0 ; i--) { displayNumber01(ore*100+miniti); } if ((hours & 0x0f) > 9) hours = hours + 6; if (hours > 0x23) hours = 0; Serial.print("Hours = "); if (hours <= 9) Serial.print("0"); Serial.println(hours, HEX); delay(150); }
Wire.beginTransmission(0x68); // activate DS1307 Wire.write(0); // where to begin Wire.write(0x00); //seconds Wire.write(minutes); //minutes
Wire.write(0x80 | hours); //hours (24hr time) Wire.write(0x06); // Day 01-07 Wire.write(0x01); // Date 0-31 Wire.write(0x05); // month 0-12 Wire.write(0x09); // Year 00-99 Wire.write(0x10); // Control 0x10 produces a 1 HZ square wave on pin 7. Wire.endTransmission(); // converting hexa in zecimal: zh = hours / 16; uh = hours - 16 * zh ; ore = 10 * zh + uh; zm = minutes / 16; um = minutes - 16 * zm ; miniti = 10 * zm + um; for(int i = 20 ; i >0 ; i--) { displayNumber01(ore*100+miniti); } // delay(150); } }
void displayNumber01(int toDisplay) {#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH#define DIGIT_OFF LOW
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time switch(digit) { case 1: digitalWrite(digit1, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 2: digitalWrite(digit2, DIGIT_ON); digitalWrite(segDP, LOW); break; case 3: digitalWrite(digit3, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 4: digitalWrite(digit4, DIGIT_ON);
digitalWrite(segDP, HIGH); break; } lightNumber(toDisplay % 10); toDisplay /= 10; delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments lightNumber(10);
//Turn off all digits digitalWrite(digit1, DIGIT_OFF); digitalWrite(digit2, DIGIT_OFF); digitalWrite(digit3, DIGIT_OFF); digitalWrite(digit4, DIGIT_OFF);}}
void displayNumber02(int toDisplay) {#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH#define DIGIT_OFF LOW
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time switch(digit) { case 1: lightNumber(10); digitalWrite(segDP, HIGH); break; case 2: digitalWrite(digit2, DIGIT_ON); digitalWrite(segDP, LOW); break; case 3: digitalWrite(digit3, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 4: digitalWrite(digit4, DIGIT_ON); digitalWrite(segDP, HIGH); break; } lightNumber(toDisplay % 10); toDisplay /= 10; delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments lightNumber(10);
//Turn off all digits digitalWrite(digit1, DIGIT_OFF); digitalWrite(digit2, DIGIT_OFF); digitalWrite(digit3, DIGIT_OFF); digitalWrite(digit4, DIGIT_OFF);}}
void displayNumber03(int toDisplay) {#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH#define DIGIT_OFF LOW
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time switch(digit) { case 1: digitalWrite(digit1, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 2: digitalWrite(digit2, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 3: digitalWrite(digit3, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 4: digitalWrite(digit4, DIGIT_ON); digitalWrite(segDP, HIGH); break; } lightNumber(toDisplay % 10); toDisplay /= 10; delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments lightNumber(10);
//Turn off all digits digitalWrite(digit1, DIGIT_OFF); digitalWrite(digit2, DIGIT_OFF); digitalWrite(digit3, DIGIT_OFF); digitalWrite(digit4, DIGIT_OFF);}}
void displayNumber04(int toDisplay) {#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH#define DIGIT_OFF LOW
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time switch(digit) { case 1: lightNumber(10); digitalWrite(segDP, HIGH); break; case 2: digitalWrite(digit2, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 3: digitalWrite(digit3, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 4: digitalWrite(digit4, DIGIT_ON); digitalWrite(segDP, HIGH); break; } lightNumber(toDisplay % 10); toDisplay /= 10; delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments lightNumber(10);
//Turn off all digits digitalWrite(digit1, DIGIT_OFF); digitalWrite(digit2, DIGIT_OFF); digitalWrite(digit3, DIGIT_OFF); digitalWrite(digit4, DIGIT_OFF);}}
//Given a number, turns on those segments//If number == 10, then turn off numbervoid lightNumber(int numberToDisplay) {
#define SEGMENT_ON LOW#define SEGMENT_OFF HIGH
switch (numberToDisplay){
case 0: digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_OFF); break;
case 1: digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); break;
case 2: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_OFF); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_ON); break;
case 3: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_ON); break;
case 4: digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break;
case 5: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break;
case 6: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break;
case 7: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); break;
case 8: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break;
case 9: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break;
// all segment are ON case 10: digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_OFF); digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); break; }}/* 4 digit 7 segment display: http://www.sparkfun.com/products/9483 Datasheet: http://www.sparkfun.com/datasheets/Components/LED/7-Segment/YSD-439AR6B-35.pdf 7 segments + 4 digits + 1 colon = 12 pins required for full control */// modified connexion by niq_ro from http://nicuflorica.blogspot.com// for my Luckylight KW4-563ASA// dataseet: http://www.tme.eu/ro/Document/dfc2efde2e22005fd28615e298ea2655/KW4-563XSA.pdf
int digit1 = 11; //PWM Display pin 12 (digit1 is common anonds A1 from right side)int digit2 = 10; //PWM Display pin 9 (digit2 is common A2)int digit3 = 9; //PWM Display pin 8 (digit3 is common anods A3)int digit4 = 6; //PWM Display pin 6 (digit4 is common anods, from left side)
//Pin mapping from Arduino to the ATmega DIP28 if you need it//http://www.arduino.cc/en/Hacking/PinMappingint segA = 2; //Display pin 11int segB = 3; //Display pin 7int segC = 4; //Display pin 4int segD = 5; //Display pin 2int segE = 12; //Display pin 1int segF = 7; //Display pin 10int segG = 8; //Display pin 5int segDP = 13; // Display pin 3
#include <Wire.h>#include "RTClib.h"RTC_DS1307 RTC;
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib// original sketck from http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/// add part with SQW=1Hz from http://tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the-i2c-bus/// add part with manual adjust http://www.bristolwatch.com/arduino/arduino_ds1307.htm
byte SW0 = A0;byte SW1 = A1;byte SW2 = A2;
// use for hexa in zecimal conversionint zh, uh, ore;int zm, um, miniti;
void setup() { // Serial.begin(57600); Wire.begin(); RTC.begin(); RTC.adjust(DateTime(__DATE__, __TIME__));// if you need set clock... just remove // from line above this
// part code for flashing LEDWire.beginTransmission(0x68);Wire.write(0x07); // move pointer to SQW address// Wire.write(0x00); // turns the SQW pin off Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave at 1Hz// Wire.write(0x13); // sends 0x13 (hex) 00010011 (binary) 32kHz
Wire.endTransmission();
if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); // following line sets the RTC to the date & time this sketch was compiled RTC.adjust(DateTime(__DATE__, __TIME__)); } // dht.begin();
pinMode(segA, OUTPUT); pinMode(segB, OUTPUT); pinMode(segC, OUTPUT); pinMode(segD, OUTPUT); pinMode(segE, OUTPUT); pinMode(segF, OUTPUT); pinMode(segG, OUTPUT); pinMode(segDP, OUTPUT);
pinMode(digit1, OUTPUT); pinMode(digit2, OUTPUT); pinMode(digit3, OUTPUT); pinMode(digit4, OUTPUT); // pinMode(13, OUTPUT);
Serial.begin(9600); Serial.println("test for niq_ro");
pinMode(SW0, INPUT); // for this use a slide switch pinMode(SW1, INPUT); // N.O. push button switch pinMode(SW2, INPUT); // N.O. push button switch
digitalWrite(SW0, HIGH); // pull-ups on digitalWrite(SW1, HIGH); digitalWrite(SW2, HIGH);
}
void loop() {digitalWrite(segDP, HIGH); DateTime now = RTC.now(); int timp = now.hour()*100+now.minute();// int timp = (now.minute(), DEC);// displayNumber(12); // this is number to diplay// int timp = 1234; Serial.print(now.hour(), DEC); Serial.print(":"); Serial.print(now.minute(), DEC); Serial.print(" -> "); Serial.print(timp); Serial.println(" !");
// display parts for(int i = 250 ; i >0 ; i--) { if (timp > 1000) displayNumber01(timp); else displayNumber02(timp); }
for(int i = 250 ; i >0 ; i--) { if (timp > 1000) displayNumber03(timp); else displayNumber04(timp); }
if (!(digitalRead(SW0))) set_time(); // hold the switch to set time}
void set_time() { byte minutes1 = 0; byte hours1 = 0; byte minutes = 0; byte hours = 0;
while (!digitalRead(SW0)) // set time switch must be released to exit { minutes1=minutes; hours1=hours; while (!digitalRead(SW1)) // set minutes { minutes++; // converting hexa in zecimal: zh = hours / 16; uh = hours - 16 * zh ; ore = 10 * zh + uh; zm = minutes / 16; um = minutes - 16 * zm ; miniti = 10 * zm + um; for(int i = 20 ; i >0 ; i--) { displayNumber01(ore*100+miniti); }
if ((minutes & 0x0f) > 9) minutes = minutes + 6; if (minutes > 0x59) minutes = 0; Serial.print("Minutes = "); if (minutes >= 9) Serial.print("0"); Serial.println(minutes, HEX); delay(150); }
while (!digitalRead(SW2)) // set hours { hours++; // converting hexa in zecimal: zh = hours / 16; uh = hours - 16 * zh ; ore = 10 * zh + uh; zm = minutes / 16; um = minutes - 16 * zm ; miniti = 10 * zm + um; for(int i = 20 ; i >0 ; i--) { displayNumber01(ore*100+miniti); } if ((hours & 0x0f) > 9) hours = hours + 6; if (hours > 0x23) hours = 0; Serial.print("Hours = "); if (hours <= 9) Serial.print("0");
Serial.println(hours, HEX); delay(150); }
Wire.beginTransmission(0x68); // activate DS1307 Wire.write(0); // where to begin Wire.write(0x00); //seconds Wire.write(minutes); //minutes Wire.write(0x80 | hours); //hours (24hr time) Wire.write(0x06); // Day 01-07 Wire.write(0x01); // Date 0-31 Wire.write(0x05); // month 0-12 Wire.write(0x09); // Year 00-99 Wire.write(0x10); // Control 0x10 produces a 1 HZ square wave on pin 7. Wire.endTransmission(); // converting hexa in zecimal: zh = hours / 16; uh = hours - 16 * zh ; ore = 10 * zh + uh; zm = minutes / 16; um = minutes - 16 * zm ; miniti = 10 * zm + um; for(int i = 20 ; i >0 ; i--) { displayNumber01(ore*100+miniti); } // delay(150); } }
void displayNumber01(int toDisplay) {#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH#define DIGIT_OFF LOW
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time switch(digit) { case 1: digitalWrite(digit1, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 2: digitalWrite(digit2, DIGIT_ON);
digitalWrite(segDP, LOW); break; case 3: digitalWrite(digit3, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 4: digitalWrite(digit4, DIGIT_ON); digitalWrite(segDP, HIGH); break; } lightNumber(toDisplay % 10); toDisplay /= 10; delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments lightNumber(10);
//Turn off all digits digitalWrite(digit1, DIGIT_OFF); digitalWrite(digit2, DIGIT_OFF); digitalWrite(digit3, DIGIT_OFF); digitalWrite(digit4, DIGIT_OFF);}}
void displayNumber02(int toDisplay) {#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH#define DIGIT_OFF LOW
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time switch(digit) { case 1: lightNumber(10); digitalWrite(segDP, HIGH); break; case 2: digitalWrite(digit2, DIGIT_ON); digitalWrite(segDP, LOW); break; case 3: digitalWrite(digit3, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 4: digitalWrite(digit4, DIGIT_ON); digitalWrite(segDP, HIGH); break;
} lightNumber(toDisplay % 10); toDisplay /= 10; delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments lightNumber(10);
//Turn off all digits digitalWrite(digit1, DIGIT_OFF); digitalWrite(digit2, DIGIT_OFF); digitalWrite(digit3, DIGIT_OFF); digitalWrite(digit4, DIGIT_OFF);}}
void displayNumber03(int toDisplay) {#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH#define DIGIT_OFF LOW
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time switch(digit) { case 1: digitalWrite(digit1, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 2: digitalWrite(digit2, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 3: digitalWrite(digit3, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 4: digitalWrite(digit4, DIGIT_ON); digitalWrite(segDP, HIGH); break; } lightNumber(toDisplay % 10); toDisplay /= 10; delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments lightNumber(10);
//Turn off all digits digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF); digitalWrite(digit3, DIGIT_OFF); digitalWrite(digit4, DIGIT_OFF);}}
void displayNumber04(int toDisplay) {#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH#define DIGIT_OFF LOW
for(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of time switch(digit) { case 1: lightNumber(10); digitalWrite(segDP, HIGH); break; case 2: digitalWrite(digit2, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 3: digitalWrite(digit3, DIGIT_ON); digitalWrite(segDP, HIGH); break; case 4: digitalWrite(digit4, DIGIT_ON); digitalWrite(segDP, HIGH); break; } lightNumber(toDisplay % 10); toDisplay /= 10; delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments lightNumber(10);
//Turn off all digits digitalWrite(digit1, DIGIT_OFF); digitalWrite(digit2, DIGIT_OFF); digitalWrite(digit3, DIGIT_OFF); digitalWrite(digit4, DIGIT_OFF);}}
//Given a number, turns on those segments//If number == 10, then turn off numbervoid lightNumber(int numberToDisplay) {
#define SEGMENT_ON LOW#define SEGMENT_OFF HIGH
switch (numberToDisplay){
case 0: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_OFF); break;
case 1: digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); break;
case 2: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_OFF); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_ON); break;
case 3: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_ON); break;
case 4: digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break;
case 5: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break;
case 6: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break;
case 7: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); break;
case 8: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); break;
case 9: digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON);
break;
// all segment are ON case 10: digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_OFF); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); break; }}