Как запустить LED дисплей на UNO

Есть старый проект собранный на UNO и модуле MAX7219. Никак не получается запустить сегментный дисплей.
Суть проекта проста. UNO набирает цифровое значение и выводит на LED дисплей.

uint8_t buf[8] = { 0 }; // байт с информацией о «нажатой» клавише
#include "LedControl.h" // Подключаем библиотеку
LedControl lc=LedControl(11,9,10,1); // используемые пины ардуины для подключения, и сколько драйверов в цепочке.
// 1pin 11 is connected to the din dut
// 2pin 9 is connected to the CLK (CLK)
// 3pin 10 is connected to cs (Loda)

void setup()
{
//Инициируем MAX7219
Serial.begin(9600); // Устанавливаем скорость соединения
int devices = lc.getDeviceCount();
for(int address = 0; address < devices; address ++) 
  {
   lc.shutdown(0, false);// включаем дисплей энергосбережение дисплей
   lc.setIntensity(0,3);// устанавливаем яркость (0-минимум, 15-максимум)
   lc.clearDisplay(0);// очищаем дисплей
  }
delay(2000); // Пауза, чтобы «клавиатура» успела определиться в системе
}

void loop() 
{
  int dig1, dig2, dig3, dig4, dig5, dig6; // Цифры, которые будут последовательно вводиться
  int keys[10] = { 39, 30, 31, 32, 33, 
  34, 35, 36, 37, 38 }; // Массив с ASCII кодами цифер от 0 до 9 соответственно

 // Перебор с 000000 до 999999:

  for(dig1=0; dig1<10; dig1++)
  {
    for(dig2=0; dig2<10; dig2++)
    {
      for(dig3=0; dig3<10; dig3++)
      {
        for(dig4=0; dig4<10; dig4++)
        {
          for(dig5=0; dig5<10; dig5++)
          { 
           for(dig6=0; dig6<10; dig6++)
           {
             pressKey(keys[dig1]);
             pressKey(keys[dig2]);
             pressKey(keys[dig3]);
             pressKey(keys[dig4]);
             pressKey(keys[dig5]);
             pressKey(keys[dig6]);
             pressKey(40); // Клавиша Enter
             for(int i=0; i<1200; i++)
             {
               //Здесь:
               //0 - адрес устройства
               //5 - порядковый номер разряда на дисплее
               //dig - это и есть отображаемая цифра
               //false - управление включением десятичной точки разряда
               lc.setDigit(0, 7, dig1, false);
               lc.setDigit(0, 6, dig2, false);
               lc.setDigit(0, 5, dig3, false);
               lc.setDigit(0, 4, dig4, false);
               lc.setDigit(0, 3, dig5, false);
               lc.setDigit(0, 2, dig6, false);
             }
            }
          }
        }
      }
    }
  }
}

void pressKey(int dig) // Функция ввода
{
  buf[2] = dig;
  Serial.write(buf, 8); // Нажать клавишу
  buf[0] = 0;
  buf[2] = 0;
  delay(20);
  Serial.write(buf, 8); // Отпустить клавишу
  delay(300);
}

0_0

Опишите своими словами (то есть расставьте комментарии в коде) что происходит по Вашему мнению на каждой строке кода (дополните уже существующие комментарии).

Вы уверены что это коды “цифер” ? А если в табличку АSCII посмотреть?

а вот темнить не надо. Суть проекта - очередной брут-форс пароля. Показ цифр на дисплее - только диагностика.

Код довольно странный… если не сказать больше
Вот например зачем 1200 раз выводить на дисплей одно и то же?

Или вы, как в анекдоте, думаете что на миллионный раз замок сдастся ? :slight_smile:

PS @Bamambam а вы случайно не перелогиненный @Zeal ?
Две темы про взлом паролей за два дня - странное совпадение

не зеал. Пять лет назад писал этот код, непомню уже что тогда сделал но все работало, оригинальная железка давно утеряна. И вот сейчас снова понадобилась для мака.

ну значит и сейчас чуть подумаете и напишете.

1 лайк

Видимо нужно было сразу (еще тогда, пять лет назад)::

Не по-пацански!

Ну, несколько раз - для надёжности, вдруг с первого раза не сработает. А именно 1200, видимо потому, что 1199 интуитивно как-то маловато, в 1201 было бы уже, пожалуй, перебором.