// Define segment pins
const int segmentPins[] = {1, 2, 3, 4, 5, 6, 7, 8}; // a, b, c, d, e, f, g, dot
// Define digit pins
const int digitPins[] = {9, 10, 11, 12}; // d4, d3, d2, d1
// Other constants
const int delayTime = 100;
const int flashCount = 5;
void setup() {
// Initialize all pins as OUTPUT
for (int pin : segmentPins) {
pinMode(pin, OUTPUT);
digitalWrite(pin, HIGH); // Turn off segments
}
for (int pin : digitPins) {
pinMode(pin, OUTPUT);
}
}
void loop() {
// Call display patterns in sequence
performPattern(roulette, 2);
performPattern(zigzag, 2);
performPattern(circles, 2);
flash();
}
// Function to perform a specific pattern
void performPattern(void (*patternFunction)(int), int repetitions) {
for (int i = 0; i < repetitions; i++) {
patternFunction(delayTime);
delay(500);
}
}
void pickDigit(int x) {
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], (i + 1 == x) ? HIGH : LOW);
}
}
void clearLEDs() {
for (int pin : segmentPins) {
digitalWrite(pin, HIGH); // Turn off segments
}
}
void roulette(int del) {
for (int i = 0; i < 2; i++) {
clearLEDs();
digitalWrite(segmentPins[0], LOW); // Turn on segment a
for (int j = 1; j <= 4; j++) {
pickDigit(j);
delay(del);
}
digitalWrite(segmentPins[0], HIGH); // Turn off segment a
// Sequence of segment lights
for (int k = 5; k <= 6; k++) {
digitalWrite(segmentPins[k], LOW); // Turn on f and e
delay(del);
digitalWrite(segmentPins[k], HIGH); // Turn off f and e
}
for (int j = 3; j >= 1; j--) {
pickDigit(j);
delay(del);
}
clearLEDs();
}
}
void zigzag(int del) {
for (int i = 0; i < 2; i++) {
digitalWrite(segmentPins[0], LOW); // Turn on segment a
for (int j = 1; j <= 4; j++) {
pickDigit(j);
delay(del);
}
digitalWrite(segmentPins[0], HIGH); // Turn off segment a
for (int j = 5; j < 8; j++) {
digitalWrite(segmentPins[j], LOW); // Turn on f, g
delay(del);
digitalWrite(segmentPins[j], HIGH); // Turn off f, g
}
clearLEDs();
}
}
void circles(int del) {
for (int i = 0; i < 2; i++) {
digitalWrite(segmentPins[0], LOW);
digitalWrite(segmentPins[1], LOW);
digitalWrite(segmentPins[5], LOW);
digitalWrite(segmentPins[6], LOW);
pickDigit(1);
delay(250);
for (int j = 0; j < 3; j++) {
digitalWrite(segmentPins[0], HIGH);
digitalWrite(segmentPins[1], HIGH);
digitalWrite(segmentPins[5], HIGH);
digitalWrite(segmentPins[2 + j], LOW);
pickDigit(j + 2);
delay(250);
}
clearLEDs();
}
}
// Function to display 0000
void nyala() {
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], HIGH); // Turn on digit pins
}
}
// Flashing effect
void flash() {
for (int i = 0; i < flashCount; i++) {
nyala();
delay(250);
clearLEDs();
delay(500);
}
}