вы были правы, без диодов не больше 10 кнопок одновременно нажатых мгновенно определяются идеально, но только с такой библиотекой, диоды получается не понадобятся, вероятно программно решили вопрос в данной библиотеке случайных нажатий, супер
Не подскажете как под STM32 удерживая кнопку отослать лишь 1 раз сообщение, а кнопка продолжит держаться, или мигнуть 1 раз светодоидом пока держится кнопка, ничего не смог сделать, там _Bool может как то использовать, все что нужно - нажали кнопку и не сто тысяч раз летит сообщение как например было бы достаточно если бы реле удерживать или светодиод горел, а один раз, а дребезг вовсе насколько возможно что бы задержек не делать вовсе, там важна скорость как в самолете, сверх быстро и только 1 раз, а кнопка будет дальше держаться.
Без антидребезга - нужно на кнопку конденсатор вешать, это немного уберёт дребезг кнопки. Также нужно ввести переменную, которая будет обгуляться при отпускании кнопки. Нажал - изменилась переменная - отправили сообщение - если переменная изменена - ничего больше не отправлять - отпустили кнопку - обнулили переменную
а резисторы подтягивающие к строкам или к столбикам нужно подпаивать на 10к ? без резисторов даже если просто дернуть провода или поднести руку нажимаются сами в порт летят нажатия
С контактами все в порядке. Там резистивный делитель в виде графитовых дорожек, прямо на плате. 1 ряд - 0 Ом. 2 ряд, 4,5 - 550 Ом; 6,В - 200 Ом 3 ряд, 7,8 - 400 Ом; 9,С - 200 Ом 4 ряд, *,0 - 700 Ом; #,D - 300 Ом Почему так не логично? Видимо была техника для которой делали данные клавиатуры, потом ее сняли с производства, а производство клавиатур осталось, вот и стали продавать их в розницу. Это мое предположения. К стати у меня 4 таких клавиатуры, у всех параметры одинаковые, одну разобрал, поэтому так точно по рядам и сопротивлениям здесь написал, может кому пригодится.
Забыл добавить: есть возможность установить перемычки, вместо графитовых полосок, все клавиши станут 0 Ом! Клавиатура разбирается легко, всего получится 6 перемычек.
@@UCanDo У меня точно такая же как у тебя, Игорь. Там пластиковые стойки, развольцованный край нужно срезать. Потом клава соберётся на место без клея как родная :)
а как мне символ который в serial print тут отправляется Serial.print(kpd.key[i].kchar); перепаковать в слово, попробовал своим способом и не удалось через if попытался если символ такой то отправить слово, но не сработало(
И да и нет. Проблема в том что для STM существует крайне много способов написания кода и библиотек, которые между собой не стыкуются. По этому, несмотря на множество примеров, все равно код придётся писать практически с нуля.
@@UCanDo Да там CUBEIDE даже собственные файлы не может открывать .IOC может подскажете как решить вопрос с открытием .ioc ? CUBE IDE смотрит на них как даун, и не понимает что за файл перед ним. Отношение к софту конечно у CUBEIDE ниже плинтуса, представьте если бы фотошоп каждый раз был несовместим со своими же файлами PSD. Только дибилы из SMT32 позволяют себе такое отношение к пользователям.
Для i2C Используйте расширитель портов PCF857. Вот примеры: www.hackster.io/venkatesh_rao/i2c-keypad-73a012 playground.arduino.cc/Main/I2CPortExpanderAndKeypads www.instructables.com/id/Arduino-Nano-I2C-Matrix-Keypad-With-PCF8574PCF8574/ Для подключения по 3-м проводам досмотрите видео до конца.
@@Drevorub , любое устройство имеет смысл делать только при условии что такого устройства нет в продаже. Если что-то есть в продаже, то любая аналогичная самоделка будет хуже качеством, дороже, и еще нужно учесть время и силы потраченные на программирование и сборку. По этому, если что-то есть в продаже то не нужно «изобретать велосипед». Выигрыша от этого никакого. Самоделку есть смысл делать только при условии изготовлении устройства которого нет в продаже. Самоделки - это не про экономию, абсолютно.
Сопротивления в принципе на таких клавиатурах быть не должно. Если есть - может что-то с контактами? Даже если оно там стоит, можно все прозвонить тестером, выяснить, какие сопротивления где установлены, и уже отталкиваясь от этой информации подбирать резисторы.
Похоже на плохой контакт самих кнопок. Скорее всего брак при сборке. На разных кнопках сопротивление разное, а так как это матрица, то сопротивление кнопок вносит разность в ожидаемое сопротивление. В общем должно быть одно, а получается другое. Но проблема в том что на кнопках сопротивление "прыгает" из-за плохого контакта и на разных кнопках получаются примерно одинаковые показатели сопротивления, что делает невозможным отличить одну кнопку от другой. Но это только для подключения по одному проводу. В обычном подключении все нормально работает.
Клавиатура не может быть медленной. Это просто кнопки. Скорость обработки на прямую зависит от скетча. Возможно он написан не оптимально. От этого и торможения.
спасибо большое! у вас не тормозили кнопки? тормоза 1сек примерно, а одновременно нельзя вообще нажать. Это катастрофически плохо. keypad.h как и в вашем примере пример тестировался. Может кнопки резистрами подтянуть? диоды может нужны? тормозит 1сек примерно.
Ого! Нет, у меня все четко срабатывало. Можете написать ваш скетч? Попробую глянуть что не так. Вот только у компьютера я буду часа через 3, тогда и смогу посмотреть
Добрый день простите за задержку с ответом. Только что посмотрел код. Сами писали или это чей-то код? Настоятельно рекомендую правильно форматировать код, тогда он нормально читаем. Вот так правильно: void read_serial() { if (Serial.available() > 0) { char ByteRead=Serial.read(); if (ByteRead==13) { //возврат каретки analyzer(); //передача данных на обработку bufer=""; } else { //освобождение буфера //накопление данных в буфер if(ByteRead!=10)bufer=bufer+char(ByteRead); // символ "новая строка" , нам в буффере не нужен } } } Первое на что обратил внимание, если я правильно понял, то кроме подключения и обработки нажатий на клавиатуре еще происходит управляемое, "виртуальное" нажатие кнопок управляемое через сериал? Именно это делает функция analyzer() ? У вас случайно ложных нажатий не бывает? Мне кажется эта функция нарушает работу Keypad.h Но это нужно проверять. Дальше, в Setup: keypad.setDebounceTime(100); Цитата из библиотеки Keypad.cpp: // Minimum debounceTime is 1 mS. Any lower will slow down the loop(). Немного непонятно относительно чего говорится " Any lower". Относительно увеличения DebounceTime, и тем самым "замедления" кода, или о более низком значении DebounceTime, то есть ниже 1 мс. Так или иначе, попробуйте вместо keypad.setDebounceTime(100); прописать keypad.setDebounceTime(1);
Home Made - То, что ты можешь сделать Типа вот такого... DIY Калькулятор Счетчик комплект калькулятор DIY Kit ЖК-дисплей Многоцелевой Электронные калькулятор Электроника вычислений с акриловый чехол s.aliexpress.com/QJnMZjuY?fromSns=
404Negative затрудняюсь ответить.... а вы что предлагаете...? ;-)... Можно попросить Home made, чтоб сделал платформу на гусеницах с кнопками и модулем mp3... чтоб с кнопок маршрут программировать и чтоб ездила по марруту, мигала светодиодами и пикала в стиле звездных воин и треки проигрывала, можно придумать будильник на гусеницах..... пускай ездит по комнатам и будит трудовой класс, школьников и домохозяек в установленное время....
вы были правы, без диодов не больше 10 кнопок одновременно нажатых мгновенно определяются идеально, но только с такой библиотекой, диоды получается не понадобятся, вероятно программно решили вопрос в данной библиотеке случайных нажатий, супер
Спасибо бро! помог мне для таймера для фотопечати найти верные пины!
если хочешь идти в армию - нажимай звёздочку. если не хочешь - нажимай решетку )
Не подскажете как под STM32 удерживая кнопку отослать лишь 1 раз сообщение, а кнопка продолжит держаться, или мигнуть 1 раз светодоидом пока держится кнопка, ничего не смог сделать, там _Bool может как то использовать, все что нужно - нажали кнопку и не сто тысяч раз летит сообщение как например было бы достаточно если бы реле удерживать или светодиод горел, а один раз, а дребезг вовсе насколько возможно что бы задержек не делать вовсе, там важна скорость как в самолете, сверх быстро и только 1 раз, а кнопка будет дальше держаться.
Без антидребезга - нужно на кнопку конденсатор вешать, это немного уберёт дребезг кнопки. Также нужно ввести переменную, которая будет обгуляться при отпускании кнопки. Нажал - изменилась переменная - отправили сообщение - если переменная изменена - ничего больше не отправлять - отпустили кнопку - обнулили переменную
а резисторы подтягивающие к строкам или к столбикам нужно подпаивать на 10к ? без резисторов даже если просто дернуть провода или поднести руку нажимаются сами в порт летят нажатия
С контактами все в порядке. Там резистивный делитель в виде графитовых дорожек, прямо на плате.
1 ряд - 0 Ом.
2 ряд, 4,5 - 550 Ом; 6,В - 200 Ом
3 ряд, 7,8 - 400 Ом; 9,С - 200 Ом
4 ряд, *,0 - 700 Ом; #,D - 300 Ом
Почему так не логично? Видимо была техника для которой делали данные клавиатуры, потом ее сняли с производства, а производство клавиатур осталось, вот и стали продавать их в розницу. Это мое предположения.
К стати у меня 4 таких клавиатуры, у всех параметры одинаковые, одну разобрал, поэтому так точно по рядам и сопротивлениям здесь написал, может кому пригодится.
Забыл добавить: есть возможность установить перемычки, вместо графитовых полосок, все клавиши станут 0 Ом! Клавиатура разбирается легко, всего получится 6 перемычек.
У меня клавиатура не разборная. Иначе бы тоже разобрал. Но за дополнение спасибо!
@@UCanDo У меня точно такая же как у тебя, Игорь. Там пластиковые стойки, развольцованный край нужно срезать. Потом клава соберётся на место без клея как родная :)
Я просто не рискнул :)
Как руки до нее дойдут, то точно разберу :)
а если кнопки на проводах по 0.5 метров - 1 метр будут, не просядет ли сигнал? матричным способом если кнопки далеко находятся 90 шт?
а как мне символ который в serial print тут отправляется Serial.print(kpd.key[i].kchar); перепаковать в слово, попробовал своим способом и не удалось через if попытался если символ такой то отправить слово, но не сработало(
а под STM32 CUBE IDE не существует примеров в природе?
И да и нет. Проблема в том что для STM существует крайне много способов написания кода и библиотек, которые между собой не стыкуются. По этому, несмотря на множество примеров, все равно код придётся писать практически с нуля.
@@UCanDo Да там CUBEIDE даже собственные файлы не может открывать .IOC может подскажете как решить вопрос с открытием .ioc ? CUBE IDE смотрит на них как даун, и не понимает что за файл перед ним. Отношение к софту конечно у CUBEIDE ниже плинтуса, представьте если бы фотошоп каждый раз был несовместим со своими же файлами PSD. Только дибилы из SMT32 позволяют себе такое отношение к пользователям.
@@UCanDo пришлось поставить ещё cubemx и только он открыл файл .ioc и то ещё задавал вопросы типа не знает что за файл
Пароль должен быть не как у чайников 123, а как у профи - шесть звёздочек! :)))
:))))
@@UCanDo Блогодорю вас за имформотивное видео))
а в этой библиотеке 9*10 если написать будет работать матрица? (давно когда то делал, тогда вообще не понимал ничего в ардуино) попробую еще раз)
Да, будет
@@UCanDo Супер! Диоды наверное от комбинаций при нескольких нажатиях нужны, в игровых клавиатурах ставят много диодов.
очень познавательно и конструктивно !) благодарность автору , но можно вопрос?
Спасибо за отзыв! Да, конечно, постараюсь помочь чем смогу
как можно с вами связаться? консультация ваша нужна
Вы можете обратиться за помощью в мою группу в Телеграмм:
t.me/HomeMadeChannel
А есть такие по i2c или резисторные(3пина). Если возможно то дайте ссылку
Для i2C Используйте расширитель портов PCF857. Вот примеры:
www.hackster.io/venkatesh_rao/i2c-keypad-73a012
playground.arduino.cc/Main/I2CPortExpanderAndKeypads
www.instructables.com/id/Arduino-Nano-I2C-Matrix-Keypad-With-PCF8574PCF8574/
Для подключения по 3-м проводам досмотрите видео до конца.
Gameplayer 55055 россыпь резисторов и аналоговый вход вам поможет. И немного кода.
интересное видео! надо будет "антивандалку" от домофона разобрать, вдруг там схема похожая и ее получится использовать.
а как слово отправить, а то библиотека только одну букву или цифру на английском причем только может отправлять в сериал
Собирать символы в слово и отправлять только по нажатию какой-то кнопки
@@UCanDo кнопку то я нажал, получил например один из 90 символов, например '#', через if получается сделать? если # то pirntserial "Привет" например?
Да, что-то в этом роде
@@UCanDo if (kpd.key[i].kchar='A') {Serial.print("привет ");} заработал такой способ, но слово привет пишет раз двадцать сразу
Обнуляй значение нажатой клавиши
А сделай джойстик для космосимулятора! плиз!
Джойстики для компа или приставок дешевле купить чем самому делать.
А если без 3d печати?
А ещё заместо датчиков Холла используй MPU6050@@UCanDo
@@Drevorub , любое устройство имеет смысл делать только при условии что такого устройства нет в продаже. Если что-то есть в продаже, то любая аналогичная самоделка будет хуже качеством, дороже, и еще нужно учесть время и силы потраченные на программирование и сборку. По этому, если что-то есть в продаже то не нужно «изобретать велосипед». Выигрыша от этого никакого.
Самоделку есть смысл делать только при условии изготовлении устройства которого нет в продаже. Самоделки - это не про экономию, абсолютно.
Это понятно, но в нашей округе приемлемый джойстик Logitech Extreme 3D Pro стоит уже 6.500@@UCanDo
но у меня этот вариант не заработал.....хааххахахааахаахахахахахх ахахахахахахах ахахахахахахх
автор бог)
Сопротивления в принципе на таких клавиатурах быть не должно. Если есть - может что-то с контактами?
Даже если оно там стоит, можно все прозвонить тестером, выяснить, какие сопротивления где установлены, и уже отталкиваясь от этой информации подбирать резисторы.
Похоже на плохой контакт самих кнопок. Скорее всего брак при сборке. На разных кнопках сопротивление разное, а так как это матрица, то сопротивление кнопок вносит разность в ожидаемое сопротивление. В общем должно быть одно, а получается другое. Но проблема в том что на кнопках сопротивление "прыгает" из-за плохого контакта и на разных кнопках получаются примерно одинаковые показатели сопротивления, что делает невозможным отличить одну кнопку от другой. Но это только для подключения по одному проводу. В обычном подключении все нормально работает.
А как управлять с матричной клавиатурой...шаговым или серво двигателем ?????????
1) определите как осуществляется управление мотором
2) узнайте принцип работы клавиатуры
3) соедините два принципа всесте
@@UCanDo 3 пункт не для меня я не программист...
матричная клавиатура катастрофически медленно работает, ничего лучше не существует ?
Клавиатура не может быть медленной. Это просто кнопки. Скорость обработки на прямую зависит от скетча. Возможно он написан не оптимально. От этого и торможения.
спасибо большое! у вас не тормозили кнопки? тормоза 1сек примерно, а одновременно нельзя вообще нажать. Это катастрофически плохо. keypad.h как и в вашем примере пример тестировался. Может кнопки резистрами подтянуть? диоды может нужны? тормозит 1сек примерно.
Ого! Нет, у меня все четко срабатывало.
Можете написать ваш скетч? Попробую глянуть что не так. Вот только у компьютера я буду часа через 3, тогда и смогу посмотреть
@@UCanDo yadi.sk/d/5AUUP7YAYYQ2LA
Добрый день простите за задержку с ответом.
Только что посмотрел код. Сами писали или это чей-то код? Настоятельно рекомендую правильно форматировать код, тогда он нормально читаем. Вот так правильно:
void read_serial() {
if (Serial.available() > 0) {
char ByteRead=Serial.read();
if (ByteRead==13) { //возврат каретки
analyzer(); //передача данных на обработку
bufer="";
} else { //освобождение буфера
//накопление данных в буфер
if(ByteRead!=10)bufer=bufer+char(ByteRead); // символ "новая строка"
, нам в буффере не нужен
}
}
}
Первое на что обратил внимание, если я правильно понял, то кроме подключения и обработки нажатий на клавиатуре еще происходит управляемое, "виртуальное" нажатие кнопок управляемое через сериал? Именно это делает функция analyzer() ? У вас случайно ложных нажатий не бывает? Мне кажется эта функция нарушает работу Keypad.h
Но это нужно проверять.
Дальше, в Setup:
keypad.setDebounceTime(100);
Цитата из библиотеки Keypad.cpp: // Minimum debounceTime is 1 mS. Any lower will slow down the loop().
Немного непонятно относительно чего говорится " Any lower". Относительно увеличения DebounceTime, и тем самым "замедления" кода, или о более низком значении DebounceTime, то есть ниже 1 мс.
Так или иначе, попробуйте вместо
keypad.setDebounceTime(100);
прописать
keypad.setDebounceTime(1);
сделайте калькулятор..... а то, что-то не совсем понятно зачем все это нужно...
:))
Home Made - То, что ты можешь сделать Типа вот такого... DIY Калькулятор Счетчик комплект калькулятор DIY Kit ЖК-дисплей Многоцелевой Электронные калькулятор Электроника вычислений с акриловый чехол
s.aliexpress.com/QJnMZjuY?fromSns=
а калькулятор зачем нужен ?
404Negative затрудняюсь ответить.... а вы что предлагаете...? ;-)... Можно попросить Home made, чтоб сделал платформу на гусеницах с кнопками и модулем mp3... чтоб с кнопок маршрут программировать и чтоб ездила по марруту, мигала светодиодами и пикала в стиле звездных воин и треки проигрывала, можно придумать будильник на гусеницах..... пускай ездит по комнатам и будит трудовой класс, школьников и домохозяек в установленное время....
@@UCanDo Привествую уважаемый автор,,,вот решил повторить на днях Ваше детище,,,и она мне пишет так, "-¿¤~`?*_'°~