/***************************************
name: Stopwatch
function: You can see the number increases by one per second on the 4-digit 7-
segment display.
***********************************/
// Email: support@sunfounder.com
// Website: www.sunfounder.com
/**************************************/
#include <TimerOne.h>
// The pins of the 4-digit 7-segment display attach to pins 2-13 respectively
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int p = 9;
int d4 = 10;
int d3 = 11;
int d2 = 12;
int d1 = 13;
long n = 0; // n represents the value displayed on the LED display. Maximum value
is 9999.
int x = 100;
int del = 5; // Set del as 5; this is the degree of fine-tuning for the clock
int count = 0; // Set count=0. This count increases by 1 every 0.1 second
void setup() {
// Set all the pins of the LED display as output
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
Timer1.initialize(5000); // Set a timer of length 100000 microseconds (or 0.1
sec)
Timer1.attachInterrupt(add); // Attach the service routine here
}
void loop() {
clearLEDs(); // Clear the 7-segment display screen
pickDigit(0); // Light up 7-segment display d1
pickNumber((n / 1000)); // Get the value of thousand
delay(del); // Delay for 'del' milliseconds
clearLEDs(); // Clear the display screen
pickDigit(1); // Light up 7-segment display d2
pickNumber((n % 1000) / 100); // Get the value of hundred
delay(del); // Delay for 'del' milliseconds
clearLEDs(); // Clear the display screen
pickDigit(2); // Light up 7-segment display d3
pickNumber(n % 100 / 10); // Get the value of ten
delay(del); // Delay for 'del' milliseconds
clearLEDs(); // Clear the display screen
pickDigit(3); // Light up 7-segment display d4
pickNumber(n % 10); // Get the value of single digit
delay(del); // Delay for 'del' milliseconds
}
void pickDigit(int x) { // Light up a specific digit on the display
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
switch (x) {
case 0:
digitalWrite(d1, LOW); // Light d1 up
break;
case 1:
digitalWrite(d2, LOW); // Light d2 up
break;
case 2:
digitalWrite(d3, LOW); // Light d3 up
break;
default:
digitalWrite(d4, LOW); // Light d4 up
break;
}
}
// The function to control the 7-segment LED display to show numbers (0-9)
void pickNumber(int x) {
switch (x) {
default: zero(); break;
case 1: one(); break;
case 2: two(); break;
case 3: three(); break;
case 4: four(); break;
case 5: five(); break;
case 6: six(); break;
case 7: seven(); break;
case 8: eight(); break;
case 9: nine(); break;
}
}
void clearLEDs() { // Clear the LEDs on the display
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void zero() { // Display '0'
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
}
void one() { // Display '1'
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void two() { // Display '2'
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void three() { // Display '3'
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void four() { // Display '4'
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void five() { // Display '5'
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void six() { // Display '6'
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void seven() { // Display '7'
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void eight() { // Display '8'
digitalWrite(a, HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void nine() // the 7-segment led display 9
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
/*******************************************/
void add() {
count++;
if (count ==10) {
count =0;
n++;
if (n ==10000) {
n=9999;
}
}
}