Эмулятор мыши, клавиатуры, мультимедия клавиатуры на обычных Adruino UNO/NANO/MINIPRO

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Давно заприметил у Адафрута адаптированную библу V-USB под дижиспарк с довольно широкими возможностями. Захотелось такое-же, но для УНО. Сегодня перенастроил их библу, подойдёт для  любых 16Мгц ардуин на м.к. мега328.  

Что она даёт: можно эмулировать мультимедия клавиатуру, регулировать аппаратно (без драйверов) громкость, плей-пауза-муте, и ещё с десяток спец. клавиш. Можно эмулировать обычную клавиатуру. Эмулировать нажатие до 5 клавиш одновременно, печатать одиночные символы, печатать текст как командой print/println. Так-же можно эмулировать мышь, -двигать курсор, нажимать любую из 3х клавиш. 

Аппаратные требования: отъедает одно прерывание (в библе настроено на INT0) +  ещё пару пинов. Один из которых служит для внешнего  PULL_UP, за счёт этого драйвер программно может включать/отключать USB.  Нельзя тормозить loop, там есть функция, которую нужно запускать не реже 1 раза в 10 мс. Для согласования уровней USB и 5v TTL можно применить такую схему:

Либо можно просто запитать Vcc ардуино от напряжения 3,3 ..3,6 вольта и подключить напрямую.  Библа. Скетч с примерами работы разных функций:

01#include "TrinketHidCombo.h"
02void setup(){
03pinMode(4,INPUT); //USB d- (белый) PORT D4 задан в usbconfig.h
04pinMode(2,INPUT);// USB d+ (зелёный) PORT D2 задан в usbconfig.h
05pinMode (5,OUTPUT);  //программное включение юсб порта PORT D5  задан в usbconfig.h
06TrinketHidCombo.begin(); // start the USB device engine and enumerate
07 
08pinMode(12, INPUT_PULLUP); // кнопки с подтяжкой
09pinMode(11, INPUT_PULLUP);
10pinMode(10, INPUT_PULLUP);
11pinMode(9, INPUT_PULLUP);
12pinMode(8, INPUT_PULLUP);
13}
14 
15void loop(){
16TrinketHidCombo.poll(); // функция должна выполняется не реже 1 раза в 10мс !!!
17 
18// пример работы мультимедиа клавиш
19if (digitalRead(12) == LOW) { while (digitalRead(12) == LOW); // подождать пока кнопку отпустят
20TrinketHidCombo.pressMultimediaKey(MMKEY_VOL_UP); // увеличить громкость
21}
22 
23//пример эмуляции мыши
24if (digitalRead(11) == LOW) { while (digitalRead(11) == LOW);// подождать пока кнопку отпустят
25  TrinketHidCombo.mouseMove(5,5,0); // сдвинуть мышку вниз и вправо на 5 пикселей
26  }
27 
28// пример эмуляции обычной клавиатуры -нажатие нескольких клавиш (для печати не использовать)
29if (digitalRead(10) == LOW) { while (digitalRead(10) == LOW);// подождать пока кнопку отпустят
30TrinketHidCombo.pressKey(0, KEYCODE_H,KEYCODE_E,KEYCODE_L,KEYCODE_O); // нажать "h+e+l+o"
31TrinketHidCombo.pressKey(0, 0); // отпустить все кнопки программно
32
33 
34// пример эмуляции обычной клавиатуры - печать одного символа
35if (digitalRead(9) == LOW) { while (digitalRead(9) == LOW);// подождать пока кнопку отпустят
36TrinketHidCombo.typeChar(0x41); // напечатать букву А (код клавиши в аски)
37
38 
39// пример эмуляции обычной клавиатуры - обычная функция принт (для печати)
40if (digitalRead(8) == LOW) { while (digitalRead(8) == LOW);// подождать пока кнопку отпустят
41TrinketHidCombo.print("Hello, World!"); // напечатать Hello, World!
42
43 
44// коды всех клавиш можно найти в файле  TrinketHidCombo.h
45  delay(1); //паузу можно убрать
46}

 

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

arduinec пишет:

Если цикл while(digitalRead(12) == LOW) будет крутиться до отпускания клавиши, то как TrinketHidCombo.poll(); не реже 1 раза в 10мс будет выполняться.

нужно воткнуть DigiUSB.delay(1); в цикл - иначе клава отвалится.

но, как нажимать более одной кнопки - не понятно.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

dimaxа это точно нужно, если это задано в usbconfig.h ?

тем более, что как минимум один из них всегда не INPUT ?

03 pinMode(4,INPUT); //USB d- (белый) PORT D4 задан в usbconfig.h
04 pinMode(2,INPUT);// USB d+ (зелёный) PORT D2 задан в usbconfig.h

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

arduinec пишет:

Если цикл while(digitalRead(12) == LOW) будет крутиться до отпускания клавиши, то как TrinketHidCombo.poll(); не реже 1 раза в 10мс будет выполняться.

Да, самому не понравилось. Я осознанно нарушил, не хотелось городить огород в примере синтаксиса совсем другой функции. Пробовал держать кнопку долго - USB как ни странно не отваливается. В моём случае никаких кнопок в дальнейшем не предпологалось, поэтому так и оставил.

Клапауций 322,  нет конечно, просто как описание используемых ног :) А DigiUSB.delay() в этой библе по моему нет..

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

dimax пишет:

Пробовал держать кнопку долго - USB как ни странно не отваливается.

т.е. печатает, пока не отпустишь кнопку

TrinketHidCombo.print("Hello, World!"); // напечатать Hello, World!

или один раз?

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

dimax пишет:

DigiUSB.delay() в этой библе по моему нет..

зато, есть delay(1); //паузу можно убрать

если можно убрать, то должно быть где-то в библиотеке - иначе протокол VUSB сожрёт всё время МК и он не будет иметь ресурсов отвечать хосту компьютера.

в библиотеке клавы Дижиспарка есть DigiKeyboard.delay();

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Клапауций 322, с while выполнится один раз, ведь кнопку нужно отпустить для выхода из цикла. А когда loop останавливался из-за цикла while при удерживании нажатой кнопки, то почему-то USB не отваливался, хотя по идее должен был.

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

dimax пишет:

Клапауций 322, с while выполнится один раз, ведь кнопку нужно отпустить для выхода из цикла.

спасибо, разобрался.

dimax пишет:

А когда loop останавливался из-за цикла while при удерживании нажатой кнопки, то почему-то USB не отваливался, хотя по идее должен был.

аналогично - проверил: не отваливается, но забраковал конструкцию - не должно нажатие кнопки останавливать работу всего. разве, что использовать как СТОП-КРАН именно для остановки всего.

01#include <DigiUSB.h>
02 
03void setup() {
04DigiUSB.begin();
05pinMode(3, INPUT);
06digitalWrite(3, HIGH);
07}
08 
09void loop() {
10if (digitalRead(3) == 0) {
11while (digitalRead(3) == 0); // подождать пока кнопку отпустят
12DigiUSB.print("0");
13}
14DigiUSB.delay(1);
15}

 

Balaganoff
Offline
Зарегистрирован: 12.07.2011

То что искал ! Спасибо топикстартеру !

Вот если-бы добавить пару-тройку крутилок-енкодеров, то это-бы для меня был новогодний подарок ! :)

Друзья, помогите чайнику ))

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

Balaganoff пишет:

Вот если-бы добавить пару-тройку крутилок-енкодеров, то это-бы для меня был новогодний подарок ! :)

http://www.pjrc.com/teensy/td_libs_Encoder.html

az3749
Offline
Зарегистрирован: 10.02.2017

очень полезный пост. добавлю и свои 3 копейки:

1. переход с регистра B на D посредством редактирования хедера произошел не полностью -  в TrinketHidComboC.c:49 сохранился захардкоденный B:

1void usbBegin()
2{
3 cli();
4 
5 // run at full speed, because Trinket defaults to 8MHz for low voltage compatibility reasons
6 clock_prescale_set(clock_div_1);
7 
8 // fake a disconnect to force the computer to re-enumerate
9 PORTB &= ~(_BV(USB_CFG_DMINUS_BIT) | _BV(USB_CFG_DPLUS_BIT)); // bug

2. по причине отсутствия стабилитронов 3.6 в использовал альтернативную схему подключения с 2-мя понижающими диодами в цепи питания. оказалось что усб работает и с одним, а то UNO с двумя диодами не работал.  вместо стабилитронов использовал также синии светодиодики - у них падение напряжения 3.5в - очень прикольно моргают во время сеанса. горят ярко - поэтому вообщето надо пожалеть дуню и включать их через резистор 200 ом хотя бы.

3. нашел более устойчивую и профессиональную реализацию библиотеки HID на той же основе v-usb:

http://rayshobby.net/hid-class-usb-serial-communication-for-avrs-using-v...

после подкручивания значений пинов работала очень надежно - правда потом я что-то испортил в процессе "улучшения".

4. усб запускается с 3-го а иногда и с 10-го раза. поэтому очень помогает применить ватч-дога wdt чтобы дуня сама через 8 секунд перегружалась.

SeregaSher
Offline
Зарегистрирован: 19.09.2015

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

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

SeregaSher, если вопрос в свете обсуждаемого эмулятора -то клавиатура в принципе не может отличить на  каком языке вы печатаете. Для перехода на русский нужно предварительно включить соответсвующий хоткей, определённый операционной системой.

webprog
Offline
Зарегистрирован: 08.12.2017

dimax, спасибо за проделанную работу. На компьютере всё отлично работает. К сожалению, собранное устройство не определяется на Андроиде, ради которого я собственно и начал этим заниматься. Есть соображения, с чем это может быть связано?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

webprog, на андроиде работает 100% - самолично проверял и на  смартфоне и на планшете.

webprog
Offline
Зарегистрирован: 08.12.2017

dimax, действительно, сейчас начал проверять на SGS6 - работает, а на Note никак. Реальные устройства, в том числе мышка с клавиатурой с одним адаптером работают нормально. Буду разбираться...

mr.robot
Offline
Зарегистрирован: 03.01.2018

я хотел бы узнать , можноли использовать стабитроны на 3.3 В вместо 3.6 В

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

mr.robot, не желательно. Уровни там конечно 3,3вольта, но стабилитрон на 3,6 что бы не подрезать уровень входящих сигналов от хоста. В самом крайнем случае можно взять стабилитроны на 3,3.

 

mr.robot
Offline
Зарегистрирован: 03.01.2018

спасибо большое 

а то у меня при подключении комп выписывает ошибку

 

jayewardenepura
Offline
Зарегистрирован: 11.03.2018

Всё подключил по схеме, запитал VCC Arduino pro mini 3,6В с БП. Стабилизаторы не подключал. Скетч залил, при подключении к компьютеру никакой реакции. Может есть ещё какие подводные камни? На что стоит обратить внимание?

zert
Offline
Зарегистрирован: 08.07.2016

Здравствуйте, подскажите варианты схем, если нет стабилитронов, а то три резистора, не пойму как с ними быть. Да вопрос тупой понимаю, вот ниже парень говорит про диоды понижающие, а потмом речь идет про светодиоды, путает(запутал, те он использовал и диоды и светодиоды). Из всего написанного я так понял, можно либо взять источник питания сразу на 3,3, тогда что значит подключить на прямую(резистор хоть один останется? как их там между собой соединять )? Другой вариант - использовать только резисторы со светодиодом, чтобы понизить выходной сигнал 5V до 3.6 - может ктонить показать примитивную схему последнего варианта? 
На руках имеется Arduino Pro Mini 3.3V, 8MHz, какую схему реализовывать на ней. Путает меня соединение с 4 и 5 цифрового порта .

az3749 пишет:

очень полезный пост. добавлю и свои 3 копейки:

1. переход с регистра B на D посредством редактирования хедера произошел не полностью -  в TrinketHidComboC.c:49 сохранился захардкоденный B:

1void usbBegin()
2{
3 cli();
4 
5 // run at full speed, because Trinket defaults to 8MHz for low voltage compatibility reasons
6 clock_prescale_set(clock_div_1);
7 
8 // fake a disconnect to force the computer to re-enumerate
9 PORTB &= ~(_BV(USB_CFG_DMINUS_BIT) | _BV(USB_CFG_DPLUS_BIT)); // bug

2. по причине отсутствия стабилитронов 3.6 в использовал альтернативную схему подключения с 2-мя понижающими диодами в цепи питания. оказалось что усб работает и с одним, а то UNO с двумя диодами не работал.  вместо стабилитронов использовал также синии светодиодики - у них падение напряжения 3.5в - очень прикольно моргают во время сеанса. горят ярко - поэтому вообщето надо пожалеть дуню и включать их через резистор 200 ом хотя бы.

3. нашел более устойчивую и профессиональную реализацию библиотеки HID на той же основе v-usb:

http://rayshobby.net/hid-class-usb-serial-communication-for-avrs-using-v...

после подкручивания значений пинов работала очень надежно - правда потом я что-то испортил в процессе "улучшения".

4. усб запускается с 3-го а иногда и с 10-го раза. поэтому очень помогает применить ватч-дога wdt чтобы дуня сама через 8 секунд перегружалась.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

zert пишет:

На руках имеется Arduino Pro Mini 3.3V, 8MHz, какую схему реализовывать на ней.

Максимально внимательно перечитайте 2 строчку топика.

zert
Offline
Зарегистрирован: 08.07.2016

Спасибо, я видел ее, думал, может уже, что изменилось

Хотел бы спросить , если можно стабилитроны заменить на связку светодиод-резистор для получения 3,6 В, подскажите пожалуйста, как должна выглядеть схема в конечном виде, мне просто абсолютно не понятна развяка 3х цифровых портов Ардуины и 2x каналов usb D+ и D-

dimax пишет:

zert пишет:

На руках имеется Arduino Pro Mini 3.3V, 8MHz, какую схему реализовывать на ней.

Максимально внимательно перечитайте 2 строчку топика.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

zert, про светодиоды это было личное мнение товарища az3749. Я это не одобряю, во избежание глюков не стоит ничего менять в схеме подключения. Стабилитроны есть в любом радиомагазине.

zert
Offline
Зарегистрирован: 08.07.2016

dimax пишет:

zert, про светодиоды это было личное мнение товарища az3749. Я это не одобряю, во избежание глюков не стоит ничего менять в схеме подключения. Стабилитроны есть в любом радиомагазине.

Спасибо, за столь оперативный ответ, очень важное для меня замечание(не буду городить сарай). Я знаю, что это ходовой товар, уже заказал с Алиэкспресса, но руки чешутся уже сейчас, плохо, что радио магазинов и в помине нет, там где я живу.

demitro
Offline
Зарегистрирован: 01.05.2018

Простите, быть может за глупый вопрос, будет ли данная библиотека работать на atmega8 с внешним кварцем 16Mzh?

kalabaha
Offline
Зарегистрирован: 20.05.2018

Здравствуйте. Подскажите пожалуйста можно ли как нибуть переместить курсор указав абсолютные координаты а не относительные? Тоесть не на сколько пикселей сдвинутся курсору а на какие именно перейти.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Можно.

Нужно взять текущие координаты, вычесть их из требуемых абсолютных и полученные значения указать в качестве смещения курсора.

kalabaha
Offline
Зарегистрирован: 20.05.2018

В данный момент так и делаю. Но в таком случае нужно знать начальные координаты перед подключением ардуинки к ПК.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Естественно.

XurRound
Offline
Зарегистрирован: 24.06.2018

Будет если кое-что подправить.

reodos
Offline
Зарегистрирован: 24.07.2016

zert пишет:

Здравствуйте, подскажите варианты схем, если нет стабилитронов, а то три резистора, не пойму как с ними быть. Да вопрос тупой понимаю, вот ниже парень говорит про диоды понижающие, а потмом речь идет про светодиоды, путает(запутал, те он использовал и диоды и светодиоды). Из всего написанного я так понял, можно либо взять источник питания сразу на 3,3, тогда что значит подключить на прямую(резистор хоть один останется? как их там между собой соединять )? Другой вариант - использовать только резисторы со светодиодом, чтобы понизить выходной сигнал 5V до 3.6 - может ктонить показать примитивную схему последнего варианта? 
На руках имеется Arduino Pro Mini 3.3V, 8MHz, какую схему реализовывать на ней. Путает меня соединение с 4 и 5 цифрового порта .

Походу, при выкидывании стабилитронов, резисторы нужно оставить все.

Нашел на просторах интернета такую схему:

Источник:https://www.obdev.at/products/vusb/index.html

nevkon
Offline
Зарегистрирован: 20.01.2015

Тоже интересует вопрос - реально ли завести библиотеку на atmega8a? Хочется сделать пульт для станочка, а голые МК только atmega8а и atmega128. Хотелось бы еще и без кварца завести, но можно поставить если без него никак (есть и на 12МГц и на 16МГц).

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

можно без кварца, от внутреннего генератора на 8 МГц. (AtMega8)

reodos
Offline
Зарегистрирован: 24.07.2016

DetSimen пишет:

можно без кварца, от внутреннего генератора на 8 МГц. (AtMega8)

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

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

nevkon, библиотеку можно переделать почти под любые м.к. AVR, но она не ардуино-френдли, со всеми вытекающими последствиями. Так что проще купить мегу328, чем тратить многие часы(а то и дни) в тщетных попытках разобраться:)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ок.  Конкретно эта биб-ка на 8 Мгц без кварца не работает.  Уйню-с сморозил-с. Прошу простить.

b707
Offline
Зарегистрирован: 26.05.2017

ок, коллеги, а для чего вообще это надо - клаву эмулировать? Что-то у меня фантазии не хватает. Поделитесь примерами, а то может и мне надо, а я сижу...

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

b707, дисташка для компа, внешние  мультимедия регуляторы, перебиратели паролей, автоматические кликеры для заработка в инете, итп :)  

reodos
Offline
Зарегистрирован: 24.07.2016

Ну я планирую сделать девайс, нажимающий клавишу "B" на клавиатуре при открытии дверей в каптерку. Клавиша "B" (BOSS) в некоторых видеоплеерах останавливает воспроизведение и сворачивает плеер). Но можно например сделать девайс вводящий сложные пароли при нажатии соответствующих кнопок на ардуине, своеобразный хранитель паролей. Видел видео, там чел эмулировал движение мыши на 2 пикселя туда-сюда, чтоб экран не блокировался на работе. Можео макросы загнать. Можно над колегами подшутить, написать беспорядочное движении мыши по таймеру, да куча всяких вариантов. Проект полезный. 

reodos
Offline
Зарегистрирован: 24.07.2016

dimax пишет:

b707, дисташка для компа, внешние  мультимедия регуляторы, перебиратели паролей, автоматические кликеры для заработка в инете, итп :)  

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

reodos
Offline
Зарегистрирован: 24.07.2016

nevkon пишет:

Тоже интересует вопрос - реально ли завести библиотеку на atmega8a? Хочется сделать пульт для станочка, а голые МК только atmega8а и atmega128. Хотелось бы еще и без кварца завести, но можно поставить если без него никак (есть и на 12МГц и на 16МГц).

Цитата со статьи:"Для USB-совместимого низкоскоростного устройства необходимо декодировать бит потока 1,5 Мбит / с. Для процессора с тактовой частотой 12 МГц это означает, что у нас есть 8 циклов процессора для каждого бита. Будучи RISC-процессором, AVR выполняет большинство инструкций за один такт. Это дает нам примерно 8 инструкций для выполнения следующих операций над каждым битом:"

Источник:https://www.obdev.at/articles/implementing-usb-1.1-in-firmware.html

Я думаю 8 МГц маловато будет.

reodos
Offline
Зарегистрирован: 24.07.2016

b707 пишет:

ок, коллеги, а для чего вообще это надо - клаву эмулировать? Что-то у меня фантазии не хватает. Поделитесь примерами, а то может и мне надо, а я сижу...

Проекты на основе V-USB

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

reodos, на дижиспарке эта библа как известно работает без кварца, но там тактовую 16МГц поддерживает встроенный RC-генератор, плюс  при старте запускается специальная функция, которая подстраивает регистр osccal синхронизируясь от клоков USB. Собссно из-за этого  дижиспарк и глюкавый :)

PS: Вообще эта тема создавалась в 2015 году,  когда не было дешевых плат на чипах mega32U4, сейчас нет смысла городить на меге328, гораздо удобнее взять промикро или прочие леонардо-образные платы. Благо под них есть шикарная библиотека, которая может вообще всё. Ссылка на всякий случай.

reodos
Offline
Зарегистрирован: 24.07.2016

dimax, полностью согласен, но дело в том что мне китайцы по ошибке прислали 10 штук промини на меге 328, поэтому мне эта тема актуальна ). Ну и мало ли еще есть люди у которых есть запасы мег328 и лень покупать чтото другое )

maxibons
Offline
Зарегистрирован: 27.12.2015

Приветствую завсегдатаев!

Неожиданно возникла нужда сделать эмулятор нажатия ЛКМ, нагуглилась эта тема.

Ардуины лежат в ящике года 2, заниматься некогда, опыт на задворках.

Потому прошу подсказать на два вопроса:

1. Можно ли питание +5 юсб подать через кренку 1117, а дата-линии шунтировать светодиодами, дабы стабилитроны не разыскивать?

2. Если я повешу на кнопку ардуины кнопку мыши и стану удерживать на ардуине кнопку нажатой - будет ли это создавать многочисленные нажатия мышки?

Спасибо!

UPD: увидел что кренка вообще не нужна... =) остальные вопросы актуальны, особенно второй =)

nevkon
Offline
Зарегистрирован: 20.01.2015

Ну так нажатие и удержание кнопки и многочисленные нажатия это разные вещи.

Лучше купить стабилитроны и не париться с вопросом. Благо стоит копеек даже в местных магазинах.

maxibons
Offline
Зарегистрирован: 27.12.2015

Ок. Переформулирую вопрос:

Мне нужно, чтобы пока я держу нажатой кнопку ардуины, она отправляла многократные нажатия мышью.

Эта библиотека мне пригодится для моих целей?

Про стабилитроны согласен. Только я бы перенёс резисторы 68 ом вправо от точек подключения стабилитронов (по схеме в стартовом сообщении).

Vladi-mir
Offline
Зарегистрирован: 19.10.2018

Помогите пожалуйста, не могу скомпилировать скетч. Скачал "Библу" по ссылке вверху. Создал новый скетч и вставил код из примера вверху. Распаковал содержимое TrinketHidCombo_MEGA328 в папку со скетчем. Но при попытки компиляции выдает ошибку:

In file included from sketch/TrinketHidComboC.c:26:0:
sketch/usbdrv/usbdrv.h:12:23: fatal error: usbconfig.h: No such file or directory
compilation terminated.
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.

Vladi-mir
Offline
Зарегистрирован: 19.10.2018

Помогите пожалуйста, не могу скомпилировать скетч. Скачал "Библу" по ссылке вверху. Создал новый скетч и вставил код из примера вверху. Распаковал содержимое TrinketHidCombo_MEGA328 в папку со скетчем. Но при попытки компиляции выдает ошибку:

In file included from sketch/TrinketHidComboC.c:26:0:
sketch/usbdrv/usbdrv.h:12:23: fatal error: usbconfig.h: No such file or directory
compilation terminated.
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.

В папке usbdrv нет файла usbconfig.h, но он есть выше, припопытке скопировать его в папку usbdrv и повторной компиляции выдает:

 

In file included from /home/vladimir/.arduino15/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/avr/include/avr/io.h:99:0,
                 from sketch/usbdrv/usbportability.h:120,
                 from sketch/usbdrv/usbdrvasm.S:18,
                 from sketch/usbdrvasm_includer.S:24:
sketch/usbdrv/usbdrv.h:615:33: error: operator '*' has no left operand
 #       define USB_INTR_PENDING EIFR
                                 ^
sketch/usbdrv/usbdrvasm.S:73:5: note: in expansion of macro 'USB_INTR_PENDING'
 #if USB_INTR_PENDING < 0x40 /* This is an I/O address, use in and out */
     ^
In file included from sketch/usbdrvasm_includer.S:24:0:
sketch/usbdrv/usbdrvasm.S:384:34: fatal error: usbdrvasm16.inc: No such file or directory
compilation terminated.
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.

Vladi-mir
Offline
Зарегистрирован: 19.10.2018

[quote=Vladi-mir

[/quote]