Тицяти не пере тицяти)
Кнопковий перемикач – найпростіший і найдоступніший з усіх видів датчиків. Натиснувши на нього, ти подаєш контролеру сигнал і, як наслідок, виникає певна дія, наприклад: вмикання світлодіоду, відтворення звуку, обертання певного рухомого механізму тощо.
Розділимо кнопки на дві великі групи:
- Кнопки перемикачі із фіксацією. Вони фіксуються у положенні, в якому їх залишили;
- Кнопки без фіксації (тактові). Вони повертаються у початковий стан після того, як їх відпустили.
Крім цього, існують кнопки з фіксацією, що працюють як кнопка на кульковій ручці: один раз натиснули - ланцюг замкнувся, другий раз - розірвався.
Розрізняють наступні стани контактів кнопки:
розімкнені контакти не з'єднані, коли кнопка знаходиться в положенні “відпущено”;
замкнуті контакти з'єднані, коли кнопка знаходиться в положенні “відпущено”.
У повсякденному житті ти, без сумнівів, часто зустрічаєшся з механізмами, натискання яких призводить до виконання необхідної задачі.
Тактові кнопки можна знайти практично в кожному електронному приладі: на клавіатурі комп'ютера, у телефоні, на пульті від телевізора тощо. Після закінчення події натискання, механізм повертається в своє початкове положення.
Прикладом кнопки з фіксацією може бути перемикач світла. При натисканні об’єкт залишається у заданому положенні.
При замиканні та розмиканні між пластинами кнопки виникають мікро-іскри, що провокують близько десятка перемикань за декілька мілісекунд. Це явище називається ефектом брязкоту, який необхідно враховувати, якщо поставлено задачу фіксувати або рахувати кожне натискання.
Надзвичайно легко змінювати поточний колір світлодіоду натискаючи та відпускаючи тактову кнопку. Сигнал 1 – червоний, сигнал 0 – зелений. Спробуй написати програму, при якій один повний натиск (натиснути та відпустити кнопку) відповідає за один колір, другий повний натиск – за інший. Після цього, алгоритм повторюється, тобто наступний натиск (третій) знову встановлює перший колір.
bool Bool = false;
void setup(){
pinMode(5, INPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
void loop()
{
if (digitalRead(5)){
if (Bool){
Bool = LOW;
}
else{
Bool = HIGH;
}
delay(500);
}
if (Bool){
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
}
else{
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
}
}