#include <TM1637Display.h>
#include <EEPROM.h>
#define CLK1_PIN 2
#define DIO1_PIN 3
#define CLK2_PIN 4
#define DIO2_PIN 5
#define CLK3_PIN 6
#define DIO3_PIN 7
#define CLK4_PIN 8
#define DIO4_PIN 9
#define UP_BUTTON_PIN 10
#define DOWN_BUTTON_PIN 11
#define SELECT_BUTTON_PIN 12
TM1637Display display1(CLK1_PIN, DIO1_PIN);
TM1637Display display2(CLK2_PIN, DIO2_PIN);
TM1637Display display3(CLK3_PIN, DIO3_PIN);
TM1637Display display4(CLK4_PIN, DIO4_PIN);
int moduleIndex = 0;
int numbers[4]; // ذخیره مقدار هر نمایشگر
void setup() {
pinMode(UP_BUTTON_PIN, INPUT_PULLUP);
pinMode(DOWN_BUTTON_PIN, INPUT_PULLUP);
pinMode(SELECT_BUTTON_PIN, INPUT_PULLUP);
// بازیابی مقادیر از EEPROM
for (int i = 0; i < 4; i++) {
EEPROM.get(i * sizeof(int), numbers[i]);
if (numbers[i] > 9999 || numbers[i] < 0) numbers[i] = 0; // مقدار معتبر
}
// روشن کردن همه نمایشگرها
display1.setBrightness(7);
display2.setBrightness(7);
display3.setBrightness(7);
display4.setBrightness(7);
}
void loop() {
if (digitalRead(UP_BUTTON_PIN) == LOW) {
numbers[moduleIndex]++;
if (numbers[moduleIndex] > 9999) numbers[moduleIndex] = 0;
EEPROM.put(moduleIndex * sizeof(int), numbers[moduleIndex]); // ذخیره در EEPROM
delay(200);
}
if (digitalRead(DOWN_BUTTON_PIN) == LOW) {
numbers[moduleIndex]--;
if (numbers[moduleIndex] < 0) numbers[moduleIndex] = 9999;
EEPROM.put(moduleIndex * sizeof(int), numbers[moduleIndex]); // ذخیره در EEPROM
delay(200);
}
if (digitalRead(SELECT_BUTTON_PIN) == LOW) {
moduleIndex = (moduleIndex + 1) % 4; // تغییر نمایشگر فعال
delay(200);
}
// نمایش مقدار مربوط به هر نمایشگر با نقطه (Dot) روی نمایشگر فعال
display1.showNumberDecEx(numbers[0], (moduleIndex == 0) ? 0b10000000 : 0b00000000, true);
display2.showNumberDecEx(numbers[1], (moduleIndex == 1) ? 0b10000000 : 0b00000000, true);
display3.showNumberDecEx(numbers[2], (moduleIndex == 2) ? 0b10000000 : 0b00000000, true);
display4.showNumberDecEx(numbers[3], (moduleIndex == 3) ? 0b10000000 : 0b00000000, true);
delay(100);
}