- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: einfaches multitasking mit arduino

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Hi inka,

    in die Richtung hab ich auch mal was gebastelt, um die Sketches mit mehreren gezeiteten Aufgaben übersichtlich zu halten:
    Code:
    #include "SimpleTimerMillis.hpp"
    using Timer = SimpleTimerMillis;
    #define SEC *1000
    
    void taskA() {
       static Timer t(2 SEC, Timer::FOREVER, Timer::START_IMMEDIATELY);
       if(t.elapsed()) Serial.println("TaskA");
    }
    
    void taskB() {
       static Timer t(0.4 SEC, Timer::FOREVER, Timer::START_IMMEDIATELY);
       if(t.elapsed()) Serial.println("TaskB");
    }
    
    void setup() { 
      Serial.begin(9600);
    }
    
    void loop() {
      taskA();
      taskB();
    }
    Die Mini-Bibliothek dazu:
    Code:
    #ifndef __SIMPLETIMER__
    #define __SIMPLETIMER__
    
    class SimpleTimerMillis {
    using millis_t = unsigned long;
    public:
      static const bool ONCE = false;
      static const bool FOREVER = true;
      static const bool START_IMMEDIATELY = true;
    
      SimpleTimerMillis() = default;
      SimpleTimerMillis(millis_t timeSpan, bool forever, bool start=false) 
        : timeSpan(timeSpan), isContinous(forever) {
          if(start) this->start();
      }
      void start() {
        startTime = millis();
      }
      void start(millis_t timeSpan) {
        this->timeSpan = timeSpan;
        start();
      }  
      bool elapsed() {
        bool elapsed = millis()-startTime > timeSpan;
        if(elapsed && isContinous) start();
        return elapsed;
      }
      bool isCountious() {
        return isContinous;
      }
      void once() { isContinous = false; }
      void forever() { isContinous = true; }
    private:
      bool isContinous = false;
      millis_t startTime = 0;
      millis_t timeSpan  = 0;
    };
    
    #endif //__SIMPLETIMER__

  2. #2
    HaWe
    Gast
    wenn es komplizierter wird, wird das mit den Timern höchst unübersichtlich und ineffizient.

    Daher gibt es ja auch für die AVR Arduinos MT-Libs:
    http://forum.arduino.cc/index.php?topic=347188.0
    http://www.rtos48.com/

    für den Due gibt es ja schon ewig die Scheduler Lib und auch Babix,
    https://www.arduino.cc/en/Reference/Scheduler
    http://forum.arduino.cc/index.php?topic=318084.0

    doch seit nicht allzulanger Zeit gibt es auch Scheduler-Libs für AVR:
    http://playground.arduino.cc/Code/Scheduler
    http://playground.arduino.cc/Code/TaskScheduler
    Geändert von HaWe (28.11.2016 um 21:56 Uhr)

Ähnliche Themen

  1. [Arduino Uno] - Multitasking und Serielle Befehle
    Von neo3000 im Forum Arduino -Plattform
    Antworten: 8
    Letzter Beitrag: 17.04.2011, 10:04
  2. Multitasking Projekt
    Von Osser im Forum Asuro
    Antworten: 26
    Letzter Beitrag: 14.03.2008, 14:24
  3. Multitasking für den Asuro (II)
    Von Giwo im Forum Asuro
    Antworten: 8
    Letzter Beitrag: 27.12.2006, 08:23
  4. Multitasking
    Von Exodus im Forum AVR Hardwarethemen
    Antworten: 44
    Letzter Beitrag: 22.06.2006, 16:18
  5. Multitasking
    Von FancanTeik im Forum Software, Algorithmen und KI
    Antworten: 11
    Letzter Beitrag: 25.04.2005, 08:16

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen