#include <Arduino.h>
// пины катодов
const uint8_t digs[] = {5, 4, 3, 2}; // D3, D2, D1, D0
// пины сегментов
const uint8_t segs[] = {6, 7, 8, 9, 10, 11, 12, 13}; // A, B, C, D, E, F, G, DP
// коды цифр
const uint8_t nums[] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111, // 9
};
// буфер
uint8_t buf[4];
void dispTick() {
static uint8_t idx;
static uint32_t tmr;
if (millis() - tmr < 10) return;
tmr = millis();
digitalWrite(digs[idx], HIGH);
if (++idx >= 4) idx = 0;
uint8_t data = buf[idx];
for (uint8_t p : segs) {
digitalWrite(p, data & 1);
data >>= 1;
}
digitalWrite(digs[idx], LOW);
}
void dispPrint(int val) {
for (int i = 0; i < 4; i++) {
buf[i] = nums[val % 10];
val /= 10;
}
}
void setup() {
for (uint8_t p : digs) pinMode(p, OUTPUT);
for (uint8_t p : segs) pinMode(p, OUTPUT);
}
void loop() {
dispTick();
static uint32_t tmr;
if (millis() - tmr >= 50) {
tmr = millis();
dispPrint(analogRead(0));
}
}
/*
#include <GyverSegment.h>
const uint8_t digs[] = {2, 3, 4, 5};
const uint8_t segs[] = {6, 7, 8, 9, 10, 11, 12, 13};
DispBare<4, 1, false> disp(digs, segs);
void setup() {
// демо - вывод разных данных
// // текст
// disp.setCursor(0);
// disp.print("gyvr");
// disp.update();
// disp.delay(2000);
// // целое число
// disp.setCursor(0);
// disp.print(1234);
// disp.update();
// disp.delay(2000);
// // float
// disp.setCursor(0);
// disp.print(3.14, 3); // точность 3 знака
// disp.update();
// disp.delay(2000);
}
void loop() {
disp.tick();
static uint32_t tmr;
if (millis() - tmr >= 50) {
tmr = millis();
disp.clear();
disp.home();
disp.print(analogRead(0));
disp.update();
}
}
*/