Задать вопрос
@RieldaBot
Начинающий программист Python

Arduino Analog Keypad 3x4, почему не правильно работает?

Всем привет, купил недавно Keypad 3x4, который имеет 3 пина подключения VCC, GND, OUTPUT
все правильно подключил

GxEkEDk.png

но проблема в коде
#define sensorDelayRate 20
byte lastValue = 99;
void setup()
{
  Serial.begin(9600);
  Serial.setTimeout(50);
}
void loop()
{       
  byte value = key();
  if(value != lastValue)
  {
    lastValue = value;
    if(lastValue != 99)
    Serial.print(lastValue);
    delay(100);
  }      
}

byte key()
{  
  int val = 1024 - analogRead(A0); 
  if (val < 515 && val > 505) return 0; //538
  else if (val < 1028 && val > 1018) return 1;
  else if (val < 935 && val > 925) return 2;
  else if (val < 855 && val > 845) return 3;
  else if (val < 795 && val > 785) return 4;
  else if (val < 735 && val > 725) return 5;
  else if (val < 685 && val > 675) return 6;
  else if (val < 645 && val > 635) return 7;
  else if (val < 605 && val > 595) return 8;
  else if (val < 575 && val > 565) return 9;
  else if (val < 545 && val > 535) return 10;
  else if (val < 495 && val > 485) return 11;
  else return 99;
}


код делает проверку кнопок( они по порту отдают )
и кнопки не отдают свои числа и цифры
а просто пишет или 1 или 0 или 10
но должно на каждую кнопку отдавать свое число

когда делаю проверку, то отдает правильные номера
void setup()
{
  Serial.begin(9600);
  Serial.setTimeout(50);
}
void loop()
{       
  Serial.print(analogRead(A0));
  Serial.println("/");
  delay(1000);
}

0, 538 и т.д

почему при первом коде оно не работает так, как должно?

фото обратной стороны:
nepy16S.png

Весь код загружал в Arduino UNO(китай)
  • Вопрос задан
  • 108 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
@vanyamba-electronics
byte key()
{  
    int val = analogRead(A0);
    if (val < 480) return 99;
    if (val < 500) return 11;
    if (val < 525) return 0;
    if (val < 555) return 10;
    if (val < 585) return 9;
    if (val < 620) return 8;
    if (val < 660) return 7;
    if (val < 705) return 6;
    if (val < 760) return 5;
    if (val < 820) return 4;
    if (val < 890) return 3;
    if (val < 976) return 2;
    return 1;
}
Ответ написан
Комментировать
nava2002
@nava2002
Инженер
Имеет место дребезг контактов.
Перед анализом - значение нажатой кнопки нужно нормализовать.
И я бы тестером уточнил какое именно напряжение на выходе при нажатии кнопки. Не исключено что там не все так точно как написано на плате.

P.S. Я бы резисторы поменял. Слишком плотно значения расположены.
Плохой контакт, неточный номинал и определение кнопки будет затруднено.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы