const int buttonPin = PA0;
const int ledPin = PB6;
int ledState = LOW;
int brightness = 0;
bool directionUp = true;
bool longPressActive = false;
unsigned long pressStartTime = 0;
const int shortPressTime = 500;
const int longPressTime = 1000;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
analogWrite(ledPin, 0);
}
void loop() {
if (digitalRead(buttonPin) == LOW) {
if (pressStartTime == 0) {
pressStartTime = millis();
}
unsigned long pressDuration = millis() - pressStartTime;
if (pressDuration > longPressTime) {
longPressActive = true;
if (directionUp) {
brightness = min(255, brightness + 1);
} else {
brightness = max(0, brightness - 1);
}
if (ledState == HIGH) {
analogWrite(ledPin, brightness);
}
delay(10);
}
} else {
if (pressStartTime != 0) {
unsigned long pressDuration = millis() - pressStartTime;
if (pressDuration < shortPressTime) {
ledState = !ledState;
if (ledState == HIGH) {
analogWrite(ledPin, brightness);
} else {
analogWrite(ledPin, 0);
}
}
if (pressDuration >= longPressTime) {
directionUp = !directionUp;
}
pressStartTime = 0;
longPressActive = false;
}
}
}