NewSistems Опубликовано 18 апреля, 2016 Жалоба Поделиться Опубликовано 18 апреля, 2016 Всем привет народ! я одного своего проекта в машину, учусь обрабатывать калвиатуру матрицу из двух столбцов и трех строк. Вроде бы рабозбрался, но не могу завести работу обработки долго во нажатия клавиши... код приложил, подскажите где не так делаю? #define rows 3#define cols 2// номера кнопок в соответствии со схемойconst byte keys[rows][cols] ={ {1,4}, {2,5}, {6,3}};// номера пиновconst byte rowPins[rows] = {10, 9, 8}; // строки (желтый10, зеленый9, голубой8)const byte colPins[cols] = {7, 5}; // столбцы (черный7, красный5)// маски для клавиш#define MaskMediaButton 1#define MaskRadioButton 2#define MaskVolumeUpButton 4#define MaskVolumeDownButton 8#define MaskOkButton 16#define MaskMuteButton 32#define MaskScrollDown 64#define MaskScrollUp 128#define MaskFastPress 256#define MaskLongPress 512unsigned long starttime;bool workkbd;unsigned long startlongpresstime;bool oldpressed;///////////////////////////////////////////////////////////////////*************************************************************// Светодиоды для визуального контроля// номера пинов//*************************************************************const int ledPin_1 = 0; const int ledPin_2 = 1;const int ledPin_3 = 2;const int ledPin_4 = 4;const int ledPin_5 = 12;const int ledPin_6 = 13;const int ledPin_7 = 14;const int ledPin_8 = 15;void setup(){ Serial.begin(9600); int i; // строки - на выход for (i = 0; i < rows; ++i) { pinMode(rowPins[i], OUTPUT); } // столбцы - на вход for (i = 0; i < cols; ++i) { pinMode(colPins[i], INPUT); digitalWrite(colPins[i], HIGH); // включаем подтягивающий резистор } starttime = millis(); workkbd = false; oldpressed = false;}// сканирование джойстикаunsigned int scan(void){ int i, j; unsigned int code = 0; bool pressed = false; for (i = 0; i < rows; ++i) { digitalWrite(rowPins[i], LOW); // кнопки for (j = 0; j < cols; ++j) { if(digitalRead(colPins[j]) == false) { code |= 1 << (keys[i][j] - 1); pressed = true; } } }//конец циклов///////////////////////долго нажатие//////////////////////////////////////// if (pressed == true) { if (oldpressed == false) { startlongpresstime = millis(); } else { if (millis() - startlongpresstime > 1200 && (code & MaskOkButton)) // значение временного промежутка в мс { startlongpresstime = millis(); // сброс счетчика. иначе признак будет выполняться каждый цикл опроса code |= 512; } if (millis() - startlongpresstime < 1000 && (code & MaskOkButton) ) // значение временного промежутка в мс { startlongpresstime = millis(); // сброс счетчика. иначе признак будет выполняться каждый цикл опроса code |= 256; } } } oldpressed = pressed;///////////////////////////////////////////////////////////// return code;}// цикл программыvoid loop(){ unsigned int code; code = scan(); if (workkbd == false) { if (millis() - starttime > 3000) workkbd = true; return; } if (code & MaskMediaButton){ Serial.print("Source>"); Serial.println(); digitalWrite(ledPin_1, HIGH); delay(200); digitalWrite(ledPin_1, LOW); } if (code & MaskRadioButton){ Serial.print("Source<"); Serial.println(); digitalWrite(ledPin_2, HIGH); delay(200); digitalWrite(ledPin_2, LOW); } if (code & MaskVolumeUpButton){ Serial.print("VolumeUp"); Serial.println(); digitalWrite(ledPin_3, HIGH); delay(200); digitalWrite(ledPin_3, LOW); } if (code & MaskVolumeDownButton){ Serial.print("volumeDown"); Serial.println(); digitalWrite(ledPin_4, HIGH); delay(200); digitalWrite(ledPin_4, LOW); } if (code & MaskFastPress){ Serial.print("TRFast"); Serial.println(); } if (code & MaskLongPress){ Serial.print("TRLong"); Serial.println(); } if (code & MaskMuteButton){ Serial.print("Mute"); Serial.println(); digitalWrite(ledPin_6, HIGH); delay(200); digitalWrite(ledPin_6, LOW); } if (code & MaskScrollDown){ Serial.print("RotateDown"); Serial.println(); digitalWrite(ledPin_7, HIGH); delay(200); digitalWrite(ledPin_7, LOW); } if (code & MaskScrollUp){ Serial.print("RotateUp"); Serial.println(); digitalWrite(ledPin_8, HIGH); delay(200); digitalWrite(ledPin_8, LOW); } } Раздел: Arduino и Raspberry Pi Читать дальше Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.