Помогите новичку)

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Добрый день!

Заранее извиняюсь за глупые вопросы, т.к ранее не связывался с темой программирования!!

 

Выбираю МК для преобразования комманд поступающих по RS-232 протоколу в USB команды эмулирующие нажатие клавиш на клавиатуре.

Это вообще возможно?

Если возможно подойдет ли платформа Andurino UNO R3?

Спасибо!!!

 

yul-i-an
yul-i-an аватар
Offline
Зарегистрирован: 10.12.2012

Гугли - Ардуино эмулятор клавиатуры.

MacSim
Offline
Зарегистрирован: 28.11.2012

at90usbxxx и луфу рекомендую

или связку наподиби мах232 и ср2101 без програмирования.

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Спасибо за совет!

 

 

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Добрый день!

 

Заранее извиняюсь за кривые вопросы!

Поигрался с Andurino UNO R3 поделал базовые вещи, потом свои скетчи поделал, вроде базовое понимание получил.

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

Теперь попробую более конкретезировать свой вопрос( имея теперь небольшое понимание):

У меня есть устройство на линуксе закрытое - в него я не могу нечего заинсталировать или войти в командную строку, но  оно может без проблем управляться клавиатурой и мышью, соответственно я хочу подключить с одной стороны это устройство в него воткнуть USB подключенный к UNO, а к UNO подключить комп по RS или по WIFI, сделать простую програмку с макросами и управлять этим устройством.

Соответственно мне не понятно могу ли я подключить USB к цифровым пинам UNO и RS232 к rx tx пинам не трогая USB для заливки скетчей. С Wifi более понятно можно подключить модуль без проблем, но опять возникает вопрос про USB.

 

Спасибо!

 

 

 

 

 

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

Zlodey2 пишет:

Соответственно мне не понятно могу ли я подключить USB к цифровым пинам UNO и RS232 к rx tx пинам не трогая USB для заливки скетчей. С Wifi более понятно можно подключить модуль без проблем, но опять возникает вопрос про USB.

Не совсем поняоно, что Вы подразумеваете под USB. Если разъем - то нельзя. Нужна микросхема-преобразователь.

Отдельно придется позаботиться о том, чтобы объяснить устройству, чтобы оно думало, что к нему подключены именно мышь и клавиатура.

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

SoftwareSerial - если прокатит.

Но если на ардуино поднимаешь HID - неуверен, что будет работать...

Не пробовал никогда.

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

Zlodey2 пишет:

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

На какие форумы вы полезли? Всё здесь, никуда лазить не нужно. Поднимаете свой взор на самый верх страницы, в строке поиска  забиваете " эмулятор клавиатуры" первая же ссылка ведёт на мой пост где всё разжевно.

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Спасибо!!!

Это вроде то что надо!

Если можно пару уточнающих вопросов:

1. Как я понял разъём USB подключается по схеме напрямую к UNO, а второй стороной конектится к компу?

2. К разъемам 8-12 подключены кнопки при нажатии которых, выполняются действия?

3. Если мне не нужны кнопки, а я хочу управлять из под командной строки, как мне подключить RS от компа, через MAX232 или можно тоже на прямую только питание дать 3.3V, если можно то нет ли ссылки на схемку?

Спасибо за пояснения и наводку на пост!!!!)

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

Zlodey2, 1 -да. 2-да, в качестве примера. 3 -через max232. Схему любой поисковик подскажет.

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Спасибо!!

Схема max232 есть, остальное пока понятно, куплю USB разьемы буду тестить.

 

 

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Я тут подумал и понял, что я тупанул, rs232 это 10-15 метров, соответственно лучше использовать ethernet шилд.

Только вот пока не разобрался нужен шилд обезательно или можно просто на ножки посадить разъем и какие команды можно передовать по ethernet протоколу или придется библиотеку делать?

Скорей всего это глупый вопрос, просто темы ethernet еще не касался, так как хотел делать на rs232.

 

Спасибо!

JasKo
Offline
Зарегистрирован: 21.11.2015

Zlodey2 пишет:

Я тут подумал и понял, что я тупанул, rs232 это 10-15 метров, соответственно лучше использовать ethernet шилд.

Только вот пока не разобрался нужен шилд обезательно или можно просто на ножки посадить разъем и какие команды можно передовать по ethernet протоколу или придется библиотеку делать?

Скорей всего это глупый вопрос, просто темы ethernet еще не касался, так как хотел делать на rs232.

 

Спасибо!

Если зона 232го мала - используй 485й.

Zlodey2
Offline
Зарегистрирован: 07.07.2016

В любом случае начну с 232, а потом уж разберусь, главное принцип уже понятен.

 

Спасибо!

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Добрый день!

В процесее работы понял, что отправлять команды по com порту не очень удобно (в период отладки),

хотя в таком режиме все работает хорошо. Почитав интернет узнал о Proccesing, набросав маленький скетч для теста столькнулся с проблемой, при нажатии кнопки по com порту сыпится сразу все данные ( из под всех кнопок), скетч ниже:

 

import controlP5.*;
import processing.serial.*;
int val ;
Serial myPort;
ControlP5 cp5;

int myColor = color(240);

void setup(){
  size(800,600);
  noStroke();
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
  cp5 = new ControlP5(this);
  cp5.addButton("knopka1")
  .setValue(0)
  .setPosition(10,100)
  .setSize(100,40)
  ;
  cp5.addButton("knopka2")
  .setValue(0)
  .setPosition(10,150)
  .setSize(100,40)
  ;
  cp5.addButton("knopka3")
  .setValue(0)
  .setPosition(10,200)
  .setSize(100,40);
}

void draw() {
  background(myColor);
 
}

public void controlEvent(ControlEvent theEvent){
   myPort.write(theEvent.getController().getName());
}

public void knopka1(int val) {
  myPort.write("a button event from knopka1:" +'a');

    }

public void knopka2(int val) {
  myPort.write("a button event from knopka2:" +'b');
 }
public void knopka3(int val){
  myPort.write("a button event from knopka3:" +'c');
}
 

Может кто занет, а то уже неделю мучаюсь.

 

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Добрый день!

Со скетчем разобрался)).

Поехал в ЧИП ДИП купил железки к своей UNO, а именно MAX-3232board.

 

 

 

 

Не пойму как подружить Com порт компа с данным девайсом.

Пробовал разные варианты и SoftwareSerial и Serial1( но как позже понял с UNO это работать не будет) и еще несколько вариантов, результатов нету вообще никаких((((

Подключаю RX на 10( для UNO это TX) пин TX на 11(как я понял на UNO нельзя использовать пины 0,1 RX TX) GND на GND ну и VCC на 5V.

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

Спасибо!

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

У UNO нет Serial1 (это у Mega их несколько), у UNO просто Serial. Зачем Вам SoftwareSerial? Пины 0, 1 как раз предназначены для аппаратного Serial. Подключаете TX-RX, RX-TX, VCC-5V, GND-GND. Никаких библиотек не надо, в setup() инициализируете Serial.begin(скорость) и работаете с сериалом как обычно. Поскольку там разведены ещё CTS и RTS, возможно их тоже надо задействовать (подключить к любым цифровым пинам). Это "разрешающие сигналы" для передачи информации. В частности сигнал CTS (низкий уровень, LOW), который подаёт устройство (в нашем случае Ардуина) - разрешает компьютеру передавать данные для этого устройства. По идее, CTS можно просто повесить на GND, а RTS пока не трогать. Тут подробно расписано - http://bsvi.ru/signaly-kvitirovaniya-rts-cts-itp-i-rs232-voobshhe/

UPD: Да, если задействовать аппаратный Serial (пины 0, 1) - это то же, что и передавать данные через USB ардуины. То есть, нелзья работать с пинами 0, 1 и одновременно передавать информацию через USB Ардуины.

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Спасибо!

Насколько я понял схему UNO, пины 0 и 1 запаралелены с USB?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Да, забыл добавить. Если задействовать аппаратный Serial (пины 0, 1) - это то же самое, что и передавать данные на ПК через USB ардуины. То есть, нельзя работать с пинами 0, 1 и одновременно передавать информацию через USB ардуины. Тогда действительно нужно использовать библиотеку SoftwareSerial, чтобы использовать другие пины (не 0, 1)

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Добрый день!

Исходя из тестов, как я понимаю если использовать пины 0 и 1 USB разъем вообще должен быть отсоеденен, иначе получается конфликт.

Правильно я понимаю, что при такой схеме мне поможет только блок питания для UNO?

 

Спасибо

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Добрый день!

Разобрался все заработало, теперь буду переходить к подключению USB разъема)))

Zlodey2
Offline
Зарегистрирован: 07.07.2016
void setup() {
  // open the serial port:
  Serial1.begin(57600);
  while (!Serial1) {
  // initialize control over the keyboard:
  Keyboard.begin();
  }
}
void loop() {
  if (Serial1.available() > 0) {
    char inChar = Serial1.read();
    switch (inChar){

    case '1' :

    Keyboard.press(KEY_LEFT_SHIFT);
    Keyboard.press(KEY_F7);
    delay(100);
    Keyboard.releaseAll();
    break;
    case '2': 
    Keyboard.press(0x85);
    Keyboard.press(KEY_F6);
    Keyboard.releaseAll();
    break;
    case 'a':
   Keyboard.press(0x82);
    Keyboard.press(KEY_F7);
    Keyboard.releaseAll();
    break;
    

    
  }
}
}

Добрый день!

 

В общем с UNO все удалось, но почему-то принимающее устройство не захотело принимать нажатия типа Shift+F7, хотф все было правильно, большое спасибо Dimax за помощь.

Купил Leonardo докупил переходник cp2102(удобная вещь), накидал скетч, но опять тоже самое(((((

Менял скорость порта, ничего(((

Пробую с ноутбуком все работает!!, с моим девайсом при нажатии SHIFT+F7 только F7 проходит и все(((, хотел уже забить на это, но не могу, не понимаю почему так, если все перепробованные мной обычные клавиатуры работают нормально, насколько я понял из прочитанного в HID для винды и линукса разницы нету.

 

Вытащил платку из обычно клавиатуры, но пока не придумал как туда ардуино пристроить))

 

Вобщем не знаю что и делать((((

Может есть идеи у кого-нибудь?

 

Спасибо!

 

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

Zlodey2:  Эмуляторы на МК это не только клавиатура, а сразу несколько устройств в одном, и идентифицирует они себя по другому, не так как обычная клава. Идеи вам не помогут, тут нужны знания что б менять VID/PID, дескрипторы и прочее что б подогнать идентификацию и формат данных в точности как у аппаратной клавы.

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Dimax, спасибо еще раз!

Походу это уже слишком для меня))

Речь о том, что надо посмотреть VID\PID реальной клавы и изменить данные файлы в библиотек?

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Добрый день!

 

Где лежат icnlude.h  в частности HID.h не могу найти((

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

Zlodey2 пишет:

Добрый день!

 

Где лежат icnlude.h  в частности HID.h не могу найти((

у меня на компе лежат - могу продать парочку.

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Блин запорол leonardo, вынес за функцию switch нажатие Shift и все теперь при подключении к компу arduino постоянно жазимает shift,

можно это исправить или все ?

 

Спасибо!

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

Zlodey2, держать нажатым ресет пока IDE не скажет "загрузка"

Zlodey2
Offline
Зарегистрирован: 07.07.2016

Dimax, спасибо!

Исправил.