Прерывания и 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 ;) Тогда и помех не будет.