Advertisement
Robert_l

4 gpio time machine

Jun 3rd, 2023
827
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.23 KB | None | 0 0
  1. /******************************************************************************
  2.  
  3.                             Online C Compiler.
  4.                 Code, Compile, Run and Debug C program online.
  5. Write your code in this editor and press "Run" button to compile and execute it.
  6.  
  7. *******************************************************************************/
  8.  
  9. #include <stdio.h>
  10. #include <sys/time.h>
  11. #include <inttypes.h>
  12.  
  13. uint32_t millis(void) {
  14.     struct timeval tv;
  15.     gettimeofday(&tv,NULL);
  16.     return (((uint32_t)tv.tv_sec)*1000)+(tv.tv_usec/1000);
  17. }
  18.  
  19. enum states {idle, start, t1_expired,t2_expired,t3_expired,t4_expired};
  20.  
  21. enum states timer_state = idle;
  22. uint32_t delay = 0;
  23. uint32_t last_time = 0;
  24.  
  25. void timer_start(void){
  26.     timer_state = start;
  27. }
  28.  
  29. void timer_run(void){
  30.     if (millis() - last_time < delay){
  31.         return;
  32.     }
  33.     switch(timer_state){
  34.         case idle:
  35.             delay = 0;
  36.             last_time = 0;
  37.             break;
  38.         case start:
  39.             delay = 10; //t1
  40.             last_time = millis();
  41.             printf("start at      %u \n", millis());
  42.             timer_state = t1_expired;
  43.             break;
  44.         case t1_expired:
  45.             last_time += delay; // not use millis() to not accumulate time error
  46.             delay = 20;//t2
  47.             printf("t1 expired at %u \n", millis());
  48.             timer_state = t2_expired;
  49.             break;
  50.         case t2_expired:
  51.             last_time += delay;
  52.             delay = 30;//t3
  53.             printf("t2 expired at %u \n", millis());
  54.             timer_state = t3_expired;
  55.             break;
  56.         case t3_expired:
  57.             last_time += delay;
  58.             delay = 40;//t4
  59.             printf("t3 expired at %u \n", millis());
  60.             timer_state = t4_expired;
  61.             break;
  62.         case t4_expired:
  63.             printf("t4 expired at %u \n", millis());
  64.             timer_state = idle;
  65.             break;
  66.         default:
  67.              printf("warning: default state %u \n", millis());
  68.             timer_state = idle;
  69.             break;
  70.     }
  71. }
  72.  
  73. int main()
  74. {
  75.     timer_run();
  76.     timer_start();
  77.    
  78.     while(timer_state != idle){
  79.         timer_run();
  80.     }
  81.     printf("end");
  82.  
  83.     return 0;
  84. }
  85.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement