Adinah
01.Ноябрь.2024 09:41:52
1
Засыпает и больше не просыпается. Как ее проснуть?
#include <avr/sleep.h>
#include "KeypadInt.h"
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
volatile uint32_t tmrSleep;
volatile uint8_t counter;
char hexaKeys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'0','0','0'}
};
byte rowPins[ROWS] = {A1, A2, A4, A5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {A0, A3, 7, 2}; //connect to the column pinouts of the keypad
KeypadInt Keypad( (char *)hexaKeys, rowPins, colPins, ROWS, COLS, KEY_PRESSED);
void setup(){
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
pinMode(13, OUTPUT);
Serial.begin(115200);
PCICR |= B00000010; //порт C
PCMSK1 |= B00110110; //A1,A2,A4,A5
}
ISR (PCINT1_vect)
{
sleep_disable(); tmrSleep=millis; digitalWrite(13,0);counter++;
}
void loop(){
if (millis()-tmrSleep>=10000){digitalWrite(13,1); sleep_mode();
}
char Key = Keypad.getKey();
if (Key!=0) {
Serial.println(Key);
Serial.println(counter);
}
}
Контроллер-то какой?
И, кстати, не помешала бы схема, как Вы там матрицу подключили, никто ж не знает.
Green1
01.Ноябрь.2024 09:54:02
3
Говнокод в чистом виде. ТС, постыдился бы такое выкладывать.
ЕвгенийП, я бы постыдился (побрезговал) отвечать.
1 лайк
Adinah
01.Ноябрь.2024 10:08:13
4
328P. Ну пусть это будут кнопки подключенные A1,A2,A4,A5 с внутренним PULLUP, а вторыми концами на земле.
v258
01.Ноябрь.2024 10:13:07
5
Я, конечно, дико извиняюсь, но разве PC6
- не резет?
1 лайк
Adinah
01.Ноябрь.2024 10:14:06
6
Так точно. Не понимаю вопроса.
Да, пусть, конечно, только Вы не поняли для чего я спрашиваю.
Обычно я запускаю это добро у себя и смотрю, что там. Поэтому, если Вы хотите, чтобы я это сделал и что-то Вам разумное сказал, вставьте это (пул-ап и пр.) в код, убедитесь, что не работает и выложите этот код, чтобы я мог просто запустить его (без дописывания отсебятины) и увидеть проблему. Если увижу, попытаюсь решить, что-то подсказать.
Только, когда допишете код, таки запустите его и убедитесь, что по-прежнему не работает, а то обидно будет мне запустить, сказать Вам, что у меня работает, а потом услышать, что у Вас тоже
Upper
01.Ноябрь.2024 10:54:30
11
Adinah:
tmrSleep=millis;
Скобки у millis пропустили.
1 лайк
BOOM
01.Ноябрь.2024 11:14:48
12
А еще в SREG еденицу загнать нужно (в I), судя по даташиту:
В седьмой бит:
Или просто вызвать функцию sei();
в конце блока setup().
1 лайк
Она там и без нас благополучно вызывается (ещё до setup
), иначе миллис бы ни в жисть не работал.
Adinah
01.Ноябрь.2024 11:45:28
14
Благодарю всех. Так заработало:
#include <avr/sleep.h>
#include "KeypadInt.h"
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
volatile uint32_t tmrSleep;
volatile uint8_t counter;
char hexaKeys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'0','0','0'}
};
byte rowPins[ROWS] = {A1, A2, A4, A5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {A0, A3, 7, 2}; //connect to the column pinouts of the keypad
KeypadInt Keypad( (char *)hexaKeys, rowPins, colPins, ROWS, COLS, KEY_PRESSED);
void setup(){
sleep_enable(); // Разрешаем использование спящего режима
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
pinMode(13, OUTPUT);
Serial.begin(115200);
PCICR |= B00000010; //порт C
PCMSK1 |= B00110110; //A1,A2,A4,A5
SREG |= B10000000;
}
ISR (PCINT1_vect)
{
sleep_disable(); tmrSleep=millis(); digitalWrite(13,0);counter++;
}
void loop(){
if (millis()-tmrSleep>=10000){digitalWrite(13,1); sleep_cpu();
}
char Key = Keypad.getKey();
if (Key!=0) {
Serial.println(Key);
Serial.println(counter);
}
}
Kakmyc
01.Ноябрь.2024 11:47:55
15
Вопрос наводящий можно задать ?
Как работает матричная клавиатура ?
BOOM
01.Ноябрь.2024 12:31:51
17
Мне конечно пофик, но почему отметили «вопрос решен» пост #13 , а не #12 (в котором о SREG как раз и шла речь).
Adinah
01.Ноябрь.2024 12:51:50
18
Заработало после правки строк 17,27 и 31. SREG никак не повлиял на работу, что с ним, что без. Но я очень благодарен лично Вам за помощь.
1 лайк
Но, Вы, надеюсь, понимаете, что там ещё доводить до ума и доводить? Так нельзя оставлять.
Adinah
01.Ноябрь.2024 13:24:42
20
Был бы благодарен за подсказки.