Купил ардуино леонардо, подключаю его к юсб порту подрубаю ему библиотеку keybord.h хочу чтоб он открывал текстовую консоль самостоятельно и выполнял кусок кода, все работает, НО.... как сделать так чтоб данная игрушка проверяла язык ввода символов, а то давал пару раз аборигенам, они были вшоке: - "что то выскакивает, что то выскакивает, а потом исчезает и лог тебе не отправлен в итоге." Помогите дилетанту...
можно сделать через альт-коды но там вроде тоже может не сработать если нумлок выключен или типа того не помню уже.
клава посылает коды клавиш. Ни про какой язык она никогда не слышала, да и что там на клавишах нарисовано ей глубоко фиолетово.
Обработчик скан-кодов от клавы сторожит приход кода переключения языка, например "Ctrl+Shift". Устанавливает/сбрасывает флаг и перекодирует сканы по флагу.
не очень понял - это как именно? допустим у ТС ардуина в виде клавиатуры, ему чтобы писать русскими буквами например надо знать какая раскладка в данный момент выбрана в компе. Как ардуина может это узнать, если это не она переключала? хотя наверно я не понял что имелось в виду. Насколько я помню клавиатура может получать только состояния капслока, нумлока и скроллока. (кстати можно для ввода аль-кодами таким образом отследить включен ли нум-лок)
Не знаю, как в винде, но моя убунта при русской раскладке включает индикатор ScrollLock, и при английской выключает... Можно было бы воспользоваться...
Говорил препод в универе - "В наличие отсутствие какого-либо присутствия". Короче, какой вопрос - такие ответы. Я понял,что к Ардуине подключают "магазинную" клаву, а Ардуину к компу. И задача Ардуины понимать переключение языка. Это как - сканирует матрицу кнопок ? Это что-то из пещерного века. Индикаторы КапсЛок, НумЛок и СкроллЛок - процессор клавиатуры включает по командам от компа. Сами скан-коды клавы не меняются (вроде...)..
я так понимаю - ардуину подключат к компу, и нужно чтобы она притворившись клавиатурой в определенный момент нажала заранее запрограммированную или посланную в нее через какой-нибудь вайфай или блютус последовательность клавиш. но это не точно
чет сложно получается. Если вопрос только во вводе нужных букв, то самое простое мне кажется альт-коды. ☺☻♥♦♣♠ любый буквы можно вводить независимо от раскладки. возможно даже нумлок не будет мешать. Но для начала лучше узнать что конкретно делает ардуина Топикстартера
Вы все верно поняли! Да взял на али экспрес ардуинку в виде флешки, комп определяет как леонардо,И вот это штука должна кнопки нажимать в системе сама, понимаю что можно .bat'ником оформить но жаль же потраченых 265 рублей У кого какие варианты будут, с отправкой самому себе и альт коды, обрисуйте реализацию.
ага, это ж ардуина. Но я понял, тут ком-портов не хватает. Только, если присоединить к ней uart-usb, то можно такое провернуть и определить раскладку. (если вообще можно из консоли передавать данные)
На леонарде можно и 2, и 3 компорта открыть. А рядом HID пристроить. А внутри из одного в другой посылать.
с альт-кодами вроде все просто - зажимаешь альт (то есть ставишь модификатор в 0x04), отправляешь нажатие, потом с тем же модификатором отправляешь нажатие с кнопкой кейпада (0x59-0x61 это 1-9, 0x62 это 0), так повторяешь для всех нужных цифр. потом все обнуляешь и отправляешь пустой репорт. я использовал v-usb, там делал такую корявую функцию: Код (C++): //if 1st digit=0(Ins) - set zero=0 else zero=1. e.g.: // alt_input(0,138); // Alt0138 - Љ // alt_input(1,138); // Alt138 - К static void alt_input(uint8_t zero , uint8_t code){ uchar dig[4]; int8_t i; for(i=0; i<4; i++){dig[i]=0;} for(i=3; (i>=0 && code!=0); i--){ dig[i]=code%10; code=code/10; } i=0; while(dig[i]==0){i++;} if(zero==0){i--;} while(i<4){ keyboard_report.report_id=1; keyboard_report.keycode[0] = 0; keyboard_report.modifier = (1<<2); send_report_once(); if(dig[i] == 0){ keyboard_report.keycode[0] = 98; keyboard_report.modifier = (1<<2); }else{ keyboard_report.keycode[0] = 88 + dig[i]; keyboard_report.modifier = (1<<2); } send_report_once(); i++; } keyboard_report_reset(); // release keys send_report_once(); wdt_reset(); } еще к этому желательно запилить функцию пересчета букв в альт-коды смотря в каком виде они поступают изначально. А еще там два способа - с нулем в начале и без, надо смотреть таблицы и разбираться. с ардуиновой библиотекой конечно будет не так как с в-юсб, но вроде там штуки аналогичные keyboard_report.keycode, keyboard_report.modifier, send_report_once(), keyboard_report_reset() и т.п. Вот их найти в библиотеке и из них склепать нужную функцию. Как отслеживать включенность нум-лока с адруиновой библиотекой не знаю, но скорее всего тоже можно. Но мне кажется в принципе не очень метод с ардуиной - а вдруг во время ввода на компе кто-то что-то будет вводить с клавиатуры или мышью ткнет - всё собьется нафиг
Открываю одно консольное окно и получаю идентификатор процесса, отображаю его. Код (Bash): alex@lenovo-e480:~$ echo $BASHPID 3138 alex@lenovo-e480:~$ Открываю другое консольное окно и делаю тоже самое Код (Bash): alex@lenovo-e480:~$ echo $BASHPID 3195 alex@lenovo-e480:~$ Теперь из другого консольного окна отправлю пару строк, на кириллице и на английском, в stdout первого окна Код (Bash): alex@lenovo-e480:~$ echo $BASHPID 3195 alex@lenovo-e480:~$ printf "\nThe test\nЭто проверка\n" >/proc/3138/fd/1 alex@lenovo-e480:~$ А вот что получилось в первом окне Код (Bash): alex@lenovo-e480:~$ echo $BASHPID 3138 alex@lenovo-e480:~$ The test Это проверка