Особенности библиотеки Keypad или как сделать долгое нажатие

Всем здравствуйте. В наличии пленочная матричная клавиатура 3х4, Arduino Nano и ИК-передатчик (ИК-диод). Сделал из этого всего ИК-пульт. Использую для этого соответственно библиотеки Keypad и IRremote. Все вроде работает, команды отсылаются, но не так как хотелось бы. Нажимаю кнопку на клавиатуре - отправляется команда. Вроде нормально. Но хотелось бы при удержании кнопки, чтобы команда отсылалась постоянно, а этого не происходит. Причем просто с кнопкой всё работает как надо. Подскажите пожалуйста с моим недельным опытом этой темы в чем проблема?
Вот скетч. В нём используется только одна кнопка клавиатуры.

#include <IRremote.h>  // Подключение библиотеки IRremote
#include <Keypad.h>    // Подключение библиотеки Keypad

IRsend irsend;

const int ledPin13 =  13;

unsigned int  rawData08[26] = {480, 800,480, 800,480, 800,480, 800,480, 800,480, 800,480, 800,480, 800,480, 320,960, 800,480, 800,480, 320,960, 800}; //Dawn (08)

const byte ROWS = 4;   // Количество строк 
const byte COLS = 3;   // Количество рядов 

char keys[ROWS][COLS] = 
{
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

byte rowPins[ROWS] = {10, 4, 8, 6}; // Выводы, подключение к строкам
byte colPins[COLS] = {5, 7, 9}; // Выводы, подключение к столбцам  

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup() {
    pinMode(ledPin13, OUTPUT); //
    Serial.begin(9600); // Открываем последовательную связь на скорости 9600
}   
void loop() {
delay(50);
  	  char key = keypad.getKey();  // Читаем состояние кнопок
	    if (key != 0) {
    digitalWrite(ledPin13, HIGH);
  } else {
    digitalWrite(ledPin13, LOW);
  } 
    if (key){
    Serial.println(key);
   }   
     if (key == '8'){ //Если нажата кнопка "8"
     delay(50);
     irsend.sendRaw(rawData08,26,38); //Отсылаем команду rawData08
     
  }
}

Да, что ж сегодня за поветрие такое-то? Третий уже!

Вот одна “keypad.h”! А вот другая! Вам показать ещё и третью, и четвёртую?

Как прикажете угадывать, которая у Вас? Хрустальный шар в ремонте.

Трудно дать ссылку на библиотеку?

1 лайк

Ещё наверное стоит рассказать, а чем управляете? Приемник вашего ИК-сигнала кто?
Одно дело - самодельное устройство, а другое - готовое устройство с одним из стандартных протоколов. Там непрерывная посылка кода может специальным символом кодироваться.

Библиотека версии 3.1.

Это самодельный пульт, там команды отсылаются непрерывно с разделением по времени. Реакция на первую команду, потом игнорирование. Но есть две кнопки, которые надо удерживать более трёх секунд, тогда будет реакция.

Вы дали два ответа и оба абсолютно не в тему.
Евгению дайте ссылку на используемую Вами библиотеку, а не версию неизвестной библиотеки.
Я спрашивал не о передатчике (пульте), а о приёмнике. Это тоже что-то самодельное? Тогда стоит привести и его скетч. Может Вы приём как-то неправильно организовали.

Это особенность библиотеки. Она возвращает нажатую клавишу при вызове getKey только один раз после нажатия.
Есть getState(), но как “красиво” отслеживать долгое нажатие не знаю, не делал.

1 лайк

Библиотека.
https://downloads.arduino.cc/libraries/github.com/Chris–A/Keypad-3.1.1.zip
О программе приёмника мне ничего не известно.

Значит, как я и предполагал, ссылку дать трудно. Ну, тогда воюйте с нею сами.

А ссылкы выше не подходит что-ли?

Она не выше, а ниже. После поста c номером версии, я потерял интерес к теме.

Я ведь с самого начала попросил у Вас ссылку, так? Вы не дали, видимо секретная, ну или Вам настолько “сильно нужна” помощь, что лень было искать ссылку. Значит, не судьба - лимит моего времени на эту тему исчерпан :frowning:

:laughing: И на том спасибо.