Хорошая кнопочка. Если есть возможность то очень хотелось бы чтобы самоотключалась минут через пять, бывает забудешь выключить и итог - новая крона( ещё на микрочиповском 12F629 или 10F200 Все девайсы бы оснастил !!!
Хотелось бы интервал хотя бы минут 20 задать.. а также алгоритм вкл./выкл. подкорректировать - пару секунд удерживаем кнопку для включения, и просто кратковременно нажимаем - для выключения..
Хотелось бы интервал хотя бы минут 20 задать.. а также алгоритм вкл./выкл. подкорректировать - пару секунд удерживаем кнопку для включения, и просто кратковременно нажимаем - для выключения..
а если так - сколько секунд держишь - *10 работа , а потом отключение ... вовсе бы приборы поставил.
Я тоже присоединяюсь к предыдущей просьбе. Хотелось бы интервал хотя бы минут 20 задать.. а также алгоритм вкл./выкл. подкорректировать - пару секунд удерживаем кнопку для включения, и просто кратковременно нажимаем - для выключения..
Щас зделаю.
Добавлено (29.11.2014, 17:26) --------------------------------------------- Тока не догоняю что нужно какие 20 минут?
Попробую поднять тему. Пробую использовать предоставленный здесь код для вкл\выкл нагрузки но с возможностью определить подключена она, или нет. PB0 - выход (светодиод) PB1 - вход (кнопка), PB2 - выход (устройство), PB3 - резерв на ADC (подключено к аккумулятору) PB4 - определение нагрузки
// Input/Output Ports initialization // Port B initialization DDRB = (1<<PINB0)|(0<<PINB1)|(1<<PINB2)|(0<<PINB3)|(0<<PINB4); // PB0 - выход (светодиод), PB1 - вход (кнопка), PB2 - Enable IC, PB3 - резерв на ADC , PB4 - перемычки PORTB = (1<<PINB1)|(1<<PINB4); // подтягивающий резистор на кнопке и перемычке
GIMSK |=(1<<INT0); MCUCR=0b00110000; //режим power down GIFR |=(1<<INTF0);
#asm("sei") #asm("sleep")
while (1) { if(PINB.1==0){ // если нажать кнопку, то сработает прерывание, и с каждым проходом инкрементируем переменную scan++; delay_ms(30); //задержка для одного прохода. Можно регулировать время } if(PINB.1==1){ delay_ms(10); //если кнопка отпущена, то разрешаем прерывание и идем спать scan=0; GIMSK |=(1<<INT0); GIFR |=(1<<INTF0); #asm("sei") #asm("sleep") } if(scan>=100){ // можно тоже регулировать время. В данном случае 3 сек. (30мс*100проходов=3000мс) scan=0; if(PORTB.4==0){ // проверка подключена ли нагрузка PORTB.0=1; delay_ms(1000); // задержка PORTB.0=0; PORTB.2=1; } else{ PORTB.2=0; PORTB.0=0; delay_ms(200); // задержка PORTB.0=1; delay_ms(200); // задержка PORTB.0=0; delay_ms(200); // задержка PORTB.0=1; delay_ms(200); // задержка PORTB.0=0; delay_ms(200); // задержка PORTB.0=1; delay_ms(200); // задержка PORTB.0=0; delay_ms(200); // задержка PORTB.0=1; delay_ms(200); // задержка PORTB.0=0; delay_ms(200); // задержка
} } } }
Логика работы по идеи следующая.
устройство спит При нажатии на кнопку PB1 просыпается и начинает считать счетчик Если нажатие было коротким, опрашивает PB3 (ADC3) и мигает светодиодом PB0 в зависимости заряда аккумулятора (li-ion от 3В до 4.2В) и снова засыпает. (дополнительная функция. пока даже не приступал к реализации) Если нажатие длинное, проверяет PB4 (если нагрузка подключена, будет 0, если выключена, то 1) (вот это часть почему-то не работает.) При 0 мигает светодиодом (включение) и выставляет 1 на PB2 При 1 мигает светодиодом (ошибка) и 0 на PB2 и дальше сон. При включенном PB2 повторное короткое нажатие на PB1 проверяет ADC3, мигает светодиодом уровень заряда аккумулятора. При включенном PB2 повторное длинное нажатие на PB1 индикация светодиодом (выключение) и выключается PB2 устройство засыпает. При отключении нагрузки PB4, выключение PB2, индикация светодиодом (ошибка) и дальше сон
Но что-то у меня пока не получается с определением нагрузки, подскажете в чем может быть проблема?
msmmmm, В разъеме при подключении происходит замыкание контакта, и PB4 соединяется с землей. Если я правильно помню, то в разъемах для наушников применяется такая же технология.