You are reading a single comment by @Robin and its replies. Click here to read the full conversation.
  • Sat 2021.04.03

    'Is it possible to set different intervals?'

    Yes

    'LED should blink 3 times all 10 seconds'

    Unsure of intention here ref 'all 10'

    'the LED blinks continiously - I tried it with arguments but it does not work'

    Missing logic for LED control and the 'tried it' code block


    Hi @psc1988 in post #1 code snippet L2, L4, L15, L22, it appears there are mismatched closing curly braces, along with no LED control logic, making comprehension difficult, so I created one possible stand alone code block.


    const BLINK_TIMES = 3;
    const PIN_LED = B4;  // Device dependant - external LED
    
    var doOnce = 1;
    
    // sec
    var durationTest = 12;
    var durationWait = 2;
    
    // msec 
    var delay = 600;  // Arbitrary screen update interval
    var timeout = 3500;
    
    var durationBlink = 40;
    
    
    var timeStart = 0;
    var timeStop  = 0;
    var timeCurr  = 0;
    var timeElapsed = 0;
    
    // http://www.espruino.com/Reference#l__global_getTime
    // Return current system time in Seconds (as a floating point number)
    //>getTime()
    //=946685458.84333419799
    
    
    // Interval timer
    
    var intervalID = {};
    var timeoutID  = {};
    var blinkID    = {};
    
    function ci() { clearInterval( intervalID ); }
    function cb() { clearInterval( blinkID ); }
     
    
    function startTest() {
      var toggle = false;
      var nCount = BLINK_TIMES;
      
      timeStart = getTime();
      timeStop  = timeStart + durationTest;
      
      
      intervalID = setInterval(function () {
    
          timeCurr = getTime();
    
          // When duration of test is over stop the timer
          if ( timeCurr >= timeStop ) { ci(); intervalID = null; }
    
          // Send our write command to our external device
          if( ( timeCurr >= (timeStart + durationWait) )  &&  ( doOnce ) ) {
        
            doOnce--;
        
            // Send a command instruction to external device
            Serial1.write([0xB5,0x62]);   // arbitrary - modify as required
            console.log( "L60     Sending write command to device" );
    
            timeoutID = setTimeout(function () {
    
              // After a specific time, attempt to read that device response
              Serial1.write([0x85]);   // arbitrary - modify both as required
              var dataRecd = getData(); 
              console.log( "L67    Sending read command to device" );
    
    
              blinkID = setInterval(function () {
    
                if ( nCount < 0 ) {  cb(); blinkID = null; }
    
                // ternary operator
                toggle = toggle ? false : true;
    
    //DEBUG:    console.log( "L77  toggle: " + toggle );
                console.log( "L78  State LED: " + ( toggle ? "on" : "off" ) );
    //DEBUG:    console.log( "L79  count: " + nCount + "   toggle: " + toggle );
    
                // Set state of LED - watch pin mode - If LED anode tied hi
                digitalWrite( PIN_LED, toggle );   // a lo will turn on
    
                nCount--;
               }, durationBlink);
          
            console.log( "L87   TERMINATING Test" );
            }, timeout)
    
            // if
            }
    
        console.log( "L93  time: " + getTime() );
        }, delay);
    
    // function
    }
      
    
    startTest();
      
    
    
    // Simple watchdog in case our test loop above runs amuck
    setTimeout(function () {    
       console.log( "L106  WatchDog  TERMINATING   should never get here though" );
       ci();
       cb();
    }, ( (durationTest*1000) + 2000 ) );
    


     ____                 _
    |  __|___ ___ ___ _ _|_|___ ___
    |  __|_ -| . |  _| | | |   | . |
    |____|___|  _|_| |___|_|_|_|___|
             |_| espruino.com
     2v04 (c) 2019 G.Williams
    >
    L93  time: 946685464.98464584350
    L93  time: 946685465.58461284637
    L93  time: 946685466.18463134765
    L60     Sending WRITE command to device
    L93  time: 946685466.78632259368
    L93  time: 946685467.38473415374
    L93  time: 946685467.98462772369
    L93  time: 946685468.58465099334
    L93  time: 946685469.18467044830
    L93  time: 946685469.78472423553
    L67     Sending READ command to device
    L78  State LED: on
    L78  State LED: off
    L78  State LED: on
    L78  State LED: off
    L78  State LED: on
    L78  State LED: off
    L93  time: 946685470.98464107513
    L93  time: 946685471.58464050292
    L93  time: 946685472.18469142913
    L93  time: 946685472.78465366363
    L93  time: 946685473.38461399078
    L93  time: 946685473.98462963104
    L93  time: 946685474.58469295501
    L87     TERMINATING   Test
    > 
    

    More Info:

    https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Timeouts_and_intervals#setinterval

About

Avatar for Robin @Robin started