Эмуляция нажатия клавиши клавиатуры

Тема в разделе "Arduino & Shields", создана пользователем Phantomrus, 1 сен 2016.

  1. Phantomrus

    Phantomrus Нуб

    Всем привет!

    Нужно, чтобы по звуковому сигналу (к примеру по хлопку) Arduino подавала сигнал на ПК, как будто на клавиатуре нажали пробел.
    Можно было бы сделать это с сервоприводами, заставив роборуку физически жать на пробел, но хочется сделать "почище".

    Просьба рассказать/дать ссылки на материал, возможно есть примеры готового кода?
    Подходит ли для этого Uno или лучше использовать Leonardo? Как правильно подключить всё это к ПК? Стандартного USB будет достаточно?

    Заранее спасибо!
     
  2. ANV

    ANV Гуру

  3. Phantomrus

    Phantomrus Нуб

    Спасибо!
    Если мне нужно не напечатать пробел, а именно эмулировать нажатие клавиши (к примеру для пролистывания страницы или выбора какого-либо пункта в тесте), то как будет выглядеть функция Keyboard.press()?
    Увидел коды для Ctrl, Alt, Backspace, но для пробела не нашел.
     
  4. Vetrinus

    Vetrinus Гик

  5. Vetrinus

    Vetrinus Гик

    А почему это уно не подойдет? Что с ней не так?
     
  6. Phantomrus

    Phantomrus Нуб

    Т.е. код будет таким?
    Код (C++):
    #include "Keyboard.h"

    int analogData=0; //Данные с микрофона, пин 0

    void setup() {
      Keyboard.begin(); // initialize control over the keyboard
    }

    void loop() {
    analogData=analogRead(0);      //Читаем значение с микрофона
    if(analogData>120){            //Если уровень тишины ~ 100 (из 1023), то любой звук выше 120 будет запускать процесс
        Keyboard.press('Noise');   //Пишем "Noise". Сюда нужно вставить функцию для передачи нажатия клавиши "Пробел"
        delay(100);                //Клавиша нажата в течение 0,1 сек.
        Keyboard.releaseAll();     //Все нажатые клавиши отпускаются
        analogData=0;              //Обнуляем данные с микрофона для нового считывания
        delay(900);
    }
    // Каждую секунду Arduino будет считывать данные с микрофона и если есть шум, то писать "Noise" (если курсор заранее будет стоять. к примеру, в блонкоте)

    }
     
    Последнее редактирование: 1 сен 2016
  7. Phantomrus

    Phantomrus Нуб

    И ещё вопрос. Если я хочу, чтобы по хлопку Arduino нажимала пробел, ждала 20 секунд, потом снова нажимала пробел, то понятно как это сделать. А как реализовать, если я хочу, чтобы каждый последующий хлопок в этот 20-секундный период добавлял ко времени ожидания ещё 20 секунд?
     
  8. ostrov

    ostrov Гуру

    Как то так.
    Код (C++):
    unsigned long timerOUT;
    if (analogRead(0) > 120)  timerOUT = millis() + 2000;
    while (timerOUT > millis()) {
      Keyboard.press('Noise');
      delay(100);
      if (analogRead(0) > 120)  timerOUT = timerOUT + 2000;
    }
    Keyboard.releaseAll();
     
    Phantomrus нравится это.