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