uuu000

millis_and_finite_state_machine_micro_copy__copy_22052023

May 22nd, 2023
892
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1.  
  2.  
  3. const int buttonPin = 8;
  4. int last_button_value = HIGH;   // pin 2 is HIGH when button is not pressed
  5. const int ledPin = 9;
  6. uint8_t state=0 ;
  7.  
  8. void setup()
  9. {
  10.   pinMode( buttonPin, INPUT_PULLUP);
  11.   pinMode( ledPin, OUTPUT);
  12. }
  13.  
  14.  
  15. void loop()
  16. {
  17.  
  18.   bool buttonPressed = false;
  19. bool buttonReleased = false;
  20.   int button_value = digitalRead( buttonPin);
  21.  
  22.   if( button_value != last_button_value)
  23.   {
  24.     if( button_value == LOW)  // low is button pressed
  25.     {
  26.       buttonPressed = true;
  27.     }
  28.     else
  29.     {
  30.       buttonReleased = true;
  31.     }
  32.     last_button_value = button_value;
  33.   }
  34.  
  35.   switch( state)
  36.   {
  37.     case 0:
  38.     digitalWrite( ledPin, LOW);
  39.     state = 1;
  40.     break;
  41.  
  42.     case 1:
  43.     if( buttonPressed)
  44.       {
  45.         state = 2;      
  46.       }
  47.       break;
  48.  
  49.     case 2:
  50.       digitalWrite( ledPin, HIGH);
  51.        if( buttonPressed)
  52.       {
  53.        state = 3;
  54.        }    
  55.       break;
  56.      
  57.     case 3:
  58.      digitalWrite(9, (millis() / 500) % 2);
  59.      if( buttonPressed)
  60.      {
  61.       state = 4;
  62.      }
  63.       break;
  64.  
  65.     case 4:    
  66.      digitalWrite(9, (millis() / 167) % 2);
  67.       if( buttonPressed)
  68.       {
  69.      
  70.         state = 5;
  71.       }    
  72.       break;  
  73.  
  74.       case 5:    
  75.      digitalWrite(9, (millis() / 34) % 2);
  76.       if( buttonPressed)
  77.       {
  78.      
  79.         state = 6;
  80.       }    
  81.       break;  
  82.  
  83.       case 6:    
  84.      digitalWrite(9, (millis() / 20) % 2);
  85.       if( buttonPressed)
  86.       {
  87.      
  88.         state = 7;
  89.       }    
  90.       break;  
  91.       case 7:    
  92.      digitalWrite(9, (millis() / 8) % 2);
  93.       if( buttonPressed)
  94.       {
  95.      
  96.         state = 8;
  97.       }    
  98.       break;  
  99.       case 8:    
  100.      digitalWrite(9, (millis() / 4) % 2);
  101.       if( buttonPressed)
  102.       {
  103.      
  104.         state = 0;
  105.       }    
  106.       break;  
  107.   }
  108. }
  109.  
Advertisement
Add Comment
Please, Sign In to add comment