Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class nb_delay {
- public:
- bool isRunning = false;
- void start(unsigned long delay){
- if (!isRunning) {
- isRunning = true;
- t_start = millis();
- t_delay = delay;
- }
- }
- bool elapsed(){
- if (isRunning && (millis() - t_start >= t_delay) ){
- isRunning = false;
- return true; // timer is elapsed
- }
- return false;
- }
- private:
- unsigned long t_start = millis();
- unsigned long t_delay = 1000;
- };
- nb_delay delay1, delay2;
- const byte Start_Delay2 = 2;
- unsigned int counter = 1;
- void setup() {
- Serial.begin(115200);
- Serial.println(F("Non Blocking delay example"));
- pinMode(LED_BUILTIN, OUTPUT);
- pinMode(Start_Delay2, INPUT_PULLUP);
- }
- void loop() {
- delay1.start(500);
- // Blink onboard LED every 500ms
- if (delay1.elapsed()){
- digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
- }
- // Start delay2 only when button on pin D2 was pressed
- if(digitalRead(Start_Delay2) == LOW ){
- /* Debounce if necessary.
- * Increase delay(1) for bad contact.
- * Here we need a blocking delay(!) or use a suitable RC filter.
- */
- //while(digitalRead(Start_Delay2) == LOW){delay(1);}
- // Start delay2 with a timeout depending on value of counter
- Serial.print(F("\nStart delay2 at "));
- Serial.println(millis());
- Serial.print(F("Time to wait: "));
- Serial.println(counter*1000);
- delay2.start(counter*1000);
- counter++;
- }
- if (delay2.elapsed()){
- Serial.print(F("delay2 time has elapsed: "));
- Serial.println(millis());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement