Дошел до 10 эксперимента: http://wiki.amperka.ru/конспект-arduino:кнопочный-переключатель Столкнувшись до него с экспериментами содержащие кнопки, решил оставить как есть. Но дойдя до 10 не сдержался и хочу узнать почему именно так оно работает. Именно что, сейчас буду вводить в курс дела. Когда с пина мы отправляем сигнал для светодиода то пишем: digitalWrite(13,HIGH); //шлем максимальный сигнал Но почему когда подключена кнопка. Когда она не нажата, при чтении пина: digitalRead(7); //выдает HIGH - высокий сигнал, с чего это он высокий если нет контакта с землей. Когда нажата выдает LOW - низкий сигнал. Для понятного примера: http://arduino.ru/Reference/DigitalRead этот код при практике выдает такие результаты: кнопка отпущена - светодиод горит кнопка зажата - светодиод не горит Конечно я могу запомнить и так, но зачем это сделано путая человека что при чтении HIGH и LOW означает одно значение, а при записи другое?
Используйте подтягивающий резистор и почитайте про дребезг контактов и библиотеку Bounce: Код (Text): //------------------------------------------------------------------------------------------------- //Подключение библиотек //------------------------------------------------------------------------------------------------- #include <Bounce2.h> Bounce debouncer = Bounce(); //Класс для обработки кнопки int buttonState; unsigned long buttonPressTimeStamp; const int ButtonPin=10; void setup() { pinMode(ButtonPin,INPUT); debouncer.attach(ButtonPin); debouncer.interval(5); } void loop() { boolean changed = debouncer.update(); if (changed) { int value = debouncer.read(); if (value == HIGH) { buttonState = 0; Serial.println("Кнопка нажата"); } else { buttonState = 1; Serial.println("Кнопка отжата"); buttonPressTimeStamp = millis(); } } }
Да bounce как раз и написана для этого. Картинку в инете нашел. Софт есть и причем шикарный называется fritzing