Advertisement
DokanBoy

Arduino Timer

Oct 16th, 2020
1,800
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #define DEFAULT_MONITOR_SPEED 115200
  2.  
  3. #include <Arduino.h>
  4. #include <string.h>
  5. #include <math.h>
  6.  
  7. struct Time
  8. {
  9.   unsigned short int days;
  10.   byte hours;
  11.   byte mins;
  12.   byte secs;
  13.   unsigned short int millis;
  14. };
  15.  
  16. void tickTime(Time &time);
  17.  
  18. Time time = {0, 0, 0, 0};
  19. unsigned long usTime;
  20.  
  21. void setup()
  22. {
  23.   Serial.begin(DEFAULT_MONITOR_SPEED);
  24.   usTime = micros();
  25. }
  26.  
  27. void loop()
  28. {
  29.  
  30.   if (abs(micros() - usTime) >= 1000)
  31.   {
  32.     tickTime(time);
  33.     usTime = micros();
  34.  
  35.     // Выводим время каждую мс
  36.     String formattedTime = "Time: ";
  37.     formattedTime.concat(time.days);
  38.     formattedTime.concat("d : ");
  39.     formattedTime.concat(time.hours);
  40.     formattedTime.concat("h : ");
  41.     formattedTime.concat(time.mins);
  42.     formattedTime.concat("m : ");
  43.     formattedTime.concat(time.secs);
  44.     formattedTime.concat("s : ");
  45.     formattedTime.concat(time.millis);
  46.     formattedTime.concat("ms");
  47.  
  48.     Serial.println(formattedTime);
  49.   }
  50. }
  51.  
  52. void tickTime(Time &time)
  53. {
  54.   time.millis += 1;
  55.  
  56.   if (time.hours >= 24)
  57.   {
  58.     time.hours -= 24;
  59.     time.days += 1;
  60.   }
  61.  
  62.   if (time.mins >= 60)
  63.   {
  64.     time.mins -= 60;
  65.     time.hours += 1;
  66.   }
  67.  
  68.   if (time.secs >= 60)
  69.   {
  70.     time.secs -= 60;
  71.     time.mins += 1;
  72.   }
  73.  
  74.   if (time.millis >= 1000)
  75.   {
  76.     time.millis -= 1000;
  77.     time.secs += 1;
  78.   }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement