-
Дребезг контактов
Всем привет!
Кто может подсказать как убрать дребезг резистивных кнопок:
Плата Arduino Leonardo+Джойстик Sony RM-X4S. Ардуинка определяется как клавиатура, отсылает горячие клавиши в Centrafuse.
Скетч нашел в инете, подправил значения под свой джойстик. Команды принимаются отлично, но дребезг очень мешает, нажимаю паузу - в плеере воспроизведение 3-4 раза успевает стартовать и остановиться...
сам скетч:
int analogPin=0;
int data;
void setup()
{
Keyboard.begin();
Serial.begin(115200);
}
void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки
Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
if (data>=393 && data<=413) Keyboard.write('0'); //pause
if (data>=886 && data<=906) Keyboard.write('1'); //vol+
if (data>=843 && data<=863) Keyboard.write('2'); //vol-
if (data>=467 && data<=487) Keyboard.write('3'); //>>
if (data>=444 && data<=464) Keyboard.write('4'); //<<
if (data>=791 && data<=811) Keyboard.write('6'); //next track
if (data>=730 && data<=750) Keyboard.write('5'); //prev track
if (data>=948 && data<=968) Keyboard.write('7'); //menu media
delay(100);
}
-
Re: Дребезг контактов
Напишу вкратце...переведешь
Tmp=analogRead(Pin);
delay_ms(15); //Задержка на 15мс
Value=analogRead(pin);
if Tmp=Value
case Value и тд.
-
Re: Дребезг контактов
Спасибо.
Я не программист, прошу прощения если вопрос глупый:
у меня значение "data" не точное, а небольшой диапазон. Как правильно сформулировать "if data=Value/case Value"?
int analogPin=0;
int data;
void setup()
{
Keyboard.begin();
Serial.begin(115200);
}
void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки\
delay_ms(15); //Задержка на 15мс
Serial.println(data); //для определения кодов нажатых кнопок на мониторе порта
Value=analogRead(pin);
if data=Value
case Value
if (data>=393 && data<=413) Keyboard.write('0'); //pause
if (data>=886 && data<=906) Keyboard.write('1'); //vol+
if (data>=843 && data<=863) Keyboard.write('2'); //vol-
if (data>=467 && data<=487) Keyboard.write('3'); //>>
if (data>=444 && data<=464) Keyboard.write('4'); //<<
if (data>=791 && data<=811) Keyboard.write('6'); //next track
if (data>=730 && data<=750) Keyboard.write('5'); //prev track
if (data>=948 && data<=968) Keyboard.write('7'); //menu media
delay(100);
}
-
Re: Дребезг контактов
Тогда нужно использовать оконную функцию...проще говоря сравнение нужно проводить в некотором диапазоне.
if (Tmp-4>=Value && Tmp+4<=Value) then
{
if (Value>=393 && Value<=413) Keyboard.write('0'); //pause
if (Value>=886 && Value<=906) Keyboard.write('1'); //vol+
и тд.
while Value<1020 do; //Это фрагмент на паскале, ищи как на С правильно. Ждем отпускания кнопки.
}
PS. Я на С тоже не пишу, так что тренируйся сам.
-
Re: Дребезг контактов
Спасибо!
Разобрался, теперь все отлично работает.