Спасибо, попробуем!
Вид для печати
Спасибо, попробуем!
Правильно ли я понял, что можно подключить маленькие кнопочки через увеличивающиеся сопротивления параллельно.
Разница между резисторами должна быть не меньше 11 ом. От 0 до 999 ом.
Сопротивление близкое к 0 определиться?
Сопротивление больше 1 ком уже не определиться?
По схеме...
Можно 1 ком и больше , только следить за тем что бы не пересекались диапозоны в программе
Уважаемый Chip, сегодня был у Вас, приобрёл 2 Arduino...
Вы пообещали решить вопрос по "дребезгу"...
PS: К сожалению личка к Вам не отправляется, заранее примного благодарен...
Нашел причину нестабильной работы устройства, проблема была в программе.
Странно что никто кроме Hmelik не писал об этой проблеме.
Скачивайте из шапки программу и новый код.
Отпишитесь .
Скажите пожалуйста, а зачем конденсатор в схеме
А как в HotKey настроить короткое или длительное , что-то не получается когда нажимаешь длительно совремя одно короткое повторяется:confused:
Специально скачал программу, залил скетчь из шапки, сконфигурировал короткое и длинное нажатие, все отлично работатет.
Для конфигурации короткого нажатия , нужно не удерживать кнопку, а коротко нажимать.
Немного подправил программу конфигурации.
2chip,
А не подскажете, как решили проблему с выходом из спящего режима
всю голову уже сломал (c#)
Нужно перед сном все таймеры остановить, после просыпания включить.
A0
Но в коде можно указать любой аналоговый вход
Chip, у меня тут тоже проблемы :-(
Залил код из первого поста с одним нажатием, вот что получил на monitor...
Цифры в районе 50 и 28 - это нажатие кнопок, их сопротовление 917 и 818 Ом.
Данный монитор работает с однобайтными значениями, а код из шапки отправляет компьютеру двухбайтное число
С монитором понятно.
Загружен код из первого поста с одним нажатием, вот что выдает HKey_config при запуске (рис1) - там, где определяется код нажатия, сразу появляется 1023.
При нажатии кнопки с сопротивлением 917 ом - 1023 изменяется на 303 или 304, а при нажатии на кнопку с сопротивлением 818 ом - 1023 изменяется на 280 или 281. При отпускании кнопок значение возвращается к 1023.
При запуске HotKey - звук не регулируется :-(
Я проверил, у меня все регулируется.
Попробуй вместо сканкодов 174, 175 вбей 38, 40 и посмотри в любой папке курсор бегает или нет.
Дату создания программы не скажешь?
Уважаемый Chip, прошу найти решения для следующей проблемы:
Проблемка с ПО hotkey.
Имею http://carmonitor.ru/ru/2usbelm327v13-p-56.html сидит на com3.
+
контроллер рулевых кнопок на Carduino v.3 сидит на com4
В итоге, контроллер кнопок конфигурируется без проблем, данные при нажатии показывает. Проблема же возникает при запуске hotkey.exe - вываливается табличка, Error: Open_USB_Device_By_Device_Description - Device not found.
В случае отключения ELM327 все воркает. По сути hotkey.exe скорее всего не хватает возможности жесткого конфигурирования COM порта, который ей необходимо использовать, либо еще какой то вариант.
№ com портов менял, не помогло. В случае отключения девайса через диспетчер устройств тоже не помогает. Поэтому приходится отрубать ELM327 физически. Не есть гуд :-(
:mad:
Плохо поиском пользовался :) http://www.compcar.ru/forum/showthread.php?t=5669
Если честно и не додумался бы туда смотреть, не каждому известно подробностей о FTDI и каким боком оно относиться к Carduino. Но теперь все встало на свои места. До этого гуглил по тексту ошибки но нечего не нашел, в тексте того топика о ошибке с таким текстом речи и не идет.
Спасибо, за подсказку! :)
Скачал HotKey от 21.03.10 и залил скетч с первой страницы с одним нажатием.
Запускаю HKey_config, сразуже появляется значение 1023 - без нажатия кнопок. А если нажать кнопку, то появится значение с небольшим дребезгом 303-304.
Запускаю новый монитор, Ардуино шлет значения - без нажатия кнопок.
Все правильно, так и должно быть.
Небольшой дребезг учтен опцией "Limit"
Где то выкладывал в разделе
Вот, соорудил кнопочки (резисторы: 12-24-35-46-62-74-90-108-129 Ом). Все работает, только есть небольшой дребизг в пределах 2-3 единиц.
Обнаружил, что если кнопке не присвоен код, то при нажатии этой кнопки HotKey выдает ошибку. Поэтому пустым кнопка присвоил код 07.
Chip, просьба подправить скетч, чтобы он ничего не передавал, когда нет нажатий.
Спасибо.
А зачем прописывать кнопку если ей ничего не будешь присваивать?Цитата:
Обнаружил, что если кнопке не присвоен код, то при нажатии этой кнопки HotKey выдает ошибку.
Мне показалось так удобнее. Определил все кнопки в HKey_config, а потом в config только коды им в присваиваешь или меняешь.
Спасибо за программу, очень помогла в начале.
Но если пользователь захочет использовать ардуино ещё как-то (а он захочет, т.к. использовать всего один вход из двух десятков это расточительство), то этот код работать нормально не будет.
Нужно оформить данный процесс как стейтмашину, примерно так как сделал я (привожу часть кода для длинного и короткого нажатия):
Функция decode_button возвращает ноль если кнопка не нажата, и код кнопки если нажата.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;
}
Переменные key, state и time изначально инициализируются нулем.
Меняя константы 50 (время исключения дребезга), 250 (время перед началом повтора), 75 (1000/75=частота повтора) можно настроить реакцию под себя.
Спасибо за код.
Cyb1980, ты не мог бы весь код выложить?
Спасибо.
Прошу помощи, т.к. в програмировании полный 0 :(
Как существующую программу дополнить следующей функцией: при сопротвлении на входе ардуины 32 кОм, имеем на выходе а2 логическую 1, а при 16 кОм, логическую 1 имеем на выходе а3. При других значениях на входе - согласно настроек хоткей. Т.е. дополнительно использовать ардуину как компаратор с двумя выходами. Нужно это для регулирования громкости аналоговым регулятором (ALPS), остальное управление програмное.
Комп может быть как включен, так и выключен, питание на ардуину идёт от бортсети.
Помогите пожалуйста.
П.С. наверное неправильно к значениям резисторов привязываться, лучше к значению U на вх. а5, но сути это не меняет.
в исходникахчитаем состояние АЦП, далее по тексту песни добавляешь свои куплеты, типаPHP код:
res_dt1 = analogRead(PIN); // прочитать данные АЦП
PHP код:
if (res_dt1==32kom) digitalWrite(a2, HI);
ну я тут еще задержки не показал... альпсу же еще провернуться надо... типаPHP код:
if (res_dt1==16kom) digitalWrite(a3, HI);
переменные 32kom, 16kom, a2 и a3 надо заменить на соответствующие значения... извини, копать описание дуины не охото :( причем значение напряжения тебе придется измерить самому... создать махонький проектик, который будет мониторить состояние АЦП в СОМ порт, и посмотреть, сколько это "32ком". + тебе нужно не точное значение, а вилка, ибо резисторы, провода, сила нажатия у нас зависят от разных параметров, поэтому... допустим нажатие кнопки "32КОМ" у тебя дает 145...148 положения АЦП, тогдаPHP код:
if (res_dt1==32kom) {
digitalWrite(a2, HI);
delay(40);
digitalWrite(a2, LOW);
}
ну и далее по тексту пьесыPHP код:
if ((res_dt1<150)&(res_dt1>142)) {
Спасибо , но , как я понял надо порты а2 и а3 в проекте открыть, иначе не компилиуется. Вопрос - как?:o
a2 и a3 это аналоговые пины... чтобы активировать их как цыфровые в дуине... спроси у Чипа, мне думается, пришлось лезть на сайт, читать описание, листать схему... пить пиво :) что как-то такну а далее, чтобы в порт "плюнуть" пользуйPHP код:
DDRC = 0x0C; // включили а02 и а03 на выход
PORTC = 0x00; // начально пины "0"
чтобы сбросить пин иPHP код:
PORTC &= B11111101
чтобы установить, это для 2 пина, для третьего передвинь 0 и 1 с 2 на 3 позицию справаPHP код:
PORTC |= B00000010
int A2 = 15;
int A3 = 16;
или так
#define A2 15
#define A3 16
Что сделал :
1. С помощью конфига определил, что ардуина шлёт в комп при нажатии нужной кнопки значение 725
2. Дописал скетч (выделил)
#define PIN 5 //номер аналогового порта
#define LIMIT 6 //предел погрешности сопротивления
#define A2 15
#define A3 16
byte bytes[2];
int res_dt1;
unsigned long math_time,old_time,real_time;
void setup()
{
Serial.begin(115200); // настроить скорость com порта
}
void loop()
{
old_time = real_time;
math_time = 0;
res_dt1 = analogRead(PIN); // прочитать данные АЦП
if ((res_dt1<730)&(res_dt1>720))digitalWrite(A2,HIGH );
while(math_time < 300 && (analogRead(PIN)>res_dt1-LIMIT && analogRead(PIN) < res_dt1+LIMIT ))
{
real_time = millis(); //получить реальное время
math_time = real_time - old_time; //считаем длительность паузы
}
if( math_time > 80 ) //если нет дребезга
{
bytes[0] = res_dt1 & 255; // преобразовать в 2-байта
bytes[1] = (res_dt1 & 768) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
}
3. Залил в ардуину.
При нажатии на кнопку на А2 ничего не меняется. Где ошибка?:confused:
П.С. Пинайте, ругайте за тупость, смейтесь в голос, только помагайте :)
[QUOTE=Rover 176;63272]Что сделал :
1. С помощью конфига определил, что ардуина шлёт в комп при нажатии нужной кнопки значение 725
QUOTE]
- это преобразованное в 2 байты число, а тебе нужно не преобразованное
чтоб его получить я думаю можно попробывать что то типо
Serial.write( dt1,DEC) хотя неуверен лучше у гуру поинтересоваться!
Ошибка в том что нужно в void setup() сконфигурировать вывод A2 на выход