Digispark+TM1637

Добрый день!

Нужен скетч позволяющий при подачи питания (включении) Digispark выводить на TM1637 поочередно (или лучше в рандомном порядке) несколько заранее прописанных символов. Это что то вроде дисплея-таймера к игрушке…..

Примеры символов на дисплее: 0000, HELL, 0101, ERRR, 2025, “кружочки”, “черточки” и прочее….таймер, если возможно….

Digispark и TM1637 есть в наличии, нужен только скетч.

Точно Digispark сможешь прошить самостоятельно?

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

какой бюджет?

жду предложений вроде “напишу за ***”. мне кажется это не сложный скетч

а в чём сложность сделать самой? взять экзампл к 1637 и просто вставить в него свой текст?

спасибо, только символы сами сформируете, проверить есть на чем,ну или сами сможете

Вы очень любезны. Вот этого набора со случайным перебором будет более чем достаточно. Если случайным перебором нельзя, можно просто по кругу …..

0000
HELL
2025
-----
ERR
0101
NO
7777
OEO
--0-

сударыня, надо в таком виде:

const uint8_t RIS_ERR[] = {
  SEG_A | SEG_D | SEG_E | SEG_F | SEG_G, // E
  SEG_E | SEG_G,                         // r
  SEG_E | SEG_G,                         // r
  0,                                     // space
};

Вы можете прямо в том скетче править, по одному, потом копировать и переименовывать их, к примеру RIS_01… и сразу заливать в свой девайс

#include <TM1637Display.h>

// Пины для подключения TM1637
#define CLK 0
#define DIO 1

TM1637Display display(CLK, DIO);

// Список символов для отображения
const uint8_t SYMBOLS[][4] = {
  // 0000
  {SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,
   SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,
   SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,
   SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F},
   
  // HELL
  {SEG_B | SEG_C | SEG_E | SEG_F | SEG_G,       // H
   SEG_A | SEG_D | SEG_E | SEG_F | SEG_G,       // E
   SEG_D | SEG_E | SEG_F,                       // L
   SEG_D | SEG_E | SEG_F},                      // L
   
  // 2025
  {SEG_A | SEG_B | SEG_D | SEG_E | SEG_G,       // 2
   SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // 0
   SEG_A | SEG_B | SEG_D | SEG_E | SEG_G,       // 2
   SEG_A | SEG_C | SEG_D | SEG_F | SEG_G},      // 5
   
  // ---- (черточки)
  {SEG_G, SEG_G, SEG_G, SEG_G},
  
  // ERR 
  {SEG_A | SEG_D | SEG_E | SEG_F | SEG_G,       // E
   SEG_E | SEG_G,                               // R
   SEG_E | SEG_G,                               // R
   0x00},                                       // пробел
   
  // 0101
  {SEG_B | SEG_C,                               // 1
   SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // 0
   SEG_B | SEG_C,                               // 1
   SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F}, // 0
   
  // NO
  {SEG_C | SEG_E | SEG_G,                       // N
   SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
   0x00,                                        // пробел
   0x00},                                       // пробел
   
  // 7777
  {SEG_A | SEG_B | SEG_C,                       // 7
   SEG_A | SEG_B | SEG_C,                       // 7
   SEG_A | SEG_B | SEG_C,                       // 7
   SEG_A | SEG_B | SEG_C},                      // 7
   
  // OEO
  {SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
   SEG_A | SEG_D | SEG_E | SEG_F | SEG_G,       // E
   SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
   0x00},                                       // пробел
   
  // --0-
  {SEG_G,                                       // -
   SEG_G,                                       // -
   SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // 0
   SEG_G}                                       // -
};

const int SYMBOLS_COUNT = sizeof(SYMBOLS) / sizeof(SYMBOLS[0]);

void setup() {
  display.setBrightness(7); // Яркость (0-7)
  randomSeed(analogRead(0)); // Инициализация генератора случайных чисел
}

void loop() {
  // Вариант 1: Случайный порядок
  int randomIndex = random(SYMBOLS_COUNT);
  display.setSegments(SYMBOLS[randomIndex]);
  
  // Вариант 2: Поочерёдный порядок (раскомментируйте для использования)
  /*
  static int currentIndex = 0;
  display.setSegments(SYMBOLS[currentIndex]);
  currentIndex = (currentIndex + 1) % SYMBOLS_COUNT;
  */
  
  delay(2000); // Задержка 2 секунды между сменой символов
}

2 лайка

Большое Вам спасибо!

На тини работает

1 лайк

Щас проверю! У меня есть дисплей работающий только на одной Гайверовской библиотеке, готовься к “интервью” или приятно удиви, пошёл проверять

Работает, но как библиотеку Arduino ты её недооформил

Деда у тебя в этой библиотеке по линии дата пробегает КЗ.

Вот, скриншот сделал. Зелёный луч - дата, жёлтый - синхра, посадка до уровня 2 вольт это КЗ, поймал длительность 36 микросекунд.

То есть осциллографу мы не верим, ну это твоя репа, я только предупредил, что КЗ есть.

не у него одного, на Гайверовской старой тоже присутствует, может это проблема в модуле?

Кроме наличия осцила к нему очень полезен мозг, чтобы анализировать данные с прибора. Попробуй придумать правдоподобное обьяснение, каким образом код может быть ответсвеннен за КЗ по линии дата?

Возможно КЗ и есть - но это твой КЗ. Ищи его не в коде, а в твоей схеме или в модуле.

Нет, это не в модуле, просто функцию WriteByte передирают друг у друга, не особо разобравшись как она должна работать.

да легко, я уже писал ранее что по юности написал код выжигавший материнку

За этот случай не скажу, сейчас нет времени разбираться, а, вообще , на двунаправленных шинах очень может быть. Proteus , кстати, хорошо это отслеживает, и, если что выводит ошибку

1 лайк