Re: Управление рулевыми кнопками при помощи Carduino.
Если честно и не додумался бы туда смотреть, не каждому известно подробностей о FTDI и каким боком оно относиться к Carduino. Но теперь все встало на свои места. До этого гуглил по тексту ошибки но нечего не нашел, в тексте того топика о ошибке с таким текстом речи и не идет.
Спасибо, за подсказку! :)
Вложений: 1
Re: Управление рулевыми кнопками при помощи Carduino.
Скачал HotKey от 21.03.10 и залил скетч с первой страницы с одним нажатием.
Запускаю HKey_config, сразуже появляется значение 1023 - без нажатия кнопок. А если нажать кнопку, то появится значение с небольшим дребезгом 303-304.
Запускаю новый монитор, Ардуино шлет значения - без нажатия кнопок.
Re: Управление рулевыми кнопками при помощи Carduino.
Все правильно, так и должно быть.
Небольшой дребезг учтен опцией "Limit"
Re: Управление рулевыми кнопками при помощи Carduino.
Цитата:
Сообщение от
Chip
Нужно перед сном все таймеры остановить, после просыпания включить.
Спасибо, помогло. Выяснилось, что эта железка очень не любит, когда при открытом дескрипторе происходит засыпание.
П.С. еще немного оффтопика... а где бы мне такую красивую картинку кардуины для схеморисования надыбвать ???? :o
Re: Управление рулевыми кнопками при помощи Carduino.
Где то выкладывал в разделе
Вложений: 1
Re: Управление рулевыми кнопками при помощи Carduino.
Вот, соорудил кнопочки (резисторы: 12-24-35-46-62-74-90-108-129 Ом). Все работает, только есть небольшой дребизг в пределах 2-3 единиц.
Обнаружил, что если кнопке не присвоен код, то при нажатии этой кнопки HotKey выдает ошибку. Поэтому пустым кнопка присвоил код 07.
Chip, просьба подправить скетч, чтобы он ничего не передавал, когда нет нажатий.
Спасибо.
Re: Управление рулевыми кнопками при помощи Carduino.
Цитата:
Обнаружил, что если кнопке не присвоен код, то при нажатии этой кнопки HotKey выдает ошибку.
А зачем прописывать кнопку если ей ничего не будешь присваивать?
Re: Управление рулевыми кнопками при помощи Carduino.
Мне показалось так удобнее. Определил все кнопки в HKey_config, а потом в config только коды им в присваиваешь или меняешь.
Re: Управление рулевыми кнопками при помощи Carduino.
Цитата:
Сообщение от
Chip
Спасибо за программу, очень помогла в начале.
Но если пользователь захочет использовать ардуино ещё как-то (а он захочет, т.к. использовать всего один вход из двух десятков это расточительство), то этот код работать нормально не будет.
Нужно оформить данный процесс как стейтмашину, примерно так как сделал я (привожу часть кода для длинного и короткого нажатия):
PHP код:
switch( state )
{
case 0: // nothing pressed
key = decode_button( analogRead( WHEELBUT ) );
if( key > 0 )
{
state = 1;
time = millis();
}
break;
case 1: // key down
if( decode_button( analogRead( WHEELBUT ) ) == key )
{
if( millis() - time > 50 ) { state = 2; time = 0; }
break;
}
state = 0;
key = 0;
time = 0;
break;
case 2: // one press
if( time == 0 )
{
Serial.println( key, DEC );
time = millis();
}
if( decode_button( analogRead( WHEELBUT ) ) == key )
{
if( millis() - time > 250 ) { state = 3; time = 0; }
break;
}
state = 0;
key = 0;
time = 0;
break;
case 3: // key hold (multipress)
if( time == 0 )
{
Serial.println( key, DEC );
time = millis();
}
if( decode_button( analogRead( WHEELBUT ) ) == key )
{
if( millis() - time > 75 ) { state = 3; time = 0; }
break;
}
state = 0;
key = 0;
time = 0;
break;
}
Функция decode_button возвращает ноль если кнопка не нажата, и код кнопки если нажата.
Переменные key, state и time изначально инициализируются нулем.
Меняя константы 50 (время исключения дребезга), 250 (время перед началом повтора), 75 (1000/75=частота повтора) можно настроить реакцию под себя.
Re: Управление рулевыми кнопками при помощи Carduino.