Development

General / Utils:

» UT 08: millis function

This example shows how to use the millis() function to perform time-controlled loops

Required Materials

1 x Waspmote
1 x MiniUSB wire
1 x Battery

Notes

This example can be executed in Waspmote v12 and Waspmote v15

Code

/*
 *  ------   [UT_08] - millis() function   -------- 
 *
 *  Explanation: This example shows how to use the millis() function
 *  to perform time-controlled loops
 *
 *  Copyright (C) 2016 Libelium Comunicaciones Distribuidas S.L. 
 *  http://www.libelium.com 
 *  
 *  This program is free software: you can redistribute it and/or modify 
 *  it under the terms of the GNU General Public License as published by 
 *  the Free Software Foundation, either version 3 of the License, or 
 *  (at your option) any later version. 
 *  
 *  This program is distributed in the hope that it will be useful, 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 *  GNU General Public License for more details. 
 *  
 *  You should have received a copy of the GNU General Public License 
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 *  
 *  Version:           3.0
 *  Design:            David Gascon 
 *  Implementation:    Yuri Carmona
 */

// define variable to store number of milliseconds
unsigned long previous;

// define timeout: 10 seconds
unsigned long TIMEOUT = 10000; // ms units


void setup() 
{ 
  USB.ON();
  USB.println(F("UT_08 example - millis function\n"));

  // get millis() value
  previous = millis();

  USB.print(F("millis() function returns the execution time (ms units):"));
  USB.println(previous);
  USB.println();
}



void loop() 
{
  // 1. get actual time
  previous = millis();
  
  USB.print(F("1. Enter while loop with previous = "));
  USB.println(previous);


  // 2. enter while loop for specified TIMEOUT
  while( (millis() - previous) < TIMEOUT )
  {
    // Do whatever...
    USB.print(F("2. Inside while loop until timeout. millis() = "));
    USB.println(millis());
    delay(1000);

    // Check overflow (mandatory sentence)
    if( millis()<previous )  previous = millis();
  }


  // 3. exit while loop
  USB.println(F("3. Exit while loop"));
  USB.println();
  
  
  delay(5000);
}







Output

H#
UT_08 example - millis function

millis() function returns the execution time (ms units):253

1. Enter while loop with previous = 470
2. Inside while loop until timeout. millis() = 766
2. Inside while loop until timeout. millis() = 1943
2. Inside while loop until timeout. millis() = 3120
2. Inside while loop until timeout. millis() = 4296
2. Inside while loop until timeout. millis() = 5473
2. Inside while loop until timeout. millis() = 6650
2. Inside while loop until timeout. millis() = 7826
2. Inside while loop until timeout. millis() = 9003
2. Inside while loop until timeout. millis() = 10180
3. Exit while loop

1. Enter while loop with previous = 16280
2. Inside while loop until timeout. millis() = 16576
2. Inside while loop until timeout. millis() = 17753
2. Inside while loop until timeout. millis() = 18930
2. Inside while loop until timeout. millis() = 20106
2. Inside while loop until timeout. millis() = 21283
2. Inside while loop until timeout. millis() = 22460
2. Inside while loop until timeout. millis() = 23636
2. Inside while loop until timeout. millis() = 24813
2. Inside while loop until timeout. millis() = 25990
3. Exit while loop

1. Enter while loop with previous = 32090
2. Inside while loop until timeout. millis() = 32386
2. Inside while loop until timeout. millis() = 33563
2. Inside while loop until timeout. millis() = 34740
2. Inside while loop until timeout. millis() = 35916
2. Inside while loop until timeout. millis() = 37093
2. Inside while loop until timeout. millis() = 38270
2. Inside while loop until timeout. millis() = 39446
2. Inside while loop until timeout. millis() = 40623
2. Inside while loop until timeout. millis() = 41800
3. Exit while loop

Quick Publish: