Была задача сделать устройство для управления нагрузкой одной кнопкой при этом запоминать текущее состояние при отключении питания, а именно для включения фар автомобиля используя родную кнопку на панели приборов, обычная тактовая кнопка которая при нажатии замыкается а если отпустить то размыкается.
Порыв просторы интернета я нашёл вот такую схемку, попробовал спаять на макетной плате, но у меня она почему-то не работала, провозившись несколько часов я бросил это дело и взялся за реализацию этой задачи на микроконтроллере ATtiny13, они меня ещё не подводили.
Так как я являюсь счастливым обладателем arduino uno и уже имею опыт в программировании тиньки при помощи дуинки я взялся прикидывать как же будет выглядеть схема на микроконтроллере:
Как видите ничего сложного, несколько элементов, диод служит для защиты от переполюсовки, вот что интересно я использовал транзистор с встроенным диодом, какой был такой и взял, так вот при переполюсовке транзистор хоть и закрыт но ток через него течёт, точней через встроенный в транзистор диод.
Итак, схемку набросал и спаял быстренько:
Так как программист из меня не очень то я попросил помощи на форуме по программировании, через некоторое время мне ответили:
#include <EEPROM.h>
#define buttonPin 3
#define ledPin 0
#define address 1
bool value = 0, buttonState = 0;
void setup()
{
pinMode(ledPin, OUTPUT);
value = EEPROM.read(address);
digitalWrite(ledPin, value);
}
void loop()
{
if(digitalRead(buttonPin) && !buttonState)
{
value = !value;
EEPROM.write(address, value);
digitalWrite(ledPin, value);
buttonState = 1;
delay(100);
}
if(!digitalRead(buttonPin) && buttonState)
{
buttonState = 0;
delay(50); // защита от дребезга кнопки
}
}
Работает вот так:
Порыв просторы интернета я нашёл вот такую схемку, попробовал спаять на макетной плате, но у меня она почему-то не работала, провозившись несколько часов я бросил это дело и взялся за реализацию этой задачи на микроконтроллере ATtiny13, они меня ещё не подводили.
Так как я являюсь счастливым обладателем arduino uno и уже имею опыт в программировании тиньки при помощи дуинки я взялся прикидывать как же будет выглядеть схема на микроконтроллере:
Итак, схемку набросал и спаял быстренько:
Так как программист из меня не очень то я попросил помощи на форуме по программировании, через некоторое время мне ответили:
#include <EEPROM.h>
#define buttonPin 3
#define ledPin 0
#define address 1
bool value = 0, buttonState = 0;
void setup()
{
pinMode(ledPin, OUTPUT);
value = EEPROM.read(address);
digitalWrite(ledPin, value);
}
void loop()
{
if(digitalRead(buttonPin) && !buttonState)
{
value = !value;
EEPROM.write(address, value);
digitalWrite(ledPin, value);
buttonState = 1;
delay(100);
}
if(!digitalRead(buttonPin) && buttonState)
{
buttonState = 0;
delay(50); // защита от дребезга кнопки
}
}
Работает вот так:
В коде есть защита от дребезга так что никакой дополнительной защиты от этого неприятного момента тактовых кнопок не нужно.
Можно и обойтись без эффекта памяти, просто выбрать стандартный пример Debounce.
Файлы.
С уважением HWman.
Комментариев нет:
Отправить комментарий