Подключение 5 пинового 7 сег дисплея 88

Всем привет! Кто-нибудь может объяснить как этот дисплей заставить адекватно цифры отображать с ардуино? Распиновку не нашел но затестил сам, чатжпг тоже ниче не знает. Вытащил из кружки-мешалки поломаной, отображала температуру и таймер. Точки не показывала, да и методом тыка они у меня ни разу не загорались
Похожие продают на алике: https://sl.aliexpress.ru/p?key=xNWBGbS

Распиновку собрал такую:
A1: 2(+), 3(-)
B1: 3(+), 2(-)
C1: 4(+), 2(-)
D1: 4(+), 3(-)
E1: 5(+), 2(-)
F1: 5(+), 3(-)
G1: 5(+), 4(-)

A2: 1(+), 2(-)
B2: 2(+), 1(-)
C2: 1(+), 3(-)
D2: 3(+), 1(-)
E2: 1(+), 4(-)
F2: 4(+), 1(-)
G2: 5(+), 1(-)

Буду благодарен за помощь!

нужна динамическая индикация.

Как это реализовать? Либы может есть какие? К каким пинам к ардуине паять?

быстро-быстро переключать нужные сегменты

любым цифровым

1 лайк

можешь пример кода скинуть? что бы напрмер отображалась цифра 2 (abged1)

читать, искать, пробовать…
публиковать, что делали и что не получилось, поможем.

если хотите решать только вопросами, у нас есть платный раздел, велком.

Навскидку можно разделить сегменты на 4 группы - по тому на какой пин заведен минус

B2, D2, F2 G2 - pin 1
B1, C1, E1 A2 - pin 2
A1 D1 F1 C2 - pin 3
G1 E2 - pin 4

В каждой из этих групп сегменты можно включать одновременно. Итого получается цикл всего из четырех шагов

  1. подаем 2(+) 4(+) 3(-) на 3 мс, 1 и 5 в z-state
  2. подаем 3(+) 5(+) 2(-) на 3мс, 1 и 4 в z-state
  3. подаем 5(+) 4(-) на 3 мс, 1, 2 и 3 в z-state

и так в бесконечном цикле

Ты Бармалея чтоль приютил? ))

Это алгоритм. От него до кода еще 3 дня лесом

Например, надо еще решить, как повесить на сегменты резисторы. Скорее всего, встроенных в индикаторе нет.

Идею понял, спасибо! Но чет где-то ошибся, мигают adf1, c2 вместо 2(abged1)

int pins[5] = {2, 3, 4, 5, 6};

void setup() {
  for (int i = 0; i < 5; i++) {
    pinMode(pins[i], OUTPUT);
  }
}

void loop() {
  display_digit_2();
}

void display_digit_2() {
  pinMode(pins[1], OUTPUT);
  pinMode(pins[3], OUTPUT);
  pinMode(pins[0], INPUT);
  pinMode(pins[2], INPUT);
  pinMode(pins[4], INPUT);
  digitalWrite(pins[1], HIGH);
  digitalWrite(pins[3], HIGH);
  delay(3);

  pinMode(pins[2], OUTPUT);
  pinMode(pins[4], OUTPUT);
  pinMode(pins[0], INPUT);
  pinMode(pins[1], INPUT);
  pinMode(pins[3], INPUT);
  digitalWrite(pins[2], HIGH);
  digitalWrite(pins[4], HIGH);
  delay(3);

  pinMode(pins[4], OUTPUT);
  pinMode(pins[3], INPUT);
  pinMode(pins[0], INPUT);
  pinMode(pins[1], INPUT);
  pinMode(pins[2], INPUT);
  digitalWrite(pins[4], HIGH);
  delay(3);
}

конечно ошиблись, у вас на всех выходах HIGH, куда LOW потеряли?
И да, чтобы не путаться - я бы пины назвал pin_1 pin_2 и так далее - в соответствии с первоначальной таблицей.

и да - что там у вас с резисторами? Пожгете же индикатор или ардуину, если без них.

А я не надолго включаю, пока для теста. Вобщем 2 почти получилась - не хватает одного сегмента (b1)

int pins[5] = {2, 3, 4, 5, 6};

void setup() {
  for (int i = 0; i < 5; i++) {
    pinMode(pins[i], OUTPUT);
  }
}

void loop() {
  display_digit_2();
}

void display_digit_2() {
  pinMode(pins[1], OUTPUT);
  pinMode(pins[3], OUTPUT);
  pinMode(pins[0], INPUT);
  pinMode(pins[2], INPUT);
  pinMode(pins[4], INPUT);
  digitalWrite(pins[1], HIGH);
  digitalWrite(pins[3], HIGH);
  digitalWrite(pins[0], LOW);
  digitalWrite(pins[2], LOW);
  digitalWrite(pins[4], LOW);
  delay(3);

  pinMode(pins[2], OUTPUT);
  pinMode(pins[4], INPUT);
  pinMode(pins[0], INPUT);
  pinMode(pins[1], INPUT);
  digitalWrite(pins[2], HIGH);
  digitalWrite(pins[0], LOW);
  digitalWrite(pins[1], LOW);
  digitalWrite(pins[3], LOW);
  delay(3);

  pinMode(pins[4], OUTPUT);
  pinMode(pins[3], INPUT);
  pinMode(pins[2], INPUT);
  pinMode(pins[0], INPUT);
  pinMode(pins[1], INPUT);
  digitalWrite(pins[4], HIGH);
  digitalWrite(pins[0], LOW);
  digitalWrite(pins[1], LOW);
  digitalWrite(pins[2], LOW);
  digitalWrite(pins[3], LOW);
  delay(3);
}

каша у вас, пин переключаете зачем то на INPUT, потом лепите ему digitalWrite, зачем?

1 лайк

неправильно INPUT OUTPUT используете. Разберитесь, что эти режимы значат

1 лайк

“слегка беременна” ?

из-за этого b1 не горит?

Я не стану разбираться, почему у вас b1 не горит. Вы пины как будто специально обозначили так, чтобы другие в них запутались. У вас соответвие пинов надо искать по двум косвенным таблицам - поэтому я совсем не уверен, что вы зажигаете их в нужном порядке.
Ну и плюс к тому, вы зажигаете их неверно.

Чтобы подать на пин HIGH или LOW - он должен быть в OUТPUT режиме, а чтобы перевести пин в z-state - сделайте его INPUT.
Вроде бы элементарные вещи, могли бы сами прочитать книжку.

Все, спать ушел

в частности, вам очень повезло, что ARDUINO это для “тупых” (тока давайте без обид )и digitalWrite переключает пин на выход, о чем вы не заботитесь.
воспользуйтесь советом дона