В процессе создания контроллера управления поворотным устройством антенны, споткнулся с проблемой отказа работы ОДНОЙ кнопки аналоговой клавиатуры.
Сразу поясню, почему спрашиваю здесь.
Причина такова - ТОЛЬКО после останова ШД(GStepper2 ISR) на заданной позиции, подпрограмма обработки клавиатуры перестаёт "видеть" одну кнопку.
Тупо не видит и тупо ОДНУ кнопку!
Клавиатура примитивная - три резистора, соединённых последовательно с VCC, три кнопки подключают "GND" с точек соединения резисторов.
Первая "точка соединения" подключена к А3 ардуино нано.
Работать перестаёт кнопка, подключающая "GND" на пин А3.
Код:
Другие две кнопки (btnUP и btnDWN) ReadKey в это время "видит", кнопку btnSET - ни в какую..
Третий день выношу мозг себе и коллеге..
Сразу поясню, почему спрашиваю здесь.
Причина такова - ТОЛЬКО после останова ШД(GStepper2 ISR) на заданной позиции, подпрограмма обработки клавиатуры перестаёт "видеть" одну кнопку.
Тупо не видит и тупо ОДНУ кнопку!
Клавиатура примитивная - три резистора, соединённых последовательно с VCC, три кнопки подключают "GND" с точек соединения резисторов.
Первая "точка соединения" подключена к А3 ардуино нано.
Работать перестаёт кнопка, подключающая "GND" на пин А3.
Код:
Код:
#include <EncButton.h>
EncButton enc(2, 3, 4); // энкодер с кнопкой CLK, DT, SW
VirtButton btnUP;
VirtButton btnDWN;
VirtButton btnSET;
// создаём массив значений сигналов с кнопок
int16_t sigs[3] = {
340, 140, 0
};
enum {
None = 0,
UpClick,
DownClick,
UpHold,
DownHold,
SelClick,
SelHold,
TurnRight,
TurnLeft,
TurnRH,
TurnLH,
EClick
};
#include "AnalogKey.h"
// указываем пин, количество кнопок и массив значений
AnalogKey<A3, 3, sigs> keys;
// подпрограмма чтения клавиатуры
int8_t ReadKey() {
int8_t code = 0;
if (btnUP.tick(keys.status(0))) {
if (btnUP.click()) code = UpClick;
if (btnUP.hold()) code = UpHold;
}
if (btnDWN.tick(keys.status(1))) {
if (btnDWN.click())code = DownClick;
if (btnDWN.hold()) code = DownHold;
}
if (btnSET.tick(keys.status(2))) {
if (btnSET.click())code = SelClick;
if (btnSET.hold()) code = SelHold;
}
if (code) return code;
else return None;
}
Третий день выношу мозг себе и коллеге..
Изменено: