Изменить скетч
- Войдите на сайт для отправки комментариев
Сб, 20/08/2016 - 10:41
Есть скетч
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); }
необходимо вместо 28-сегментного индикатора цифры выводить на LCD keypad shield 1602
так как код вам нужно писать с нуля вы бы описали что хотите получить
а так в вашем коде никто разбираться не будет
Код жесть, проще его убить.
подбиралка паролей?
замечание небольшое, вот вы пишете:
вывод Arduino должно быть в высокоимпедансном состоянии
020
// и наоборот
на самом деле "высокоимпедансное состояние" - это когда вывод подключен на вход, а вам нужно выход, так что лучше быть попроще и написать "в 1".
А оно действительно, что делать- то должен код? Просто тупо перебить на другой индикатор можно конечно, но не факт что это будет проще. Но могу и перебить. Пишите ydom coбaкa mail.ru
Пишите через форму связи
К чему эти понты "проще его убить", "в вашем коде никто разбираться не будет" великие гуру ардуино! Не за спасибо попросил помощи!
Спасибо огромное кто ответил по существу. Этот код скопирован из статьи на хабре https://habrahabr.ru/post/240291/. У меня заблокировался макбук и нужно мне его таким образом разблокировать, но в ардуино я ничего не понимаю. Ардуинка давно валялась, решил попробовать.
нечего дуться и строить из себя обиженного
по нормальному сформулируй задание - тогда может кто и поможет
skype: p.masyukov
Индийский код.
Заказал у vlad.spbstu@mail.ru (Владислав Gardner, VladMaster) проект станции дозирования, после оплаты не выходит на связь. Владислав, выходи на связь subnews4@mial.ru.