Как отследить нажатие на кнопку php?
В первую очередь, Вы должны понимать, что переменные в PHP будут переинициализированы, при каждом новом запуске скрипта и то, что все переменные и значения в PHP-скрипте существуют только в тот момент, пока этот самый скрипт выполняется.
Если Вам нужно хранить значение переменной между запросами — для этого можно использовать например сессию или базу данных, или хранилище или.
Как это сделать?)
С помощью отправки формы на сервер, либо с помощью AJAX-запроса, это наиболее распространённые способы.
Ответ написан более трёх лет назад
Нравится 2 4 комментария
FaFuChEG @FaFuChEG Автор вопроса
Я не могу сделать так:
1.Нажатие на кнопку
2.Изменение значение переменной
.
Евгений Вольф @Wolfnsex Куратор тега PHP
FaFuChEG, уточните, в каком именно месте у Вас сложности или что именно нужно пояснить, т.к. я видимо не до конца понимаю Ваш вопрос. Кнопка, по умолчанию — отправляет на сервер форму (тег ), в которой она (кнопка) располагается. В этой форме соотв. Вы отправлять различные поля, значения которых в последствии можно получить в переменных $_GET и $_POST.
Stalker_RED @Stalker_RED
FaFuChEG, можете, только между вашими 1 и 2 произойдет еще много всего.
Да и перед 1 (эта кнопка не сама появится же).
А также вы наверняка захотите что-то сделать и после 2.
Immortal_pony @Immortal_pony Куратор тега PHP
Я не могу сделать так:
1.Нажатие на кнопку
2.Изменение значение переменной
.
Кратко — нет. Добро пожаловать в мир скриптовых языков.
Все работает так:
1. Пользователь вбивает в адресной строке адрес вашего сайта
2. Сервер подготавливает ответ (html). В этот момент инициализируются перемнные, им задаются значения, и т.д.
3. Сервер передает заканчивает свою работу. Все перемнные удаляются из памяти.
4. Клиент получает данные от сервера.
5. Пользователь видит html, подготовленный сервером.
Последующие действия пользователя могут инициализировать новый запрос на сервер, но тогда ВСЕ пермеменные будут инициализовваться заново.
Stalker_RED @Stalker_RED
Никак. PHP работает на сервере, и не видит что там клиент нажимает.
Браузер должен отправить запрос на сервер, обычно с POST или GET запросом (есть и другие варианты, но эти два чаще всего).
Открой учебник по HTML и почитай как устроены ссылки и формы. Или ajax.
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 3

Владислав Линник @VladikLinnik
Посерчи AJAX.
Выглядеть решение будет примерно так — при клике на кнопку идет AJAX-запрос на сервер, в data отправляешь кнопку по которой кликнул, на сервере обрабатываешь и возвращаешь в браузер.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Для каждой кнопки у вас есть имя в атрибуте name с разными названиями для трех кнопок:
На принимающей стороне проверяете эту переменную в зависимости от нее выполняете нужный блок $current.
$current = $POST[name]; (или GET)
Только вместо $current==1 впишите $current==first и т. п.
Как-то так. Давно не кодил. Должно работать, надо проверить.
Ответ написан более трёх лет назад

Евгений Николаев @nikolaevevge
К Вашему ответу добавил бы ещё что нужно тег form добавить потому что его сейчас нет
А ещё у Вас ошибка не $POST а $_POST поправьте пожалуйста.
anykey. Я не программист, я просто ленивый.
Видя отсутствие тега
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- PHP
- +2 ещё
Как вывести полное описание товара в категории Woocommerce?
- 1 подписчик
- 9 часов назад
- 17 просмотров
Button (Кнопка)
Кнопка — один из самых распространенных элементов управления в программировании. Наследуется от TextView и является базовым классом для класса СompoundButton. От класса CompoundButton в свою очередь наследуются такие элементы как CheckBox, ToggleButton и RadioButton. В Android для кнопки используется класс android.widget.Button. На кнопке располагается текст и на кнопку нужно нажать, чтобы получить результат. Альтернативой ей может служить компонент ImageButton (android.widget.ImageButton), у которого вместо текста используется изображение.
В студии кнопка представлена компонентом Button в разделе Widgets. Управлять размером шрифта, цветом текста и другими свойствами можно через атрибут textAppearance, который задействует системные стили. Выпадающий список данного свойства содержит огромный перечень вариантов. Также вы можете вручную задать конкретные индивидуальные настройки через отдельные свойства.
Если вы растягиваете кнопку по всей ширине экрана (android:layout_width=»match_parent»), то дополнительно рекомендую использовать атрибут android:layout_margin (или родственные ему layout_marginRight и layout_marginLeft) для создания отступов от краев экрана (веб-мастера знакомы с этими терминами).
Так как кнопка является наследником TextView, то использует многие знакомые атрибуты: textColor, textSize и др.
Три способа обработки событий нажатий на кнопку
Если вы разместили на экране кнопку и будете нажимать на неё, то ничего не произойдёт. Необходимо написать код, который будет выполняться при нажатии. Существует несколько способов обработки нажатий на кнопку.
Первый способ — атрибут onClick
Относительно новый способ, специально разработанный для Android — использовать атрибут onClick (на панели свойств отображается как On Click):
android:onClick="onMyButtonClick"
Имя для события можно выбрать произвольное, но лучше не выпендриваться. Далее нужно прописать в классе активности придуманное вами имя метода, который будет обрабатывать нажатие. Метод должен быть открытым (public) и с одним параметром, использующим объект View. Вам нужно выучить пять слов для создания метода, а сам метод поместить в класс (если вы ещё путаетесь в структуре Java-кода, то вставьте метод перед последней фигурной скобкой):
public void onMyButtonClick(View view) < // выводим сообщение Toast.makeText(this, "Зачем вы нажали?", Toast.LENGTH_SHORT).show(); >
Когда пользователь нажимает на кнопку, то вызывается метод onMyButtonClick(), который в свою очередь генерирует всплывающее сообщение.
Обратите внимание, что при подобном подходе вам не придётся даже объявлять кнопку через конструкцию (Button)findViewById(R.id.button1), так как Android сама поймёт, что к чему. Данный способ применим не только к кнопке, но и к другим элементам и позволяет сократить количество строк кода.
Данный способ не будет работать в фрагментах. Кнопка должна быть частью активности, а не фрагмента.
Второй способ — метод setOnClickListener()
Более традиционный способ в Java — через метод setOnClickListener(), который прослушивает нажатия на кнопку. Так как для начинающего программиста код может показаться сложным, то рекомендуется использовать подсказки студии. Вот как это будет выглядеть. Предположим, у вас на экране уже есть кнопка button. В коде вы объявляете её обычным способом:
Button button = (Button) findViewById(R.id.button);
Следующий шаг — написание метода для нажатия. Напечатайте имя элемента и поставьте точку button. — среда разработки покажет вам список доступных выражений для продолжения кода. Вы можете вручную просмотреть и выбрать нужный вариант, а можно продолжать набирать символы, чтобы ускорить процесс. Так как с нажатиями кнопок вам часто придётся работать, то запомните название его метода (хотя бы первые несколько символов) — набрав четыре символа (seto), вы увидите один оставшийся вариант, дальше можно сразу нажать клавишу Enter, не набирая оставшиеся символы. У вас появится строка такого вида:
button.setOnClickListener()
Курсор будет находиться внутри скобок и появится подсказка OnClickListener l. Начинайте набирать new OnClickListener. Здесь также не обязательно набирать имя полностью. Набрав слово Oncl, вы увидете нужный вариант и снова нажимайте Enter. В результате вы получите готовую заготовку для обработки нажатия кнопки:
button.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View v) < >>);
Теперь у вас есть рабочая заготовка и сразу внутри фигурных скобок метода onClick() вы можете писать свой код. Рекомендую потренироваться и набить руку в создании заготовки. Это не так сложно, и с практикой навык закрепится автоматически.
Как вариант, можно вынести код для OnClickListener в отдельное место, это удобно, когда кнопок на экране несколько и такой подход позволит упорядочить код. Удалите предыдущий пример и начните писать код заново. Принцип такой же, немного меняется порядок. В предыдущем примере мы сразу прописали в методе setOnClickListener слушателя new OnClickListener. с методом onClick(). Можно сначала отдельно объявить отдельную переменную myButtonClickListener:
OnClickListener myButtonClickListener = new OnClickListener() < @Override public void onClick(View v) < >>;
Во время набора активно используйте подсказки через Ctrl+Space. Набрали несколько символов у первого слова и нажимайте эту комбинацию, набрали после слова new несколько символов и снова нажимайте указанную комбинацию — заготовка будет создана за несколько секунд, а вы избежите возможных опечаток.
У нас есть готовая переменная, и теперь, когда вы будете набирать код button.setOnClickListener, то вместо new OnClickListener впишите готовую переменную.
Для новичка описание может показаться сумбурным и не понятным, но лучше самостоятельно проделать эти операции и понять механизм.
Третий способ — интерфейс OnClickListener
Третий способ является родственным второму способу и также является традиционным для Java. Кнопка присваивает себе обработчика с помощью метода setOnClickListener (View.OnClickListener l), т.е. подойдет любой объект с интерфейсом View.OnClickListener. Мы можем указать, что наш класс Activity будет использовать интерфейс View.OnClickListener.
Опять стираем код от предыдущего примера. Далее после слов extends Activity дописываем слова implements OnClickListener. При появлении подсказки не ошибитесь. Обычно первым идёт интерфейс для диалогов, а вторым нужный нам View.OnClickListener.
Название вашего класса будет подчёркнуто волнистой красной чертой, щёлкните слово public и дождитесь появления красной лампочки, выберите вариант Implement methods. Появится диалоговое окно с выделенным методом onClick. Выбираем его и в коде появится заготовка для нажатия кнопки.
@Override public void onClick(View v)
Метод будет реализован не в отдельном объекте-обработчике, а в Activity, который и будет выступать обработчиком. В методе onCreate() присвоим обработчик кнопке. Это будет объект this, т.е. текущий объект нашей активности.
button.setOnClickListener(this);
На первых порах такой способ также покажется вам сложным и непонятным. Со временем и опытом понимание обязательно придёт.
Лично я рекомендую вам использовать первый способ, как самый простой и понятный. Использование второго и третьего способа дадут вам представление, как писать обработчики для других событий, так как кнопка может иметь и другие события. Например, кроме обычного нажатия существует долгое нажатие на кнопку (long click). Один из таких примеров с методом касания я привёл в конце этой статьи.
О том, как обрабатывать щелчки кнопки я написал отдельную статью Щелчок кнопки/Счетчик ворон. Также кнопки часто будут встречаться во многих примерах на сайте. Про обработку длительный нажатий можно прочитать в статье, посвященной ImageButton.
Плодитесь и размножайтесь — это про кошек, а не про кнопки
Когда у вас одна кнопка в окне, то у вас будет один метод, две кнопки — два метода и так далее. Если у вас несколько кнопок, то не обязательно для каждой прописывать свой метод, можно обойтись и одним, а уже в самом методе разделять код по идентификатору кнопки. Если вы посмотрите на код в предыдущих примерах, то увидите, что в методе присутствует параметр View, который и позволяет определить, для какой кнопки предназначен кусок кода:
public void onMyButtonClick(View view) < switch(view.getId()) < case R.id.button1: // идентификатор "@+id/button1" showAlertDialog(); break; . >
Предположим, у вас есть три кнопки:
import android.view.View.OnClickListener; public class ButtonDemoActivity extends Activity implements OnClickListener. final Button button1 = (Button)findViewById(R.id.button1); final Button button2 = (Button)findViewById(R.id.button2); final Button button3 = (Button)findViewById(R.id.button3); // устанавливаем один обработчик для всех кнопок button1.setOnClickListener(this); button2.setOnClickListener(this); button3.setOnClickListener(this); // анализируем, какая кнопка была нажата. Всего один метод для всех кнопок @Override public void onClick(View v) < switch (v.getId()) < case R.id.button1: editText.setText("Нажата кнопка Button1"); break; case R.id.button2: editText.setText("Нажата кнопка Button2"); break; case R.id.button3: editText.setText("Нажата кнопка Button3"); break; >>
Как видите, мы сократили количество кода. Теперь у нас один обработчик onClick(), в котором прописаны действия для трёх кнопок.
Сделать кнопку недоступной
Иногда нужно сделать кнопку недоступной и активировать её при определённых условиях. Через XML нельзя сделать кнопку недоступной (нет подходящего атрибута). Это можно сделать программно через метод setEnabled():
button.setEnabled(false);
Как альтернативу можете рассмотреть атрибут android:clickable, который позволит кнопке не реагировать на касания, но при этом вид кнопки останется обычным.
Сделать кнопку плоской
Стандартная кнопка на экране выглядит выпуклой. Но в некоторых случаях желательно использовать плоский интерфейс. Раньше для этих целей можно было использовать TextView с обработкой щелчка. Но теперь рекомендуют использовать специальный стиль borderlessButtonStyle:
Кнопка сохранит своё привычное поведение, будет менять свой цвет при нажатии и т.д.
С появлением Material Design добавились другие стили, например, style=»@style/Widget.AppCompat.Button.Borderless», который является предпочтительным вариантом. Попробуйте также style=»@style/Widget.AppCompat.Button.Borderless.Colored»
Коснись меня нежно
Если вы внимательно понаблюдаете за поведением кнопки, то увидите, что код срабатывает в тот момент, когда вы отпускаете свою лапу, извините, палец с кнопки. Для обычных приложений это вполне нормально, а для игр на скорость такой подход может оказаться слишком медленным. В подобных случаях лучше обрабатывать ситуацию не с нажатием кнопки, а с его касанием. В Android есть соответствующий слушатель OnTouchListener():
Button button = (Button) findViewById(R.id.button); button.setOnTouchListener(new OnTouchListener() < @Override public boolean onTouch(View v, MotionEvent event) < if (event.getAction() == MotionEvent.ACTION_DOWN) < Toast.makeText(getApplicationContext(), "Молодой человек, не прикасайтесь ко мне!", Toast.LENGTH_SHORT).show(); >return false; > >);
У метода onTouch() есть параметр MotionEvent, позволяющий более тонко определять касания экрана. Если произойдет событие, когда пользователь коснулся экрана, то ему будет соответствовать константа ACTION_DOWN. Соответственно, если пользователь уберёт палец, то нужно использовать константу ACTION_UP. Таким образом, можете расценивать щелчок кнопки как комбинацию двух событий — касания и отпускания.
К сожалению, на сегодняшний день в Android нет метода Погладить. Коты недовольны.
Получить текст с кнопки
Навеяно вопросом с форума. Задача — получить текст кнопки в методе onClick(). У метода есть параметр типа View, у которого нет метода getText(). Для этого нужно привести тип к типу Button.
public void onClick(View view)
Если у вас несколько кнопок привязаны к методу onClick(), то щелчок покажет текст нажатой кнопки.
Дополнительное чтение
SwipeButton — кнопка с поддержкой свайпа
Кнопка
Кнопки очень часто используются в электронике. На первый взгляд, работа с ними не таит сюрпризов, но и тут есть «подводные камни».
Хотя у кнопки есть четыре ножки, фактически можно рассматривать их два участка цепи, который замыкается сверху. Следите за правильностью подключения, чтобы цепь была корректной.

Подключим кнопку без использования контроллера, пропустив ток из 5V. При нажатии кнопки цепь замкнётся и светодиод будет светиться. Ничего неожиданного.

В реальности нам нужно считывать сигнал с кнопки и реагировать на него. Поэтому попробуем изменить схему. Соединим один вывод кнопки с питанием и выводом 3 на плате. С вывода 3 мы будем считывать информацию: логический ноль или логическая единица. При нажатии на кнопку цепь замыкается, на выводе 3 будет логическая единица и мы включим светодиод.

int buttonPin = 12; int ledPin = 3; void setup() < pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); >void loop()
Код прекрасно работает при нажатии кнопки. А когда мы отпускаем кнопку и создаём разрыв в цепи, то возникает проблема. Вывод 12 становится свободным и висит в неопределённом состоянии в режиме INPUT (вспоминаем урок про цифровые выводы). В результате мы получаем случайные значения и светодиод то включается, то выключается от наводок.
Чтобы избежать этой проблемы, можно добавить резистор от 10 до 100 кОм и прижать кнопку к земле. В этом случае цепь будет замкнута даже при отпущенной кнопке. В этом случае резистор называют стягивающим (pull down). Это рабочая схема, которую можно использовать в учебной программе.
Несмотря на рабочую схему с стягивающим резистором, мы получаем проблему при работе со сложным проектом. Дело в том, что возможна ситуация, когда многие устройства в схеме используют разные значения питания. И тогда придётся к каждой кнопке устройства подавать свой отдельный стягивающий резистор. На практике принято подключаться не к питанию, а к земле, которая всегда одинакова и равно 0. В этом случае сам резистор следует подключить к питанию — подтянуть. Резистор в этом случае является подтягивающим (pull up). Правда, при этом возникает другая проблема — поведение светодиода изменилось противоположным образом — при нажатии светодиод выключается, а при отпускании — включается. Решается проблема просто — меняем одну строчку кода.
digitalWrite(ledPin, !val);
Мы просто меняем значение переменной на противоположное. Это стандартный подход при работе с кнопкой. Теперь вам будет легче разобраться с примерами из Arduino IDE.
Стоит отметить, что у платы Arduino у выводов уже есть встроенные подтягивающие резисторы (кроме вывода 13) и мы можем убрать внешний резистор. Но тогда надо также явно указать использование данного резистора через код с параметром INPUT_PULLUP.
int buttonPin = 12; int ledPin = 3; void setup() < pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT_PULLUP); >void loop()
01.Basics: DigitalReadSerial (Чтение цифрового вывода)
Изучим пример DigitalReadSerial из File | Examples | 01.Basics.
Мы изучили, как правильно подключать кнопку и можем изучать встроенные примере. Будем считывать сигнал, идущий с цифрового вывода при нажатии кнопки.
Приблизительно собранная схема может выглядеть следующим образом:

Вкратце опишу на словах данную схему. Вставляем в центре макетной платы кнопку таким образом, чтобы между парными ножками проходил жёлоб макетной платы. Далее соединяем перемычками питание 5V и землю GND на Arduino с рельсами на макетной плате. Потом соединяем перемычкой цифровой вывод под номером 2 на Arduino с одной ножкой кнопки на макетной плате. Эту же ножку кнопки, но с другой стороны соединяем с резистором, который выполняет роль стягивающего резистора. После чего сам резистор соединяем с землёй. Третью ножку кнопки соединяем к положительной рельсе на макетной плате. Осталось только соединить между собой боковые рельсы на макетной плате, и мы готовы изучать новый пример.
Кнопка выполняет очень важную функцию — она замыкает цепь при нажатии. Когда кнопка не нажата, то ток не проходит между ножками кнопки, и не можем поймать сигнал с цифрового вывода под номером 2. Поэтому состояние вывода определяется системой как LOW или 0. При нажатии на кнопку его две ножки соединяются, позволяя току пройти от питания к цифровому выводу 2, а система считывает проходящий сигнал как HIGH или 1.
Разберём код по кусочкам
// Второй вывод связан с кнопкой int pushButton = 2; void setup() < Serial.begin(9600); pinMode(pushButton, INPUT); >void loop() < int buttonState = digitalRead(pushButton); Serial.println(buttonState); delay(1); // задержка для стабильности >
В функции setup() устанавливаем связь с портом для считывания данных на скорости 9600 бит в секунду с Arduino на ваш компьютер: Serial.begin(9600).
Вторая строчка нам уже знакома, но здесь теперь используется параметр INPUT — мы устанавливаем второй цифровой вывод на режим чтения данных, поступающих с кнопки: pinMode(pushButton, INPUT);
В цикле считываем поступающую информацию. Для начала нам понадобится новая переменная buttonState, которая будет содержать значения 0 или 1, поступающие от функции digitalRead().
Чтобы мы могли видеть поступающую информацию, нужно вывести получаемые результаты в окно Serial Monitor при помощи команды println().
Для большей стабильности при чтении данных установим минимальную задержку.
Если вы сейчас запустите программу и откроете также окно Serial Monitor (меню Tools | Serial Monitor), то на экране увидите бесконечные нули. Программа постоянно опрашивает состояние нашей конструкции и выводит результат — отсутствие тока. Если нажать на кнопку и удерживать её, то увидите, что цифры сменяются с 0 на 1. Значит в нашей цепи появился ток и информация изменилась.
02.Digital: Button
Работа с кнопкой рассматривается также в примере File | Examples | 02.Digital | Button. Кнопка соединяется с выводом 2, а светодиод с выводом 13. К кнопке также следует подвести питание и землю через резистор на 10K. Сам принцип работы остался без изменений. Только на этот раз мы не будем выводить информацию о состоянии кнопки на экран, а будем включать светодиод. Такой вариант более наглядный. При нажатии и отпускании кнопки встроенный светодиод должен загораться или гаснуть.

const int buttonPin = 2; // вывод для кнопки const int ledPin = 13; // вывод для светодиода int buttonState = 0; // статус кнопки - нажата или отпущена void setup() < // режим вывода для светодиода pinMode(ledPin, OUTPUT); // режим ввода для кнопки pinMode(buttonPin, INPUT); >void loop() < // считываем состояние кнопки buttonState = digitalRead(buttonPin); // если кнопка нажата, то её состояние HIGH: if (buttonState == HIGH) < // включаем светодиод digitalWrite(ledPin, HIGH); >else < // иначе выключаем светодиод digitalWrite(ledPin, LOW); >>
Допустим, мы хотим изменить поведение — если кнопка не нажата — светодиод горит, а при нажатии — светодиод не горит. Достаточно изменить одну строчку кода.
if (buttonState == LOW)
А теперь загадка! Вы загрузили первый вариант скетча на плату, и вдруг ваш компьютер сломался. Вы не можете отредактировать скетч, чтобы использовать второй вариант. Как можно выйти из положения?
Нужно поменять полярность цепи! Провод от резистора, который на землю, нужно воткнуть в 5V, а провод, который шёл из 5V к кнопке, перекинуть на землю. При включении ток пойдёт из питания на вывод 2 без всяких помех и будет получено значение HIGH. При нажатии кнопки получится другая цепь, и вывод 2 останется без питания.
02.Digital: StateChangeDetection
В примере File | Examples | 02.Digital | StateChangeDetection идёт подсчёт щелчков кнопки и состояние кнопки (включён или выключен). Схема осталась прежней. Кнопка соединяется с выводом 2, а светодиод с выводом 13 (можно использовать встроенный). К кнопке также следует подвести питание и стягивающий резистор к земле на 10K.
const int buttonPin = 2; // кнопка на выводе 2 const int ledPin = 13; // светодиод на выводе 13 int buttonPushCounter = 0; // счётчик нажатия кнопки int buttonState = 0; // текущее состояние кнопки int lastButtonState = 0; // предыдущее состояние кнопки void setup() < // устанавливаем режим ввода для кнопки pinMode(buttonPin, INPUT); // устанавливаем режим вывода для светодиода pinMode(ledPin, OUTPUT); // включаем последовательную передачу данных Serial.begin(9600); >void loop() < // считываем показания с вывода кнопки buttonState = digitalRead(buttonPin); // сравниваем состояние с предыдущим состоянием if (buttonState != lastButtonState) < // если состояние изменилось, увеличиваем счётчик if (buttonState == HIGH) < // если текущее состояние HIGH, значит кнопка включена buttonPushCounter++; Serial.println("on"); Serial.print("number of button pushes: "); Serial.println(buttonPushCounter); >else < // если текущее состояние LOW, значит кнопка выключена Serial.println("off"); >// небольшая задержка для устранения эффекта дребезга delay(50); > // сохраняем текущее состояние как последнее состояние для следующего раза lastButtonState = buttonState; // включаем светодиод при каждом четвёртом нажатии, проверяя деление по остатку счётчика нажатий if (buttonPushCounter % 4 == 0) < digitalWrite(ledPin, HIGH); >else < digitalWrite(ledPin, LOW); >>
02.Digital: Debounce (Дребезг)
У кнопок существует такой эффект, как «дребезг». При замыкании и размыкании между пластинами кнопки возникают микроискры, провоцирующие до десятка переключений за несколько миллисекунд. Явление называется дребезгом (англ. bounce). Это нужно учитывать, если необходимо фиксировать «клики». Поэтому первичным показаниям верить нельзя. По этой причине часто в скетчах делают небольшую задержку, а уже потом считывают показания. В обычном состоянии, когда мы не нажимаем кнопку или держим кнопку нажатой, эффекта дребезга не наблюдается. Иногда для этих целей в учебных примерах используют функцию delay(), но на практике следует использовать функцию millis(), как в примере File | Examples | 02.Digital | Debounce. Схема подключения остаётся без изменений.
const int buttonPin = 2; // кнопка на выводе 2 const int ledPin = 13; // светодиод на выводе 13 int ledState = HIGH; // текущее состояние светодиода int buttonState; // текущее состояние вывода для кнопки int lastButtonState = LOW; // предыдущее состояние вывода для кнопки // используем тип без знака, чтобы использовать большие числа unsigned long lastDebounceTime = 0; // последнее время unsigned long debounceDelay = 50; // задержка, увеличьте в случае необходимости void setup() < pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, ledState); >void loop() < // считываем состояние кнопки int reading = digitalRead(buttonPin); // если нажали кнопку, // то немного ожидаем, чтобы исключить дребезг // если состояние изменилось (дребезг или нажатие) if (reading != lastButtonState) < // сбрасываем таймер lastDebounceTime = millis(); >if ((millis() - lastDebounceTime) > debounceDelay) < // whatever the reading is at, it's been there for longer than the debounce // delay, so take it as the actual current state: // если состояние кнопки изменилось if (reading != buttonState) < buttonState = reading; // переключаем светодиод, если новое состояние кнопки стало HIGH if (buttonState == HIGH) < ledState = !ledState; >> > // устанавливаем светодиод digitalWrite(ledPin, ledState); // сохраняем состояние кнопки. В следующий раз в цикле это станет значением lastButtonState: lastButtonState = reading; >
02.Digital: DigitalInputPullup (Встроенный подтягивающий резистор)
У цифровых выводов уже есть резисторы на 20 кОм, которые можно использовать в качестве подтягивающих при работе с кнопками. Рассмотрим пример File | Examples | 02.Digital | DigitalInputPullup.
Схема подключения — соединим первый вывод кнопки с выводом 2 на плате, а второй вывод кнопки с выводом GND. Во время работы скетча будем считывать показания второго вывода.

void setup() < Serial.begin(9600); // настроим вывод 2 на режим ввода и включим встроенный подтягивающий резистор pinMode(2, INPUT_PULLUP); pinMode(13, OUTPUT); // светодиод >void loop() < // снимаем показания кнопки int sensorVal = digitalRead(2); // выводим в Serial Monitor Serial.println(sensorVal); // Помните, что при использовании подтягивающего к питанию резистора, состояние кнопки инвертировано // В не нажатом состоянии кнопка имеет значение HIGH, и LOW при нажатии. // При нажатии на кнопку включим светодиод, при отпускании - выключим if (sensorVal == HIGH) < digitalWrite(13, LOW); >else < digitalWrite(13, HIGH); >>
Если запустить скетч, то увидим, что на монитор выводятся числа 1 (HIGH). При нажатии на кнопку значения поменяются на 0 (LOW).
Курсы javascript
То есть не при нажатии, а просто в куске кода на жаваскрипте. Что-нибудь типа IsKeyDown(); ?
26.01.2010, 14:12
Регистрация: 04.04.2008
Сообщений: 6,245
стандартными средствами нет
но очевидно же как это написать:
26.01.2010, 14:39
Кандидат Javascript-наук
Регистрация: 03.11.2008
Сообщений: 116
Ох, как-то очень сложно. Может быть можно тогда при клике по ссылке как-то проверять нажат ли Shift или Ctrl? В смысле, чтобы код бы попроще. А то я не понимаю просто.
26.01.2010, 14:52
Регистрация: 04.04.2008
Сообщений: 6,245
при нажатии ссылки с любой зажатой кнопкой, выводится надпись о том какая кнопка была зажата, или же нет
