Эксперимент 14. Счётчик нажатий
В этом эксперименте мы выводим на семисегментный индикатор количество нажатий на кнопку (единицы).
Список деталей для эксперимента
1 беспаечная макетная плата
1 тактовая кнопка
1 выходной сдвиговый регистр 74HC595
1 семисегментный индикатор
7 резисторов номиналом 220 Ом
24 провода «папа-папа»
Для дополнительного задания
1 резистор номиналом 10 кОм
еще 1 провод
Принципиальная схема
Схема на макетке
Обратите внимание
В этом эксперименте мы впервые используем микросхему, в данном случае — выходной сдвиговый регистр 74HC595. Микросхемы полезны тем, что позволяют решать определенную задачу, не собирая каждый раз стандартную схему.
Выходной сдвиговый регистр дает нам возможность «сэкономить» цифровые выходы, использовав всего 3 вместо 8. Каскад регистров позволил бы давать 16 и т.д. сигналов через те же три пина.
Перед использованием микросхемы нужно внимательно изучить схему ее подключения в datasheet’е. Для того, чтобы понять, откуда считать ножки микросхемы, на них с одной стороны есть полукруглая выемка. Если мы расположим нашу 74HC595 выемкой влево, то в нижнем ряду будут ножки 1—8, а в верхнем 16—9.
На принципиальной схеме нашего эксперимента ножки расположены в другом порядке, чтобы не вышло путаницы в соединениях. Назначения выводов согласно datasheet’у подписаны внутри изображения микросхемы, номера ножек — снаружи.
Напомним, что на изображении семисегментного индикатора подписаны номера его ножек и их соответствие сегментам.
Скетч
#define DATA_PIN 13 // пин данных (англ. data) #define LATCH_PIN 12 // пин строба (англ. latch) #define CLOCK_PIN 11 // пин такта (англ. clock) #define BUTTON_PIN 10 int clicks = 0; boolean buttonWasUp = true; byte segments[10] = { 0b01111101, 0b00100100, 0b01111010, 0b01110110, 0b00100111, 0b01010111, 0b01011111, 0b01100100, 0b01111111, 0b01110111 }; void setup() { pinMode(DATA_PIN, OUTPUT); pinMode(CLOCK_PIN, OUTPUT); pinMode(LATCH_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // считаем клики кнопки, как уже делали это раньше if (buttonWasUp && !digitalRead(BUTTON_PIN)) { delay(10); if (!digitalRead(BUTTON_PIN)) clicks = (clicks + 1) % 10; } buttonWasUp = digitalRead(BUTTON_PIN); // для записи в 74HC595 нужно притянуть пин строба к земле digitalWrite(LATCH_PIN, LOW); // задвигаем (англ. shift out) байт-маску бит за битом, // начиная с младшего (англ. Least Significant Bit first) shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[clicks]); // чтобы переданный байт отразился на выходах Qx, нужно // подать на пин строба высокий сигнал digitalWrite(LATCH_PIN, HIGH); }
Пояснения к коду
Обратите внимание, что в этом эксперименте кодировки символов отличаются от кодировок из эксперимента «Секундомер».
Для того, чтобы передать порцию данных, которые будут отправлены через сдвиговый регистр далее, нам нужно подать LOW на latch pin (вход STcp микросхемы), затем передать данные, а затем отправить HIGH на latch pin, после чего на соответствующих выходах 74HC595 появится переданная комбинация высоких и низких уровней сигнала.
Для передачи данных мы использовали функцию shiftOut(dataPin, clockPin, bitOrder, value) . Функция ничего не возвращает, а в качестве параметров ей нужно сообщить
пин Arduino, который подключен ко входу DS микросхемы (data pin),
пин Arduino, соединенный со входом SHcp (clock pin),
порядок записи битов: LSBFIRST (least significant bit first) — начиная с младшего, или MSBFIRST (most significant bit first) — начиная со старшего,
байт данных, который нужно передать. Функция работает с порциями данных в один байт, так что если вам нужно передать больше, придется вызывать ее несколько раз.
Вопросы для проверки себя
Для чего нужны микросхемы? Для чего нужен выходной сдвиговый регистр?
Как найти ножку микросхемы, на которую отправляются данные?
Что нужно сделать до и после отправки собственно данных на 74HC595?
Сколько данных можно передать с помощью shiftOut() и как управлять порядком их передачи?
Задания для самостоятельного решения
Заставьте shiftOut() отправлять биты, начиная со старшего, и измените код так, чтобы счетчик по-прежнему показывал арабские цифры.
Замените кнопку на датчик света (фоторезистор в схеме делителя напряжения) и переделайте программу так, чтобы индикатор цифрой показывал уровень освещенности.
Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Noncommercial-Share Alike 4.0 International
Производные работы должны содержать ссылку на http://wiki.amperka.ru, как на первоисточник, непосредственно перед содержимым работы.
Вики работает на суперском движке DokuWiki.
конспект-arduino/счетчик-нажатий.txt · Последние изменения: 2022/01/25 13:35 — mik
Инструменты страницы
- Показать исходный текст
- История страницы
- Ссылки сюда
- Наверх
Сборник фотографий
Расписание автобусов северного автовокзала челябинск
7520 бу маршрутка
Погода в архипо осиповке на неделю
Расписание электричек колодезная машмет
Расписание автобусов слоним 2024
Автобус 713 маршрут остановки
Погода салтыково земетчинский район пензенской области
Кубок гагарина 2023 2024 полуфинал
Шалыгин березовка
Расписание автобуса екатеринбург ревда северный автовокзал
Автовокзал автобус 28
Никольская церковь служба
Расписание автобусов котлас 2023
Заклички жаворонков для детей
Автовокзал чемал
Северный автовокзал лесной расписание
Погода неверкино на 10 дней
Тамбов расписание на автобус автовокзал северный
Расписание автобусов ровеньки
Никольская церковь телефон
Автобус 713
Расписание автобуса 736
Расписание бардымской гимназии
Церковь в одинцово
Яшалтинский район
Автобус 67 маршрут остановки и расписание
В какие дни читается молитва ефрема сирина
Автобусы сысерть екатеринбург
Расстояние от тюмени до казани
Расписание автобусов дальнереченск лдк
Лагерь дружный барнаул
Расписание электричек ростокино александров сегодня
Расписание автобусов уварово
Речные виллы конаково
Автобус екатеринбург богданович
Тюмень алания
Красавино великоустюгский район
Расписание северного автовокзала екатеринбург каменск уральский
Автовокзал северный нальчик расписание
Рассадка в автобусе
Расписание северного автовокзала челябинск
713 автобус маршрут москва
Погода хребтовый богучанского
Расписание автобусов дальнереченск
Расписание автобусов северный автовокзал буланаш
Расписание автобусов шатурторф
Биатлон уват 2024 расписание
Расписание северный автовокзал заречный
Фили голицыно расписание
Оля разумова иваново
Автобус 281
Расписание автобусов тогучин
Электричка сергиево балтийский вокзал
Во сколько начинается сухур
Дубровки храм
Красного курсанта 28
Arduino. Эксперимент 14. Счётчик нажатий
В этом эксперименте мы выводим на семисегментный индикатор количество нажатий на кнопку (единицы).
Список деталей для эксперимента
- 1 плата Arduino Uno
- 1 беспаечная макетная плата
- 1 тактовая кнопка
- 1 выходной сдвиговый регистр 74HC595
- 1 семисегментный индикатор
- 7 резисторов номиналом 220 Ом
- 24 провода «папа-папа»
Для дополнительного задания
- 1 фоторезистор
- 1 резистор номиналом 10 кОм
- еще 1 провод
Принципиальная схема
Схема на макетке
Обратите внимание
- В этом эксперименте мы впервые используем микросхему, в данном случае — выходной сдвиговый регистр 74HC595. Микросхемы полезны тем, что позволяют решать определенную задачу, не собирая каждый раз стандартную схему.
- Выходной сдвиговый регистр дает нам возможность «сэкономить» цифровые выходы, использовав всего 3 вместо 8. Каскад регистров позволил бы давать 16 и т.д. сигналов через те же три пина.
- Перед использованием микросхемы нужно внимательно изучить схему ее подключения в datasheet’е. Для того, чтобы понять, откуда считать ножки микросхемы, на них с одной стороны есть полукруглая выемка. Если мы расположим нашу 74HC595 выемкой влево, то в нижнем ряду будут ножки 1—8, а в верхнем 16—9.
- На принципиальной схеме нашего эксперимента ножки расположены в другом порядке, чтобы не вышло путаницы в соединениях. Назначения выводов согласно datasheet’у подписаны внутри изображения микросхемы, номера ножек — снаружи.
- Напомним, что на изображении семисегментного индикатора подписаны номера его ножек и их соответствие сегментам.
Скетч
p140_seven_segment_clicker.ino
#define DATA_PIN 13 // пин данных (англ. data)#define LATCH_PIN 12 // пин строба (англ. latch)#define CLOCK_PIN 11 // пин такта (англ. clock)#define BUTTON_PIN 10 int clicks =; boolean buttonWasUp =true; byte segments[10]=0b01111101, 0b00100100, 0b01111010, 0b01110110, 0b00100111, 0b01010111, 0b01011111, 0b01100100, 0b01111111, 0b01110111>; void setup() pinMode(DATA_PIN, OUTPUT); pinMode(CLOCK_PIN, OUTPUT); pinMode(LATCH_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT_PULLUP);> void loop()// считаем клики кнопки, как уже делали это раньшеif(buttonWasUp &&!digitalRead(BUTTON_PIN)) delay(10);if(!digitalRead(BUTTON_PIN)) clicks =(clicks +1)%10;> buttonWasUp = digitalRead(BUTTON_PIN);// для записи в 74HC595 нужно притянуть пин строба к земле digitalWrite(LATCH_PIN, LOW);// задвигаем (англ. shift out) байт-маску бит за битом,// начиная с младшего (англ. Least Significant Bit first) shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[clicks]);// чтобы переданный байт отразился на выходах Qx, нужно// подать на пин строба высокий сигнал digitalWrite(LATCH_PIN, HIGH);>
Пояснения к коду
- Обратите внимание, что в этом эксперименте кодировки символов отличаются от кодировок из эксперимента «Секундомер».
- Для того, чтобы передать порцию данных, которые будут отправлены через сдвиговый регистр далее, нам нужно подать LOW на latch pin (вход STcp микросхемы), затем передать данные, а затем отправить HIGH на latch pin, после чего на соответствующих выходах 74HC595 появится переданная комбинация высоких и низких уровней сигнала.
- Для передачи данных мы использовали функцию shiftOut(dataPin, clockPin, bitOrder, value) . Функция ничего не возвращает, а в качестве параметров ей нужно сообщить
- пин Arduino, который подключен ко входу DS микросхемы (data pin),
- пин Arduino, соединенный со входом SHcp (clock pin),
- порядок записи битов: LSBFIRST (least significant bit first) — начиная с младшего, или MSBFIRST (most significant bit first) — начиная со старшего,
- байт данных, который нужно передать. Функция работает с порциями данных в один байт, так что если вам нужно передать больше, придется вызывать ее несколько раз.
Вопросы для проверки себя
- Для чего нужны микросхемы? Для чего нужен выходной сдвиговый регистр?
- Как найти ножку микросхемы, на которую отправляются данные?
- Что нужно сделать до и после отправки собственно данных на 74HC595?
- Сколько данных можно передать с помощью shiftOut() и как управлять порядком их передачи?
Задания для самостоятельного решения
- Заставьте shiftOut() отправлять биты, начиная со старшего, и измените код так, чтобы счетчик по-прежнему показывал арабские цифры.
- Замените кнопку на датчик света (фоторезистор в схеме делителя напряжения) и переделайте программу так, чтобы индикатор цифрой показывал уровень освещенности.
← Секундомер | Оглавление | Комнатный термометр →
—>Arduino. Эксперимент 14. Счётчик нажатий
В этом эксперименте мы выводим на семисегментный индикатор количество нажатий на кнопку (единицы).
Как сделать счетчик для нажатий по кнопке?
Из HTML элементов понадобится кнопка и место, куда выводить значение. Например, тег
Для счётчика завести переменную. Её значение будет обновляться.
На кнопке слушать событие «click», по нему должна срабатывать функция, которая увеличит значение переменной на 1 и выведет его в HTML элемент.Как вы начнете выполнять этот план и что именно из этого плана не понятно?
Ответ написан более трёх лет назад
Neizvest @Neizvest Автор вопросаКак сам цикл записать, этот не работает —
var button = document.getElementById(«button»);button.addEventListener(‘click’, function(e) for (var i = 0;;i++)
Сергей Соколов @sergiks Куратор тега JavaScriptNeizvest, при одном вызове эта функция должна увеличить счётчик только 1 раз на 1.
i надо объявить вне функции, чтобы значение сохранялось между разными вызовами.
Попробуйте так:var button = document.getElementById("button"); var i = 0; // начальное значение button.addEventListener('click', function(e) < i = i + 1; document.getElementById("text").innerHTML = i; >);