tm74hc595 + arduino uno r3 Проблема со скетчем
- Войдите на сайт для отправки комментариев
Ср, 28/09/2016 - 19:28
Всем привет. У меня простая задачка для умеющих и сложная для меня) Выручайте.
Есть первый скетч для arduino uno, который работает (он ниже). И есть второй скетч-пример в котором индикатор tm74hc595 и arduino uno работают нормально(еще ниже). Библиотека тоже есть.
Задача: Подправить первый скетч так, чтоб информация выводилась на индикатор tm74hc595
Проблема: Я в этом не силён, но перепробовал вариантов 10.... устал... решил спросить)
00000000 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); }
Нолики лишние в самом начале)
list,
Вы привели два скетча под триста строк и даже не потрудились сказать что они делают (должны делать)! Вы действительно считаете, что сейчас все всё бросят и кинуться разбираться?
Прошу прощенья, но я не думал что это настолько сложно и что для этого нужно полностью изучать код. Я думал что достаточно в первый скетч добавить несколько строк из второго. Видимо ошибался.
Первый скетч - бутфорс пароля, 4 цифры, если это важно, из самого конца статьи https://habrahabr.ru/post/240291/
Второй скетч из примера, который лежал в папке с библиотекой индикатора.
Если это сложно, может хотя бы ссылку дадите на литературу, чтобы почитать и самому разобраться?
читай комменты к коду, там где к выводу на экран
// Возможно, существуют библиотеки для сегментных индикторов, но мне не захотелось с ними разбираться,
вот инициализация твоего дисплея
Часа два просидел. Склеить воедино у меня все равно не получается - программа ругается...
P.s. опыта в написании скетчей вообще не имею... наверное дело в этом
как именно ругается?
и код киньте
.