виртуальная клавиатура на usb host shield
- Войдите на сайт для отправки комментариев
Вс, 03/01/2016 - 08:43
Всем привет!
я только начал изучать ардуино и решил сделать виртуальную клавиатуру для компьютера с подсветкой двух кнопок. Как подклчать кнопки и светодиоды я уже разобрался, а вот с кодом не в ладах.
Основа для проекта была взята отсюда:
что я нажимаю и что должно загореться:
-нажимаю первую кнопку (подключена в пин 7)-в блокноте напечатан символ "А"
-нажимаю на вторую кнопку (подключена в пин 8)- в блокноте напечатан символ "B"
-нажимаю на третью кнопку (подключена в пин 9)- в блокноте напечатан символ "C" и горит светодиод (подключен в пин 10) до тех пор, пока я снова не нажму эту же кнопку
-нажимаю на четвёртую кнопку (подключена в пин 11) - в блокноте напечатан символ "D" и горит светодиод (подключен в пин 12) до тех пор, пока я снова не нажму эту же кнопку
код был взят отсюда:
#include "UsbKeyboard.h" #define PIN_BUTTON 7 // the button is attached to pin 7 int lastState = LOW; // LOW is equivalent to 0 void setup() { // button setup pinMode(PIN_BUTTON, INPUT); // USB setup ----------------- // Disable timer0 since it can mess with the USB timing. Note that // this means some functions such as delay() will no longer work. TIMSK0 &= !(1<TOIE0); // Clear interrupts while performing time-critical operations cli(); // Force re-enumeration so the host will detect us usbDeviceDisconnect(); delayMs(250); usbDeviceConnect(); // Set interrupts again sei(); } void loop() { // update USB device state UsbKeyboard.update(); // check, if transition to button-pressed has occured if( (digitalRead(PIN_BUTTON) == HIGH) && (lastState==LOW) ) { UsbKeyboard.sendKeyStroke(KEY_A); // if so, send the letter 'a' via USB keyboard lastState = HIGH; // update the state variable delay(10); // simple de-bouncing // check, if the button was released } else if( (digitalRead(PIN_BUTTON) == LOW) && (lastState==HIGH) ) { lastState = LOW; // if so, update the state variable delay(10); // simple de-bouncing } } // helper method for V-USB library void delayMs(unsigned int ms) { for( int i=0; i<ms; i++ ) { delayMicroseconds(1000); } }
Прошу помощи в написании кода для моего проекта
я только начал изучать ардуино и решил сделать виртуальную клавиатуру для компьютера с подсветкой двух кнопок. Как подклчать кнопки и светодиоды я уже разобрался, а вот с кодом не в ладах.
Не слишком ли круто замахнулись для начинающего? И зачем Host-шилд? По вашим ссылкам всё старое, не факт, что заработает с новыми версиями arduino ide. Лучше бы вам делать это на леонардо / микро / промикро, там всё проще. Если нету, то почитайте мой вчерашний топик, там всё адаптировано к последней версии arduino ide.
я только начал изучать ардуино и решил сделать виртуальную клавиатуру для компьютера с подсветкой двух кнопок. Как подклчать кнопки и светодиоды я уже разобрался, а вот с кодом не в ладах.
Не слишком ли круто замахнулись для начинающего? И зачем Host-шилд? По вашим ссылкам всё старое, не факт, что заработает с новыми версиями arduino ide. Лучше бы вам делать это на леонардо / микро / промикро, там всё проще. Если нету, то почитайте мой вчерашний топик, там всё адаптировано к последней версии arduino ide.
Замахнулся круто, не спорю) но очень надо сделать сейчас контроллер для плеера Aimp. Хост шилд с юсби портом - это чтобы ардуина воспринималась не как ардуино а как обычная ПК клавиатура. С новыми версиями Arduino IDE не работает этот скетч, да, но он прекрасно работает с старой версией 1.0.5 (скетч с одной кнопкой проверял и загружал)
Из всех ардуино у меня есть только uno, nano, и pro-mini. Собираюсь вообще на pro mini это всё сделать, чтобы размеры контроллера были меньше.
А как можно ваш код адаптировать под мои нужды? что нужно дописать так, как я описывал вначлаа тоипка?
Для начала вам нужно инициализировать все пины и включить на них подтяжку на +5в. Пины свтодиодов тоже надо проинициализировать.
Для каждого светодиода завести переменную тригер - которая бы отображала состояние светодиода.
Для каждой кнопки в цикле нужно сделать условие - если на пине кнопки лог 0 то послать символ по усб , переключить светодиод(сравнивая значение тригера и изменяя его с записью в пин светодиода)
P.S. Рекомендую Pro Miсro(Atmega32u4) для этой задачи.
Для начала вам нужно инициализировать все пины и включить на них подтяжку на +5в. Пины свтодиодов тоже надо проинициализировать.
Для каждого светодиода завести переменную тригер - которая бы отображала состояние светодиода.
Для каждой кнопки в цикле нужно сделать условие - если на пине кнопки лог 0 то послать символ по усб , переключить светодиод(сравнивая значение тригера и изменяя его с записью в пин светодиода)
а сможете мне сделать строку кода хотя бы для одной кнопки со светодиодом, чтобы я дальше понял как остальные задействовать?
да я слышал,что для моих целей лучше испольлзовать pro micro или леонардо, но есть только uno, pro-mini, nano
если входпин(7) == лог0 то {
усбклаватура.послатькод('A');
если тригер1 == 0 то {
тригер1 = 1;
выходпин(светодиод1, лог1);
}иначе{
тригер1 = 0;
выходпин(светодиод1, лог0);
}
}
.... Тут то же самое для других кнопок ....
задержка(100мс); // задержка повторного нажатия
а как это всё будет на английском? это вы прописали в void loop? а как правильно инициализировать пины в начале кода для простой кнопки без светодиода, и кнопки со светодиодом?
Не понимая значения каждой команды вы никогда не напишите код. Вам нужно псидеть и почитать, возможно подучить английский. Чтобы видя программу вы понимали выполняемые действия. Написал так специально чтобы вы учились думать логически, а не "копировать-вставить".
Не понимая значения каждой команды вы никогда не напишите код. Вам нужно псидеть и почитать, возможно подучить английский. Чтобы видя программу вы понимали выполняемые действия. Написал так специально чтобы вы учились думать логически, а не "копировать-вставить".
хорошо, спасибо!
Я сделал этот проект, но присутствует то,что мне не нравится. Когда я нажимаю на кнопку и удерживаю, то символ печатается в редакторе постоянно, когда отпускаю кнопку, он не печатается.Мне надо сделать так,чтобы даже если я удерживаю нажатую кнопку, символ не печатался, чтобы символ печатался только один раз. Помогите с кодом пожалуйста