Quad display и клавиатура

Тема в разделе "Arduino & Shields", создана пользователем iBoy, 6 июн 2016.

  1. iBoy

    iBoy Гик

    Здравствуйте! Помогите, пожалуйста, исправить такую проблему:
    Дисплей должен выводить то, что я ввожу на клавиатуру в обратном порядке(т.е. если я ввожу 4, затем 5, затем 3, то должно высветиться 354). Однако, первая введённая цифра, когда доходит до 3-го разряда, уменьшается на 1, причём нестабильно, однако почти всегда(на этом примере - вместо 354 высвечивается 353). Вот код:

    Код (C++):
    #include <QuadDisplay.h>

    int i;
    int j;
    int val=0;
    int per[4];
    int razryad=0;
    boolean vihod;

    void setup() {
      for(i=4; i<=7; i++){
        pinMode(i, OUTPUT);
      }
      for(j=8; j<=10; j++){
        pinMode(j, INPUT);
      }
      pinMode(11, OUTPUT);
      Serial.begin(9600);

    }

    void loop() {
      vihod=false;
      dannye();
      }
    void dannye(){
    while(vihod==false){
      for (i = 4; i <= 7; i++){
        digitalWrite(i, HIGH);
        for(j=8; j<=10; j++){
          if (digitalRead(j) == HIGH) {
            delay(800);
            Serial.print(i-3);
            Serial.print(" row, ");
            Serial.print(j-7);
            Serial.print(" column is ");
            Serial.println(op(i,j));
            if(op(i,j)==10){
              vihod = true;
            }
            val+=op(i,j)*(pow(10, razryad));
            Serial.println(val);
            Serial.println(razryad);
            razryad++;
            displayInt(3, val, true);
          }
        }
        digitalWrite(i, LOW);
      }
    }
    }

    int op(int x, int y){//op - ОПерделение чисел
      if((3*(x-4)+y-7)==11){
      return(0);
      }
      else{
      return(3*(x-4)+y-7);
      }
    }
     
  2. ZAZ-965

    ZAZ-965 Гуру

    iBoy, как я понимаю вы сканируете клавиатуру 3х4 (что равно 12), а в функции проверяете на равенство 11
    Код (C++):
    //ваш код
    if((3*(x-4)+y-7) == 11)

    //возможно должно быть так
    if((3*(x-4)+y-7) >= 11)
     
    Последнее редактирование: 7 июн 2016
  3. ostrov

    ostrov Гуру

    Поменять формулы. Добавить программный антидребезг, пленочные клавы дребезжат безжалостно.
     
  4. iBoy

    iBoy Гик

    Это нужно не для этого. Это формула определения номера кнопки. Если кнопка =11 по формуле, то по факту это - 0. Заранее спасибо всем!
     
  5. iBoy

    iBoy Гик

    Спасибо, но не помогло. Мало того, как я заметил зависит скорее не от случая, а от конкретного вводимого числа.
     
  6. ostrov

    ostrov Гуру

    Ввод цифр с пленочных клав, пожалуй, самое надежное, в отличие от резистивных сборок.