Поворотная кнопка энкодера Проверка Ввести Не работает через несколько раз - PullRequest
0 голосов
/ 21 февраля 2020

Я делаю проект NF C, чтобы прочитать тег NF C и показать данные. После отображения данных на экране ЖКД отображается 2 варианта: сначала «Сохранить», а затем «Отмена». Когда я выбираю Сохранить и нажимаю среднюю поворотную кнопку pu sh, она сохраняет данные, но если я выберу кнопку отмены (поворачивая вращающийся регулятор) pu sh среднюю поворотную кнопку, она вернется в предыдущее меню. После нескольких раз чтения тега средняя кнопка больше не работает, и мне нужно снова повернуть ее, чтобы она заработала. Есть идеи почему? Я хочу, чтобы средняя кнопка работала даже после нескольких раз, а не вращая ее снова и снова, чтобы она заработала.

Вот мой код:

// *********************************************************************
float jam, menit, detik, miliDetik;
unsigned long over;
unsigned long g_timer_1 = 0;    // timer variable (global variable)
void getTag(uint8_t param)
// *********************************************************************
{
  if (LCDML.FUNC_setup())
  {
    pos = 1;
    //Serial.println(kdj);
    charLCD(nmJurusan, 0, 0);
    charLCD("Timer :", 0, 1);
    lcd.setCursor(0, 2);
    lcd.print("ID : ");
    lcd.print(uidString);

    selesai = millis();
    digitalWrite(buzzer, LOW);
  }

   if (LCDML.FUNC_loop())
  {
    LCDML.SCREEN_resetTimer();
    if (LCDML.BT_checkUp() || LCDML.BT_checkDown()) {
      LCDML.BT_resetUp();
      LCDML.BT_resetDown();
      pos++;
    }    

    dtime = selesai - mulai;
    jam = int(dtime / 3600000);
    over = dtime % 3600000;
    menit = int(over / 60000);
    over = over % 60000;
    detik = int(over / 1000);
    miliDetik = over % 1000;

    lcd.setCursor(0, 1);
    lcd.print("Timer : ");
    lcd.print(jam, 0);
    lcd.print(":");
    lcd.print(menit, 0);
    lcd.print(":");
    lcd.print(detik, 0);
    lcd.print(".");
    if (jam < 10) {
      lcd.print(miliDetik, 0);
      lcd.print("   ");
    }



 switch (pos) {
      case 1:
        charLCD("- Save   Cancel", 0, 3);
        if (LCDML.BT_checkEnter() || blSimpan == 1) {
          LCDML.BT_resetEnter();
          saveLogSD();
          LCDML.OTHER_jumpToFunc(readRFID);
        }
        break;
      case 2:
        charLCD("  Save - Cancel", 0, 3);
        if (LCDML.BT_checkEnter()) {
          LCDML.BT_resetEnter();
          pos = 0;
          jam = 0;
          menit = 0;
          detik = 0;
          LCDML.OTHER_jumpToFunc(readRFID);
        }
        break;
    }

    if (pos > 2) {
      pos = 0;      
    }


  }

  if (LCDML.FUNC_close())
  {
    pos = 0;
  }
}


...