Ик-передатчик

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем alexs, 27 сен 2016.

  1. alexs

    alexs Нуб

    Всем привет!

    Никак не могу разобраться как мне послать сигнал с помощью диода или ик-передатчика Troyka на Iskra.js.
    http://amperka.ru/product/troyka-ir-transmitter-5mm-led-module

    В разных статьях, вроде этой: http://www.espruino.com/Pico+Infrared
    отдельно задают для катода и анода. Не понимаю как это сделать.

    Код можно либо считывать с пульта, либо задавать самому в бинарном или HEX

    Кто-нибудь умеет так делать или знает какой-нибудь проверенный способ?
     
  2. sys

    sys Злобный Буратино Модератор

    Посмотрите тут http://www.espruino.com/Pico Infrared
    Может найдете что-то полезное для себя


    UPDATE: совсем я плох стал..
     
    Последнее редактирование: 29 сен 2016
  3. alexs

    alexs Нуб

    @sys, спасибо, так я эту ссылку и привожу в вопросе =)

    Там в целом поясняется процедура. Но необходимо подать один импульс на катод, другой на анод.
    В том примере лампочка использует 2 пина, подключена напрямую к плате.

    Но я не могу понять как это сделать через troyka shield и стандартный модуль. Там же только 1 пин.
    В описании ик-передатчика написано, что он легко работает с iskra js, а как не ясно.
     
  4. sys

    sys Злобный Буратино Модератор

    :eek::confused: ууупс... сорри. К вечеру невнимательный стал прям жесть :)
     
  5. neptun

    neptun Нерд

    Тот же вопрос возник )
    Как уже материал Pico Infrared не исковеркал
    Принимать временные промежутки получается
    Но вот передать их на тройка ИК не получается
    Пробовал и как с ЛЕД моргать
    Такое чувство он мерт больше чем жив
     
  6. ИгорьК

    ИгорьК Гуру

    Там применяется функция digitalPulse(), не так ли?
    Полагаю, она просто не выполняет свою работу - постоянно чем-то прерывается.
    Смотрите мой пост. Там есть осциллограф. И там не такие жесткие требования как в ИК-передаче, но не удалось получить устойчивую работу.
    В результате исследования выяснилось, что работа этой функции в течение короткого времени прерывается. То есть получить 1-2 импульса подряд - можно. Большой "выстрел" - нет.
    Я тоже начинал эксперименты с ИК и тоже убедился, что все принимается и ничего не передается. Но тогда причины не понял.
    Полагаю, надо писать разработчикам, возможно есть какой-то способ обеспечить непрерывание работы. Без этого передать сигнал, ИМХО, не удастся.
     
  7. neptun

    neptun Нерд

    Да речь про digitalPulse других ибо оберток разработчики не предоставили ) вообще 3 дня провозился все бестолку ))) взял модуль поиграться а он не рабочий )
    Особенно спустя 3 дня фраза - он легко работает с iskra js, в описание убивает )))
     
  8. acos

    acos Официальный гик Администратор

    Переделал пример с pico infrared. Так попробуете? Тут конечно грязный хак, мы используем прерывания неиспользуемой ножки. Подключаем ИК-приёмник к P3, а передатчик к P9

    Код (Javascript):
    // Because we're not using the module, we have to manually pull up the data pin
    pinMode(P3,"input_pullup");
    pinMode(P8, "output"); // этот пин нужен только для работы digitalPulse и прерываний. К нему ничего не подуключаем:)
    // Keep somewhere to put the signal times
    var times = [];
    /* The ID of the watch we're using to record IR. We want to
    turn it off while we transmit in case we record outselves! */

    var currentWatch;

    function startWatching() {
      currentWatch = setWatch(function(e) {
        // work out how long the pulse was, in milliseconds
        var pulseLen = 1000 * (e.time - e.lastTime);
        // then save it, if it was less than 1 second
        if (pulseLen < 1000)
          times.push(pulseLen);
        else
          times = [];
      }, P3, {repeat:true});
    }
    startWatching();

    function stopWatching() {
      clearWatch(currentWatch);
    }

    setWatch(function(e) {
      print(times);
      // stop recording
      stopWatching();
      // Light up LED1
      digitalWrite(LED1,1);
      // Send the pulses
      digitalPulse(P8, 1, times);
      // Wait until pulsing is finished
      digitalPulse(P8, 1, 0);
      // Turn LED1 off
      digitalWrite(LED1,0);
      // start recording again
      startWatching();
    }, BTN1, {repeat:true, edge:"rising", debounce:50});

    setWatch(function(e) {
      analogWrite(P9,0.9,{freq:38000});
    //  print('r');
    }, P8, {repeat:true, edge:"rising"});

    setWatch(function(e) {
      digitalWrite(P9, 0);
    //    print('f');
    }, P8, {repeat:true, edge:"falling"});

     
     
  9. neptun

    neptun Нерд

    Приветствую!
    Я попробовал :)
    Но результата добиться так и не получилось :(
     
    Последнее редактирование: 30 дек 2016
  10. neptun

    neptun Нерд

    Никто больше не тестировал код от acos? ) А то может я просто криворукий :)
     
  11. neptun

    neptun Нерд

    Если кому вдруг интересно, то проблему свою на Iskra JS временно решил:
    1) Код использовал прям с http://www.espruino.com/Pico Infrared
    Код (Javascript):
    setWatch(function(e) {
      // stopWatching();
      // Light up LED1
      digitalWrite(LED1,1);
      // Start the 38kHz square wave
      analogWrite(P8, 0.9, {freq:38000});
      // Send the pulses
      digitalPulse(P9, 1, times);
      // Wait until pulsing is finished
      digitalPulse(P9, 1, 0);
      // Turn LED1 off
      digitalWrite(LED1,0);
      // start recording again
      // startWatching();
    }, BTN, {repeat:true, edge:"rising", debounce:50});
    2) Плюнул на ИК лед тройки и вытащил ИК лед с пульта :D
    3) Вставил одну ножку в пин P8, а вторую в P9 (катод там или анод разберетесь думаю)
    4) Чудо случилось
     
    sys и ИгорьК нравится это.
  12. SAM_SAM

    SAM_SAM Нуб

    господа, с тройка модулем то решения не нашлось?