вправо и влево только на увеличение...
Аналогично. И энкодеры менял (правда на аналогичные) и разные варианты библиотеки encMinim.h
Причем в других прогах энкодер работает. И даже отдельный тест на этой библиотеке проходит. причем и с DIO2 (на которую грешил) и без.
Разным модификациям и отладкам мешает то, что памяти впритык.
Похоже, что где то с памятью косяк. Кто то срет.
_lastState, который в конструкторе инициируется _lastState = digitalRead(_clk); а вдальнейшем изменяется только переменной _state, по идее не может иметь других значений, кроме 0 или 1.
Но в первом обращении к функции encMinim::tick() выдает значение 8 !!!
И даже при принудительном присвоении значения.
void encMinim::tick() {
_encState = 0;
_state = digitalRead2(_clk);
_swState = digitalRead2(_sw);
_lastState = 1;
if (_state != _lastState) {
Serial.print ("_state = "); Serial.println (_state);
Serial.print ("_lastState = "); Serial.println (_lastState);
Все равно первый раз пишет "8"
Но если я меняю порядок объявления переменных в классе, к примеру вместо
boolean _state,
_lastState, _turnFlag, _swState, _swFlag, _turnState, _holdFlag;
написать
boolean _state, _turnFlag, _swState, _swFlag, _turnState, _holdFlag,
_lastState;
что не должно никак влиять на результат
может выдать 20 или другое значение.
Такое обычно бывает, когда кто то неверно работает с памятью. Скажем в массив [5] пишет 6, 7-е значение. Или присваивает неинициализированным классу, переменной и т.д.
И кого то были проблемы и победили ли?