Прерывания и sleep
- Войдите на сайт для отправки комментариев
Вс, 27/03/2016 - 19:49
Привет.
Прочитал про прерывания, пытался что-то сделать, но не выходит.
Arduino pro mini 3.3v
Скажем подключаю я по вот этой схеме (только 3.3в):

У меня срабатывает прерывание даже при прикосновении пальца ко второму выходу (вообще без кнопки).
Возможно ли сделать что бы прерывание срабатывало только тогда, когда на входе 3.3в ?
#include <avr/sleep.h>
#include <avr/power.h>
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT); // initialize digital pin 13 as an output.
sleepMode();
}
void loop() {
Serial.println("Hello");
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(500); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOdW
delay(500); // wait for a second
sleepMode();
}
/* Засыпание ардуины */
void sleepMode() {
attachInterrupt(0, wakeupMode, HIGH);
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_cpu ();
}
/* Просыпаемся */
void wakeupMode() {
Serial.println("Wake");
detachInterrupt(0);
digitalWrite(13, HIGH);
}
1. attachInterrupt(0, wakeupMode, HIGH); - не правильно. Нет такого режима (HIGH) для прерывания. Поставь RISING или FALLING. http://arduino.ru/Reference/AttachInterrupt
2. Попробуй уменьшить номинал стягивающего резистора R1, например 4,7К или чуть меньше (но не менее 1К).
Спасибо. Попробовал:
4.7к - ложные срабатывания как при 10k
2.2 k - чуть меньше
1 к - уже мало, но всеравно есть
а вот на 680 Омах ложных срабатываний нет.
Почему именно минимум 1к?
Почему именно минимум 1к?
Да это я так, примерно (и по привычке для 5В). Можно и меньше в принципе, тем более 3,3В. Главное посчитать, чтобы ток слишком большой не протекал. Чем меньше сопротивление, тем больше ток через резистор.
При 3,3В и 680 Ом ток через резистор будет примерно 4,85мА (и то кратковременно при нажатой кнопке). Нормально.
Огромное спасибо :)
А ещё лучше, имхо - пин к питанию подтянуть и инвертировать логику работы, чтобы при нажатии кнопки на пине был 0 ;) Тогда и помех не будет.