Индикация времени работы платы [РЕШЕНО]

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем C.Smoke, 10 май 2017.

  1. C.Smoke

    C.Smoke Нуб

    Доброго дня!
    Делаю первые шаги в освоении JS, поэтому прошу отнестись с пониманием.
    Хочу по нажатию кнопки получить количество вспышек светодиода эквивалентное количеству минут прошедших с включения платы.
    Не могу понять как бы мне это реализовать. Вот мой код (не работает, так как я хочу):
    Код (Javascript):
    var myButton = require('@amperka/button').connect(C4, {holdTime: 2});
    var myLed = require('@amperka/led').connect(B6);
    myLed.turnOff();
    myButton.on('click', function()
      {
        min = Math.round(getTime()/60);
        sec = Math.round(getTime());
        console.log('Min: ',min,'Sec: ',sec); //ставил для проверки
        var i = 0;
        while (i < min)
          {
            myLed.blink(0.5);
            console.log('i=',i); //ставил для проверки
            i++;
          }
      });
     
  2. serg_admin

    serg_admin Гик

    Попробуйте после
    Код (C++):
    myLed.blink(0.5);
    Задержку поставить. Одну секунду.
     
  3. C.Smoke

    C.Smoke Нуб

    А можно код? Я так и не смог найти как именно выставлять задержку.
     
  4. serg_admin

    serg_admin Гик

    Как бы ни как.

    Смотри SetTimeOut
     
  5. C.Smoke

    C.Smoke Нуб

    setTimeout(); просто выполняет код через заданное время.
     
  6. C.Smoke

    C.Smoke Нуб

    Понял в какую сторону смотреть, исправил код. Сейчас работает, но вопрос: Такое количество запущенных таймеров не сильно затормозит плату? (если предположим я запущу эту процедуру через 100 минут)

    Вот получившийся код:
    Код (Javascript):
    var myButton = require('@amperka/button').connect(C4, {holdTime: 2});
    var myLed = require('@amperka/led').connect(B6);
    myLed.turnOff();
    myButton.on('click', function()
      {
        clearTimeout();
        min = Math.round(getTime()/60);
        sec = Math.round(getTime());
        var i = 0;
        while (i < min)
          {
            interval = 0+(i*1000);
            setTimeout("myLed.blink(0.5);", interval);
            i++;
          }
      });
    Теперь после нажатия BTN1 - LED1 вспыхивает столько раз сколько минут плата включена

    P.S. Спасибо за подсказку!
     
  7. serg_admin

    serg_admin Гик

    Это особенность JS. Среда должна сама это разруливать.
    Вообще желательно вызывать рекурсивно.
     
    sys и Morgan нравится это.
  8. Morgan

    Morgan Гик

    Лучше использовать setTimeout внутри setTimeout
    (код ниже не проверял, но есть шанс, что заработает)
    Код (Javascript):

    var myButton = require('@amperka/button').connect(C4,{holdTime:2});
    var myLed = require('@amperka/led').connect(B6);
    myLed.turnOff();

    function blinks(min, i) {
      if (i++ < min) {
        myLed.blink(0.5);
        setTimeout(blinks, 1000, min, i);
      }
    }

    myButton.on('click',function() {
        min =Math.round(getTime()/60);
        sec =Math.round(getTime());
        blinks(min, 0);
    });
     
     
    sys нравится это.