Guest User

Untitled

a guest
Aug 1st, 2020
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define ctsPin 3 // btn
  2. const unsigned long eventInterval = 100;
  3. const unsigned long eventIntervalBr = 5;
  4.  
  5.  
  6. int ledPin = 5; // мосфет
  7. int countMs = 0;
  8. bool isEnabled = 0;
  9. bool brDirection = 0;       //0 - вниз. 1 - вверх
  10. int brightness = 255;
  11. int keyStage = 0;      // 0 - not pressed; 1 - pressed; 2 - in long press; 3 - release;
  12. int prevStage = 0;
  13.  
  14. unsigned long previousTimeBr = 0;
  15. unsigned long previousTime = 0;
  16.  
  17.  
  18. void setup() {
  19.    
  20.   pinMode(ledPin, OUTPUT);
  21.  
  22.   pinMode(ctsPin, INPUT);
  23.  
  24. }
  25.  
  26. void loop() {
  27.   handlePress();
  28.  
  29.   switch (keyStage) {
  30.     case 1:    
  31.       break;
  32.     case 2:    
  33.       changeBr();
  34.       break;
  35.     case 3:  
  36.       if (prevStage != 2)        
  37.         toggleLed();
  38.       break;
  39.   }
  40.  
  41.  
  42.  
  43. }
  44.  
  45. void swapDirection()
  46. {
  47.   if(brDirection == 0)
  48.     brDirection = 1;
  49.   else
  50.     brDirection = 0;
  51. }
  52.  
  53. void handlePress()
  54. {
  55.   prevStage = keyStage;
  56.   int ctsValue = digitalRead(ctsPin);
  57.   if (ctsValue == HIGH){
  58.    
  59.     unsigned long currentTime = millis();                       // округление в десятые доли
  60.     if (currentTime - previousTime <= eventInterval) {
  61.       return;
  62.     }
  63.     previousTime = millis();
  64.  
  65.     if (keyStage == 0 && countMs > 1 && countMs < 5)
  66.       keyStage = 1;         //Мы нажали на кнопку
  67.  
  68.     countMs+=1;
  69.  
  70.     if (countMs >= 5)
  71.       keyStage = 2;         //release event is over.
  72.  
  73.  
  74.   }
  75.   else
  76.   {
  77.     previousTime = 0;
  78.  
  79.     if (keyStage == 3)
  80.       keyStage = 0;         //release event is over.
  81.    
  82.     if (countMs!=0)
  83.     {
  84. //      Serial.print("TOUCHED + ");
  85. //      Serial.print(countMs);
  86. //      Serial.print(". SWAP = ");
  87. //      Serial.println(brDirection);
  88.       keyStage = 3;
  89.     }
  90.  
  91.     if(countMs>=5)
  92.       swapDirection();
  93.    
  94.     countMs=0;  
  95.   }
  96. }
  97.  
  98. void toggleLed()
  99. {
  100.   if(isEnabled == 0)
  101.   {
  102.     isEnabled = 1;
  103.     analogWrite(ledPin, brightness);
  104.   }
  105.   else {
  106.     isEnabled = 0;
  107.     analogWrite(ledPin, 0);
  108.   }
  109. }
  110.  
  111. void changeBr()
  112. {
  113.   if(isEnabled == 0)                  //long press always turns led on
  114.   {
  115.     isEnabled = 1;
  116.     digitalWrite(ledPin, HIGH);
  117.   }
  118.  
  119.   unsigned long currentTime = millis();                       // плавная понижайка
  120.   if (currentTime - previousTimeBr <= eventIntervalBr) {
  121.     return;
  122.   }
  123.   previousTimeBr = millis();
  124.  
  125.   if(brDirection == 0 && brightness>15)
  126.     brightness-=1;
  127.   else if(brDirection == 1 && brightness<255)
  128.     brightness+=1;
  129.  
  130.   analogWrite(ledPin, brightness);
  131.  
  132. }
Add Comment
Please, Sign In to add comment