#include <OneWire.h>
// Define the pins that are connected to the display.
const int segmentPins[] = {2, 3, 4, 5, 6, 7, 8};
// const int digitSelectPins[] = {9, 10, 11, 12};
const int digitSelectPins[] = {12, 11, 10, 9};
// Define a lookup table that maps each digit to the corresponding segment pattern.
const byte digitPatterns[] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4 (Note the segment order change here)
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111, // 9
};
// Set up the display.
void setup() {
// for sensor
Serial.begin(9600);
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(digitSelectPins[i], OUTPUT);
}
// Set all of the segment pins low.
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], LOW);
}
// Set all of the digit select pins high.
for (int i = 0; i < 4; i++) {
digitalWrite(digitSelectPins[i], HIGH);
}
}
// Display the number on the display.
void displayNumber(int number) {
// Split the number into its individual digits.
int digits[4];
for (int i = 0; i < 4; i++) {
digits[i] = number % 10;
number /= 10;
}
// Display each digit one at a time in reverse order.
for (int i = 0; i < 4; i++) {
// Select the digit to display.
for (int j = 0; j < 4; j++) {
digitalWrite(digitSelectPins[j], j == i ? LOW : HIGH);
}
delay(5);
// Turn on the segments of the display that correspond to the desired digit.
for (int j = 0; j < 7; j++) {
digitalWrite(segmentPins[j], (digitPatterns[digits[i]] >> j) & 1);
}
// delay(5);
// Delay for a short period of time.
// delay(10);
//Turn off all segments before moving to the next digit.
for (int j = 0; j < 7; j++) {
digitalWrite(segmentPins[j], LOW);
}
// delay(10);
}
// delay(100);
}
// Loop forever.
void loop() {
// for sensor
// Display the number 1234 on the display.
displayNumber(1235);
// delay(100);
}