Всем привет! Нужно, чтобы по звуковому сигналу (к примеру по хлопку) Arduino подавала сигнал на ПК, как будто на клавиатуре нажали пробел. Можно было бы сделать это с сервоприводами, заставив роборуку физически жать на пробел, но хочется сделать "почище". Просьба рассказать/дать ссылки на материал, возможно есть примеры готового кода? Подходит ли для этого Uno или лучше использовать Leonardo? Как правильно подключить всё это к ПК? Стандартного USB будет достаточно? Заранее спасибо!
Спасибо! Если мне нужно не напечатать пробел, а именно эмулировать нажатие клавиши (к примеру для пролистывания страницы или выбора какого-либо пункта в тесте), то как будет выглядеть функция Keyboard.press()? Увидел коды для Ctrl, Alt, Backspace, но для пробела не нашел.
Запрос arduino as HID device обрадует вас большим количеством ссылок. http://mitchtech.net/arduino-usb-hid-keyboard/ например
Т.е. код будет таким? Код (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" (если курсор заранее будет стоять. к примеру, в блонкоте) }
И ещё вопрос. Если я хочу, чтобы по хлопку Arduino нажимала пробел, ждала 20 секунд, потом снова нажимала пробел, то понятно как это сделать. А как реализовать, если я хочу, чтобы каждый последующий хлопок в этот 20-секундный период добавлял ко времени ожидания ещё 20 секунд?
Как то так. Код (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();