пятница, 9 мая 2014 г.

Включение/отключение одной кнопкой ATtiny13 с запоминанием

Была задача сделать устройство для управления нагрузкой одной кнопкой при этом запоминать текущее состояние при отключении питания, а именно для включения фар автомобиля используя родную кнопку на панели приборов, обычная тактовая кнопка которая при нажатии замыкается а если отпустить то размыкается.

Порыв просторы интернета я нашёл вот такую схемку, попробовал спаять на макетной плате, но у меня она почему-то не работала, провозившись несколько часов я бросил это дело и взялся за реализацию этой задачи на микроконтроллере 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.

Комментариев нет:

Отправить комментарий