Показано с 1 по 5 из 5
  1. #1
    Новичок
    Регистрация
    12.10.2012
    Возраст
    45
    Сообщений
    5
    Вес репутации
    144

    По умолчанию Дребезг контактов

    Всем привет!
    Кто может подсказать как убрать дребезг резистивных кнопок:
    Плата 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);
    }

  2. #2
    Пользователь
    Регистрация
    17.12.2009
    Возраст
    46
    Сообщений
    34
    Вес репутации
    183

    По умолчанию Re: Дребезг контактов

    Напишу вкратце...переведешь
    Tmp=analogRead(Pin);
    delay_ms(15); //Задержка на 15мс
    Value=analogRead(pin);
    if Tmp=Value
    case Value и тд.

  3. #3
    Новичок
    Регистрация
    12.10.2012
    Возраст
    45
    Сообщений
    5
    Вес репутации
    144

    По умолчанию 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);
    }
    Последний раз редактировалось STX-121; 08.05.2014 в 12:40.

  4. #4
    Пользователь
    Регистрация
    17.12.2009
    Возраст
    46
    Сообщений
    34
    Вес репутации
    183

    По умолчанию 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. Я на С тоже не пишу, так что тренируйся сам.

  5. #5
    Новичок
    Регистрация
    12.10.2012
    Возраст
    45
    Сообщений
    5
    Вес репутации
    144

    По умолчанию Re: Дребезг контактов

    Спасибо!
    Разобрался, теперь все отлично работает.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •