Для чего нужен счетчик нажатий
Перейти к содержимому

Для чего нужен счетчик нажатий

  • автор:

Эксперимент 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 бу маршрутка

7520 бу маршрутка

Погода в архипо осиповке на неделю

Расписание электричек колодезная машмет

Расписание автобусов слоним 2024

Расписание автобусов слоним 2024

Автобус 713 маршрут остановки

Погода салтыково земетчинский район пензенской области

Кубок гагарина 2023 2024 полуфинал

Кубок гагарина 2023 2024 полуфинал

Шалыгин березовка

Расписание автобуса екатеринбург ревда северный автовокзал

Автовокзал автобус 28

Никольская церковь служба

Расписание автобусов котлас 2023

Заклички жаворонков для детей

Автовокзал чемал

Северный автовокзал лесной расписание

Погода неверкино на 10 дней

Тамбов расписание на автобус автовокзал северный

Расписание автобусов ровеньки

Никольская церковь телефон

Автобус 713

Расписание автобуса 736

Расписание бардымской гимназии

Церковь в одинцово

Яшалтинский район

Автобус 67 маршрут остановки и расписание

Автобус 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) — начиная со старшего,
    • байт данных, который нужно передать. Функция работает с порциями данных в один байт, так что если вам нужно передать больше, придется вызывать ее несколько раз.

    Вопросы для проверки себя

    1. Для чего нужны микросхемы? Для чего нужен выходной сдвиговый регистр?
    2. Как найти ножку микросхемы, на которую отправляются данные?
    3. Что нужно сделать до и после отправки собственно данных на 74HC595?
    4. Сколько данных можно передать с помощью shiftOut() и как управлять порядком их передачи?

    Задания для самостоятельного решения

    1. Заставьте shiftOut() отправлять биты, начиная со старшего, и измените код так, чтобы счетчик по-прежнему показывал арабские цифры.
    2. Замените кнопку на датчик света (фоторезистор в схеме делителя напряжения) и переделайте программу так, чтобы индикатор цифрой показывал уровень освещенности.

    ← Секундомер | Оглавление | Комнатный термометр →

    —>Arduino. Эксперимент 14. Счётчик нажатий

    В этом эксперименте мы выводим на семисегментный индикатор количество нажатий на кнопку (единицы).

    Как сделать счетчик для нажатий по кнопке?

    0xD34F

    Из HTML элементов понадобится кнопка и место, куда выводить значение. Например, тег

    Для счётчика завести переменную. Её значение будет обновляться.
    На кнопке слушать событие «click», по нему должна срабатывать функция, которая увеличит значение переменной на 1 и выведет его в HTML элемент.

    Как вы начнете выполнять этот план и что именно из этого плана не понятно?

    Ответ написан более трёх лет назад
    Neizvest @Neizvest Автор вопроса

    Как сам цикл записать, этот не работает —
    var button = document.getElementById(«button»);

    button.addEventListener(‘click’, function(e) for (var i = 0;;i++)
    Сергей Соколов @sergiks Куратор тега JavaScript

    Neizvest, при одном вызове эта функция должна увеличить счётчик только 1 раз на 1.
    i надо объявить вне функции, чтобы значение сохранялось между разными вызовами.
    Попробуйте так:

    var button = document.getElementById("button"); var i = 0; // начальное значение button.addEventListener('click', function(e) < i = i + 1; document.getElementById("text").innerHTML = i; >);

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *