Professional Documents
Culture Documents
Practice 3
Practice 3
Група: КН-920Є
Практична робота 8
5 6 7 0.7/1.8 8 9 1.3/2.1
Програма і спрощена блок-схема алгоритму організації процесу
почергового включення/виключення світлодіодів, підключених до заданих
портів при кожному натисканні на управляючі кнопки, підключені до заданих
портів та також блок-схема алгоритму організації процесу захисту від
брязкання контактів(debounce())
class Flasher {
int ledPin;
int button;
bool lastButton;
bool currentButton;
long OnTime;
long OffTime;
bool isOnTime;
int ledState;
unsigned long previousMillis;
public:
Flasher(int pin, int buttonPin, long on, long off) {
ledPin = pin;
button = buttonPin;
pinMode(ledPin, OUTPUT);
pinMode(button, INPUT);
OnTime = on;
OffTime = off;
isOnTime = false;
lastButton = false;
currentButton = false;
ledState = LOW;
previousMillis = 0;
}
void Switch() {
currentButton = debounce();
if(lastButton == LOW && currentButton == HIGH)
isOnTime = !isOnTime;
lastButton = currentButton;
}
bool debounce() {
currentButton = digitalRead(button);
if(lastButton != currentButton) {
delay(5);
currentButton = digitalRead(button);
}
return currentButton;
}
void Update() {
unsigned long currentMillis = millis();
if ((ledState == HIGH) && (currentMillis - previousMillis >= (isOnTime ?
OnTime : OffTime))) {
ledState = LOW;
previousMillis = currentMillis;
digitalWrite(ledPin, ledState);
}
else if ((ledState == LOW) && (currentMillis - previousMillis >= (isOnTime
? OnTime : OffTime))) {
ledState = HIGH;
previousMillis = currentMillis;
digitalWrite(ledPin, ledState);
}
}
};
void setup() {
}
void switchLed() {
digitalWrite(LED_PIN_1, digitalRead(BUTTON_PIN_1) == HIGH);
}
void loop() {
led1.Update();
led2.Update();
led1.Switch();
led2.Switch();
//switchLed();
}