Пульт и com-порт: данные дублируются

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем alekseishaklov, 6 фев 2021.

  1. Всех приветствую! Имеются Iskra JS, ик-пульт, ик-приёмник из набора Робоняша. При нажатии кнопки на пульте в консоль выводится в большинстве случаев 2 строки, если поднести пульт чуть ближе, или сзади - 1 строка. Ещё иногда 3 строки. А нужно всегда выводить 1 строку. В другой среде я работаю с com-портом, решение чтобы защититься от дублирования придумал, но если будет выводиться по 1, 3 или ещё как-то - вся система коту под хвост. Поэтому хотелось бы решить проблему другим способом. Всем заранее спасибо за ответы!
    Причём все устр-ва в связке с пультом работают нормально. И при выдаче данных, например, с датчика линии, они не дублируются
     
    Последнее редактирование: 6 фев 2021
  2. Кажется, понял: нужно использовать http://wiki.amperka.ru/js:hysteresis.
    Но всё равно интересно, почему такое непостоянство)
     
  3. Понял, что это не то, но не успел написать). Проблему ещё не решил
     
  4. Un_ka

    Un_ka Гуру

    Код какой?
    ИК-пульт вроде постоянно шлёт сигналы при нажатии на кнопку.
     
  5. Вот код:

    Код (Javascript):
    var receiver = require('@amperka/ir-receiver').connect(P0);
    var led = require ('@amperka/led').connect(P3);
    var button = require('@amperka/digital-line-sensor').connect(P4);

    function blinking10() {
      led.turnOff();
      led.blink(10);

    }
    function toggling() {
      led.toggle();
    }
    button.on('black', blinking10);
    receiver.on('receive', function(code) {
      switch(code) {
        case receiver.keys.PLAY:
      (blinking10)();
          break;
        case receiver.keys.POWER:
          (toggling)();
          break;
        case receiver.keys.X:
          print(2);
          break;
        default: break;
      }
    });
    В этом коде также тест светодиода в связке с пультом, надеюсь, не помешает
     
  6. Немного не понял. Если держать, то да, а я нажимаю и быстро отпускаю, всегда одинаковое время
     
  7. akl

    akl Гуру

    ровно 20 миллисекунд держишь? с такими способностями можно в марвел записываться
     
    alekseishaklov и Рокки1945 нравится это.
  8. Un_ka

    Un_ka Гуру

    Может останавливать обработку ИК- сигнала на миллисекунд 100? Хотя более разумным вариантом будет сравнение полученного значение с предыдущим.
     
  9. Я просто работаю с com-портом в другой программе, в ней делаю приём сигналов и выполнение действий на компьютере
     
  10. Un_ka

    Un_ka Гуру

    Как-то так, но надо ещё добавить таймер, чтобы после нажатия на клавишу она не игнорировалсь, пока не нажмут другую.
    Код (Javascript):
    var receiver = require('@amperka/ir-receiver').connect(P0);
    var led = require ('@amperka/led').connect(P3);
    var button = require('@amperka/digital-line-sensor').connect(P4);
    var last_code=receiver.keys.PLAY;
    //Какая-нибудь не используемая клавиша
    function blinking10() {
      led.turnOff();
      led.blink(10);

    }
    function toggling() {
      led.toggle();
    }
    button.on('black', blinking10);
    receiver.on('receive', function(code) {
      switch(code) {
        case last_code:
          break;
        case receiver.keys.PLAY:
      (blinking10)();
          break;
        case receiver.keys.POWER:
          (toggling)();
          break;
        case receiver.keys.X:
          print(2);
          break;
        default: break;
      }
    last_code=code;
    });
     
    alekseishaklov нравится это.
  11. Спасибо! Работает, буду добавлять таймер
     
  12. Но код немного не понятен) Как я понял, при нажатии на кнопку PLAY заново обрабатывается пульт. Но при нажатии другой кнопки/прохождении определённого времени снова читается. Насчёт таймера тоже пока не разобрался) Но всё равно спасибо!