Выбока из массива происходит криво (tinkercad_com)
- Войдите на сайт для отправки комментариев
Доброго времени суток!
Вот столкнулся с такой проблемкой.
Блок кнопок (подключены по резистивно-последовательной схеме) при нажатии определяется номер кнопки и по коду выбирается из массива значение.
При выборке первые де цифры правильные, а остальные заменяются на вторую цифру.
Схема и скетч тестируются на онлайн эмуляторе tinkercad_com.
Подскажите это в коде косяк или эмулятор глючит?
Вот такой массив:
int iMassCull [4]={1723,2862,7531,4756};
Вот результат выборки:
Key pressed: 4
data : 4777
all keys are not pressed
Key pressed: 2
data : 2888
all keys are not pressed
Key pressed: 1
data : 1777
all keys are not pressed
Key pressed: 3
data : 7555
all keys are not pressed
Key pressed: 4
data : 4777
all keys are not pressed
Key pressed: 4
data : 4777
all keys are not pressed
Key pressed: 3
data : 7555
all keys are not pressed
Key pressed: 2
data : 2888
all keys are not pressed
Key pressed: 1
data : 1777
all keys are not pressed
Сам код:
int pinIn = A0; int keyValue = 0; // Состояние покоя int iMassCull [4]={1723,2862,7531,4756}; void setup() { pinMode(pinIn, INPUT); Serial.begin(9600); } void loop() { int newKeyValue = GetKeyValue(); // Получаем актуальное состояние кнопок с коррекцией дребезга if (keyValue != newKeyValue) { // Если новое значение не совпадает со старым - реагируем на него keyValue = newKeyValue; // Актуализируем переменную хранения состояния if (keyValue > 0) { // Если значение больше 0, значит кнопка нажата Serial.println("Key pressed: " + String(keyValue)); Serial.println ("data : "+String(iMassCull [keyValue-1])); } else { // Если 0, то состояние покоя Serial.println("all keys are not pressed"); } } } int GetKeyValue() { // Функция устраняющая дребезг static int count; static int oldKeyValue; // Переменная для хранения предыдущего значения состояния кнопок static int innerKeyValue; int actualKeyValue = analogRead(pinIn); // Получаем актуальное состояние actualKeyValue = ((actualKeyValue - 128) >> 8) + 1; // Для 4 кнопок if (innerKeyValue != actualKeyValue) { // Пришло значение отличное от предыдущего count = 0; // Все обнуляем и начинаем считать заново innerKeyValue = actualKeyValue; // Запоминаем новое значение } else { count += 1; // Увеличиваем счетчик } if ((count >= 10) && (actualKeyValue != oldKeyValue)) { // Счетчик преодолел барьер, можно иницировать смену состояний oldKeyValue = actualKeyValue; // Присваиваем новое значение } return oldKeyValue; }