Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - #define ctsPin 3 // btn
 - const unsigned long eventInterval = 100;
 - const unsigned long eventIntervalBr = 5;
 - int ledPin = 5; // мосфет
 - int countMs = 0;
 - bool isEnabled = 0;
 - bool brDirection = 0; //0 - вниз. 1 - вверх
 - int brightness = 255;
 - int keyStage = 0; // 0 - not pressed; 1 - pressed; 2 - in long press; 3 - release;
 - int prevStage = 0;
 - unsigned long previousTimeBr = 0;
 - unsigned long previousTime = 0;
 - void setup() {
 - pinMode(ledPin, OUTPUT);
 - pinMode(ctsPin, INPUT);
 - }
 - void loop() {
 - handlePress();
 - switch (keyStage) {
 - case 1:
 - break;
 - case 2:
 - changeBr();
 - break;
 - case 3:
 - if (prevStage != 2)
 - toggleLed();
 - break;
 - }
 - }
 - void swapDirection()
 - {
 - if(brDirection == 0)
 - brDirection = 1;
 - else
 - brDirection = 0;
 - }
 - void handlePress()
 - {
 - prevStage = keyStage;
 - int ctsValue = digitalRead(ctsPin);
 - if (ctsValue == HIGH){
 - unsigned long currentTime = millis(); // округление в десятые доли
 - if (currentTime - previousTime <= eventInterval) {
 - return;
 - }
 - previousTime = millis();
 - if (keyStage == 0 && countMs > 1 && countMs < 5)
 - keyStage = 1; //Мы нажали на кнопку
 - countMs+=1;
 - if (countMs >= 5)
 - keyStage = 2; //release event is over.
 - }
 - else
 - {
 - previousTime = 0;
 - if (keyStage == 3)
 - keyStage = 0; //release event is over.
 - if (countMs!=0)
 - {
 - // Serial.print("TOUCHED + ");
 - // Serial.print(countMs);
 - // Serial.print(". SWAP = ");
 - // Serial.println(brDirection);
 - keyStage = 3;
 - }
 - if(countMs>=5)
 - swapDirection();
 - countMs=0;
 - }
 - }
 - void toggleLed()
 - {
 - if(isEnabled == 0)
 - {
 - isEnabled = 1;
 - analogWrite(ledPin, brightness);
 - }
 - else {
 - isEnabled = 0;
 - analogWrite(ledPin, 0);
 - }
 - }
 - void changeBr()
 - {
 - if(isEnabled == 0) //long press always turns led on
 - {
 - isEnabled = 1;
 - digitalWrite(ledPin, HIGH);
 - }
 - unsigned long currentTime = millis(); // плавная понижайка
 - if (currentTime - previousTimeBr <= eventIntervalBr) {
 - return;
 - }
 - previousTimeBr = millis();
 - if(brDirection == 0 && brightness>15)
 - brightness-=1;
 - else if(brDirection == 1 && brightness<255)
 - brightness+=1;
 - analogWrite(ledPin, brightness);
 - }
 
                    Add Comment                
                
                        Please, Sign In to add comment