Как я уже упоминал ранее, планируется, что основным режимом работы микроконтроллера в метеостанции будет режим сна. Выход из него - по нажатию кнопки (в дальнейшем - еще и по сигналу будильника для записи показаний датчиков на карту памяти). Для этого я задействовал внешнее прерывание (хорошо про прерывания здесь). Для кнопки использовал прерывание INT0 на ноге D2 платы arduino в режиме FALLING (подробности здесь). Кнопка обычная, замыкается на землю. Пин D2, к которому подключена кнопка, подтянут к VCC (использован внутренний подтягивающий резистор).
Схема подключения кнопки:
Схема подключения кнопки:
//код++
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define BUTTON_PIN 2
#define LED_PIN 13
void m_sleep();
void m_wake_up();
int main()
{
// все пины на выход и в низкий уровень
for (byte i = 0; i <= A7; i++) {
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
// установливаем на пине с кнопкой подтяжку к VCC
pinMode(BUTTON_PIN, INPUT);
digitalWrite(BUTTON_PIN, HIGH);
// устанавливаем обработчик прерывания INT0
attachInterrupt(0, m_wake_up, FALLING);
while(true) {
// светим светодиодом 10 секунд
pinMode(LED_PIN, OUTPUT);
digitalWrite(13, HIGH);
// Ждем 10 секунд
_delay_ms(10000);
digitalWrite(LED_PIN, LOW);
// и засыпаем
m_sleep();
// отсюда выполнения программы продолжится при пробуждении МК
// то есть снова светим 10 секунд и засыпаем
}
}
void m_sleep() {
// отключаем АЦП
ADCSRA = 0;
// отключаем всю периферию
power_all_disable ();
// устанавливаем режим сна - самый глубокий, здоровый сон :)
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
// разрешаем спящий режим
sleep_enable();
// разрешаем прерывания
sei();
// собственно засыпаем
sleep_cpu();
}
void m_wake_up ()
{
// запрещаем режим сна
sleep_disable();
// запрещаем прерывания
cli();
}
//код--
Или здесь
2 комментария:
Добрый день!
Как будить Ардуино, если у меня 15 кнопок и нужно будить любой кнопкой.
Если использовать режим POWER DOWN (глубокий сон), то разбудить можно только подачей +5V или нуля на пины D2 или D3, остальные пины реагировать не будут в этом режиме.
Отправить комментарий