Ограничить количество нажатий на кнопку.
- Войдите на сайт для отправки комментариев
Пнд, 08/01/2018 - 14:42
Подскажите пожалуйста, как ограничить количество нажатий на кнопку. Например 5 раз нажали и больше ардуинка на нее не реагирует до перезапуска.
// Circuit settings #define IR_PIN 3 #define BTN_PIN 8 // Frequency calculations // carrier frequency: f = 56000 Hz // wave period: T = 1/f = 17.86 µs // half cycle period: T/2 = 8.93 µs // assuming carrier_interval_delay + instructions_delay = T/2 #define CARRIER_INTERVAL 4 // adjusted experimentally // MilesTag definitions // carrier off space: 600 µs // header pulse: 2400 µs // bit0 pulse: 600 µs // bit1 pulse: 1200 µs #define MLT_SPACE_INTERVAL 600 // header cycle count: 2400 / 17.86 = 134.3 #define MLT_HEADER_CYCLES 128 // adjusted experimentally // bit0 cycle count: 600 / 17.86 = 33.6 #define MLT_BIT0_CYCLES 32 // adjusted experimentally // bit1 cycle count: 1200 / 17.86 = 67.2 #define MLT_BIT1_CYCLES 64 // adjusted experimentally void setup() { pinMode(IR_PIN, OUTPUT); pinMode(BTN_PIN, INPUT); digitalWrite(BTN_PIN, HIGH); Serial.begin(9600); Serial.println("Ready..."); } void loop() { boolean btnPressed = digitalRead(BTN_PIN) == LOW; if ( btnPressed ) { fire(); delay(200); } delay(10); } void fire() { Serial.println("Fire!"); sendHeader(); sendByte(0x83); sendByte(0x05); sendByte(0xE8); } void sendHeader() { sendPulse(MLT_HEADER_CYCLES); delayMicroseconds(MLT_SPACE_INTERVAL); } void sendByte(byte x) { for(int i=0; i<8; i++) { if (x & 0x80) { sendPulse(MLT_BIT1_CYCLES); } else { sendPulse(MLT_BIT0_CYCLES); } x = x << 1; delayMicroseconds(MLT_SPACE_INTERVAL); } } void sendPulse(int cycles) { for (int i=0; i<cycles; i++ ) { digitalWrite(IR_PIN, HIGH); delayMicroseconds(CARRIER_INTERVAL); digitalWrite(IR_PIN, LOW); delayMicroseconds(CARRIER_INTERVAL); } }
Добавить счетчик нажатий :) .
Например:
Не выходит (
Я бы слово static в начало третьей строки добавил.
Великолепно, спасибо большое все работает. Последний вопрос откуда взять значения для вывода на сигментный дисплей склько осталось нажатий.
Вычитаете из максимально разрешенного количества нажатий значение переменной btnCounter
Великолепно
та хренли великолепного? Мужики, я с Вас офигеваю.
- Памагите!
- дали кусок кода, вставил - не заработало
- Памагите!
- подсказали как поправить
- Великолепно!
потребовалось "из пяти два вычесть"
- Памагите!
Блин, где вытаскивание печёнки на тему, "а что в это коде написано?" и "что означает волшебное слово статик, которое всё разрулило?" Ни хрена ведь ведь не понял, вставил чужой код как мартышка и тут же
Последний вопрос
Ни хрена ведь не последний, потому что понимать что-то ты даже не пытаешься. А вставлять чужие коды не понимая ... через час потребуется что-то ещё. И снова будет "памагите!"
Учитесь же, мужики, ну чего как обезьяны, правда?
Я прекрасно понимаю что это так и выглядит, но с програмированием у меня проблемма. Когда то давно в школе в старших классах увлекался. И насчет всего что подсказывали я уже начился и все сообразил). Вычитать из макс значения и отображать на дисплее не проблема. Тут проблема глобальней, дело в том что ограниченное число нажатий будет динамичным, оно будет програмироваться при помощи кнопки. Спросил тупо потому что мб что то другое подсказали бы.
Тут проблема глобальней, дело в том что ограниченное число нажатий будет динамичным, оно будет програмироваться при помощи кнопки.
Нет тут проблемы. Просто добавляете в программу ещё одну переменную (например btnMaxCounter), в которой будет храниться макс. число нажатий. Значение этой переменной по ходу программы можно "програмировать при помощи кнопки".
Для отображения на дисплее - из переменной с макс. числом нажатий нужно вычесть переменную с текущим числом нажатий: val = btnMaxCounter - btnCounter
Также в условии if будем проверять не btnCounter < 5, а btnCounter < btnMaxCounter
Какой ауенно полезный код....
У меня такой вопрос. Допустим имеется две кнопки и число(int, byte или другого целого типа). Нужен простой алгоритм чтобы задействуя эти кнопки можно было увеличивать число на 1,10,100. Думаю одной кнопкой такое не возможно, поэтому предлагая на двух.
Думаю организовать счетчик нажатий или чтото типа. Чтобы одна увеличивала число, а другая задавала предел(1,10...)
Необязательно две кнопки. Нажал и отпустил - увеличился счетчик. Нажал и подержал более, например, двух секунд не отпуская (время по вкусу) - увеличился предел.
А Вы никогда видели устройств в которых нажмёшь на кнопку, онс сначала медленно что-то увеличивает, потом быстрее, потом ещё быстрее. Вот и Вам так надо. Первые раз 5 на 1, потом раз пять на 10, потом, если всё ещё не отпусакют) уже на сто. Всё одной кнопкой делается и человеку такой подход понятен.
Не, предлагаю минимум 4 кнопки, чо уж мелочиться: на одну нажимаем - увеличиваем на 1, на другую - уменьшаем на 1, на третью - увеличиваем на 5, на четвёртую - уменьшаем на пять, ну и далее по списку :) :) :)
Если кнопка при включении зажата (>2сек) то выполнить код1, если нет то код2. Но у меня всегда срабатывает если зажата >2сек. Есть всего 1 кнопка. Как задать что бы именно при включении, допустим в первые 3 сек работало условие. ?
Если кнопка при включении зажата (>2сек) то выполнить код1, если нет то код2. Но у меня всегда срабатывает если зажата >2сек. Есть всего 1 кнопка. Как задать что бы именно при включении, допустим в первые 3 сек работало условие. ?
Ну, а я что говорил?
Тот вопрос был НЕ последний. И не будет последнего пока ты кричишь "Великолепно", когда что-то непонятное волшебным образом заработало. Если не разобрался, то ничего великолепного нет. А желания разбираться за тобою замечено не было :(
Меня не интересует как прописать условие, какой код впихнуть в него. Я не могу понять как ограничить время работы условия.
Зачем тогда форумы?
Зачем тогда форумы?
А сам-то как думаешь? Неужели, люди собрались на форуме исключительно для того, чтобы рассказывать тебе как посчитать нажатия, как вычесть количество нажатий из максимального и как "ограничить время работы условия"? Вот именно для этого тут люди собрались и больше им заняться решительно нечем? Когда же они все так тебе задолжать-то успели?
Форума для общения по интересам! Люди с общими интересами общаются потому, что им интересно общаться.
Я тебе уже говорил, учись, а не задавай тупые вопросы по каждому чиху. Тогда с тобой будет интересно общаться и люди будут это делать. Пока же от тебя слышно только "памагите" по нескольку раз на дню. Ты ведь ни разу не спросил "что почитать?", и ни разу не спросил "как работает?" то, чтебе подсказали. Вбил как мартышка - заработало и "великолепно", можно следующий тупой вопрос задавать. Причём, вопросы то действительно тривиальные, которые может освоить любой школьник, которому не лень просто почитать какую-нибудь книжку. Ты, думаешь, кому-то интересно отвечать на тупые вопросы? Ты правда так думаешь?
Что почитать (я весь день читаю), как работает понимаю, я не знаю синтаксис (если я правильно выразился)
Синтаксис? Причём тут синтаксис, если ты задаёшь вопросы про совершенно тривиальные алгоритимческие действия, которых не можешь придумать сам! Синтаксис ту не при делах вовсе.
Впрочем, мне пофиг чего ты не знаешь, я уже говорил, это место общения по интересам, а с тобой неинтересно (пока).
Не хочешь слушать, что тебе советуют - не слушай, мы все свободные люди.
А Вы никогда видели устройств в которых нажмёшь на кнопку, онс сначала медленно что-то увеличивает, потом быстрее, потом ещё быстрее. Вот и Вам так надо. Первые раз 5 на 1, потом раз пять на 10, потом, если всё ещё не отпусакют) уже на сто. Всё одной кнопкой делается и человеку такой подход понятен.
Что ж, подумаю над этим. Позже прикреплю код
Вполне рабочий код, воспользовался советом ЕвгенийП и rygoravich, им отдельное спасибо. Теперь также соглашусь что для этого одной кнопки вполне достаточно.
Отлаживал на LCD 4 строки, поскольку не избавился от паразитной delay
Можете мне подсказать еще с одним моментом. Если я в свой код добавлю еще одно число i1(тоже целого типа) и задействую еще одну кнопку (пин 8). И захочу например по нажатию на эту кнопку выбирать число над которым собираюсь производить операции(+1,10...) кнопкой(на 9 пине). Тут я думаю одним if не обойдется поскольку хочу мониторить эти два числа на дисплее и чтобы изменение одного никак не отражалось на другом
Выложен код
Временно сократил код чтобы не мозолил глаза, может кто нибудь сталкивался с подобным. Как сделать чтобы по нажатию кнопки на 8 пине в переменную chislo записывалось первое chislo_One, затем по повторному нажатию второе chislo_Two, затем снова chislo_One ...
.
Как сделать чтобы по нажатию кнопки на 8 пине в переменную chislo записывалось первое chislo_One, затем по повторному нажатию второе chislo_Two, затем снова chislo_One ...
Завести флаг, который бы инвертировался при каждом нажатии кнопки, и если флаг в одном состоянии, то в chislo пишем chislo_One, если в другом - то chislo_Two.
-----
Зачем вы задаете один и тот же вопрос в разных темах? Их же все-равно читают одни и те же люди.