#include <TM1637Display.h>
// ================= ПИНЫ =================
#define DISPLAY_CLK 2 // CLK дисплея
#define DISPLAY_DIO 3 // DIO дисплея
#define BTN_1DICE 4 // Кнопка 1
#define BTN_2DICE 5 // Кнопка 2
#define BTN_3DICE 6 // Кнопка 3
// ================= ПЕРЕМЕННЫЕ =================
TM1637Display display(DISPLAY_CLK, DISPLAY_DIO);
int diceValues[3] = {1, 1, 1};
unsigned long lastActivity = 0;
bool displayOn = false;
// ================= НАСТРОЙКА =================
void setup() {
Serial.begin(9600);
Serial.println("🎲 Тест дисплея TM1637 в Wokwi");
// Настройка дисплея
display.setBrightness(7); // Максимальная яркость!
// Настройка кнопок
pinMode(BTN_1DICE, INPUT_PULLUP);
pinMode(BTN_2DICE, INPUT_PULLUP);
pinMode(BTN_3DICE, INPUT_PULLUP);
// Тест дисплея при запуске
testDisplay();
Serial.println("✅ Готово! Нажимайте кнопки 1, 2, 3");
}
void loop() {
// Проверка кнопок
if (digitalRead(BTN_1DICE) == LOW) {
Serial.println("Кнопка 1 нажата");
showOnDisplay(1);
delay(300);
}
if (digitalRead(BTN_2DICE) == LOW) {
Serial.println("Кнопка 2 нажата");
showOnDisplay(2);
delay(300);
}
if (digitalRead(BTN_3DICE) == LOW) {
Serial.println("Кнопка 3 нажата");
showOnDisplay(3);
delay(300);
}
delay(50);
}
// ================= ФУНКЦИИ ДЛЯ ДИСПЛЕЯ =================
// Тест дисплея при запуске
void testDisplay() {
Serial.println("🔧 Запускаю тест дисплея...");
// Тест 1: Все сегменты горят
uint8_t full[] = { 0xff, 0xff, 0xff, 0xff };
display.setSegments(full);
delay(500);
// Тест 2: Бегущие цифры
for (int i = 0; i < 10; i++) {
display.showNumberDec(i * 1111, false);
delay(200);
}
// Тест 3: Форматы как в проекте
display.showNumberDec(5, false, 1, 1); // [ ][5][ ][ ]
delay(500);
display.showNumberDec(42, false, 2, 1); // [ ][4][2][ ]
delay(500);
display.showNumberDec(123, false, 3, 1); // [ ][1][2][3]
delay(500);
display.clear();
Serial.println("✅ Тест дисплея пройден!");
}
// Показать на дисплее
void showOnDisplay(int count) {
// Генерируем случайные числа
for (int i = 0; i < count; i++) {
diceValues[i] = random(1, 7);
}
// Показываем на дисплее
if (count == 1) {
display.showNumberDec(diceValues[0], false, 1, 1); // [ ][X][ ][ ]
}
else if (count == 2) {
int number = diceValues[0] * 10 + diceValues[1];
display.showNumberDec(number, false, 2, 1); // [ ][X][X][ ]
}
else if (count == 3) {
int number = diceValues[0] * 100 + diceValues[1] * 10 + diceValues[2];
display.showNumberDec(number, false, 3, 1); // [ ][X][X][X]
}
// Выводим в Serial для проверки
Serial.print("Дисплей показывает: ");
if (count == 1) Serial.print("[ ][");
if (count == 2) Serial.print("[ ][");
if (count == 3) Serial.print("[ ][");
for (int i = 0; i < count; i++) {
Serial.print(diceValues[i]);
if (i < count - 1) Serial.print("][");
}
if (count == 1) Serial.println("][ ]");
if (count == 2) Serial.println("][ ]");
if (count == 3) Serial.println("]");
lastActivity = millis();
displayOn = true;
}