Вопрос по массиву Char и преобразованию
- Войдите на сайт для отправки комментариев
Вс, 13/05/2018 - 19:44
Как я могу использовать KEY_RETURN в Keyboard.press(); ?
Если KEY_RETURN будет находиться в массиве char:
char key [] = {'K','E','Y','_','R','E','T','U','R','N','\0'};
А как Вы его хотите использовать? Чего хотите добиться?
Как я могу использовать KEY_RETURN в Keyboard.press(); ?
Если KEY_RETURN будет находиться в массиве char:
char key [] = {'K','E','Y','_','R','E','T','U','R','N','\0'};
https://www.arduino.cc/en/Reference/KeyboardPress
Arduino_Novichok, KEY_RETURN и "KEY_RETURN" - совершенно разные константы.
Arduino_Novichok, KEY_RETURN и "KEY_RETURN" - совершенно разные константы.
Возможно ли преобразовать "KEY_RETURN" в KEY_RETURN ?
чтобы запихнуть в Keyboard.press(KEY_RETURN);
или только так для каждой клавиши:
if (key == "KEY_RETURN") {Keyboard.press(KEY_RETURN);}
Возможно ли преобразовать "KEY_RETURN" в KEY_RETURN ?
чтобы запихнуть в Keyboard.press(KEY_RETURN);
Нет.
или только так для каждой клавиши:
if (key == "KEY_RETURN") {Keyboard.press(KEY_RETURN);}
Боюсь, что и так тоже нельзя. Хотя, это зависит от типа данных key.
Вы же скрипт не показываете - шифруетесь. Так что помочь Вам крайне затруднительно.
Не шифруюсь - вот всё
Я передаю из C# на Leonardo "1KEY_RETURN"
KEY_RETURN существует в тексте программы только до компиляции. В откомпилированном коде никакой KEY_RETURN нет. Соответственно, объяснить контроллеру что "KEY_RETURN" надо ставить в соответствие KEY_RETURN, а точнее число 176 (или какое там у Вас получилось) можно либо приведенным Вами способом либо более или менее аналогичным. Ну т.е. можни применять таблицы, массивы и т.д., но суть останется прежней: строке "KEY_RETURN" нужно поставить в соответствие число 176.
andriano
Спасибо Вам ! Теперь всё стало понятно, я же думал что я могу превратить "KEY_RETURN" в KEY_RETURN
Буду думать над иными способами с конвертацией {'1','7','6'} в int или кучу условий вешать xD
Не шифруюсь - вот всё
Если так, то так как Вы писали
или только так для каждой клавиши:
if (key == "KEY_RETURN") {Keyboard.press(KEY_RETURN);}
не получится. Строки так не сравниваются.
Все-таки, мне кажется, Вы пытаетесь применить какой-то очень неоптимальный алгоритм.
Вы увероены, что в качестве промежуточного формата целесообразно использовать текстовую строку?
Вы увероены, что в качестве промежуточного формата целесообразно использовать текстовую строку?
Я не могу знать) - я только учучь и осваиваю, да ещё и не с того конца начал.
Но пока выбрал сhar из за того что могу его использовать и как string и при необходимости преобразовывать в int.
Смотришь, какое значение имеет константа KEY_RETURN в исходниках Keyboard.h. На стороне C# создаёшь enum с нужными значениями, например:
Передаёшь в ардуину по Serial либо строку, которую разбираешь на приёмной стороне, либо - набор байт, обозвав его пакетом. Скажем, в пакете всегда два байта: первый байт - идентификатор команды, второй байт - дополнительные данные. Условимся, что байт со значением 1 - у нас означает команду "нажать клавишу". На стороне C# в порт пишешь:
На стороне ардуины принимаешь:
Профит, никаких строковых констант.
Wow - спасибо. Буду переваривать.
Не знал что могу считать сначало команду , а затем параметр, думал нужно всё одной строкой посылать.
И эту строку уже разбирать.
А как быть , если мне нужно отправить целое предложение.
Keyboard.write("Очень большое предложение !");
Со строкой всё очень просто, а как с байтами ?
DIYMan, сдается мне, что KEY_RETURN уже определена где-то в недрах Keyboard.h и дополнительно определять ее не нужно.
Arduino_Novichok, информация в Serial передается последовательно по одному байту. Обычно, наоборот, у новичков возникают вопросы, как передать многобайтовыю переменную.
В любом случае, мы можем передавать по одному байту и читать по одному байту; передавать несколько байт, а читать по одному; передавать по одному, а читать - несколько и т.д. Т.е. между устройствами идет просто поток байтов, а как мы ими распорядимся - наше дело.