Перейти к содержанию
bbh_blocked_dnftl

Dx Portal Обработка Долгого Нажатия Кнопки На Матрице


Рекомендуемые сообщения

Всем привет народ! я одного своего проекта в машину, учусь обрабатывать калвиатуру матрицу из двух столбцов и трех строк. Вроде бы рабозбрался, но не могу завести работу обработки долго во нажатия клавиши... код приложил, подскажите где не так делаю?

 

#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

 

Читать дальше

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...