Kod: Zaznacz cały
#include <ESP8266WiFi.h>
#include <Servo.h>
Servo myservo;
int buttonPin = D1; // przycisk podłączony do pinu D1
int buttonState = 0;
int lastButtonState = 0;
int position = 0; // początkowa pozycja serwa
unsigned long lastButtonTime = 0; // czas ostatniego naciśnięcia przycisku
//unsigned long returnTime = 5000; // czas powrotu serwa do pozycji 0 (w milisekundach)
unsigned long debounceDelay = 500; // opóźnienie czasowe do przycisku (w milisekundach)
void setup() {
myservo.attach(D5); // podłączenie serwomechanizmu do pinu D5
pinMode(buttonPin, INPUT_PULLUP); // ustawienie pinu przycisku jako wejście i włączenie wewnętrznego pull-up resistora
myservo.write(position); // ustawienie początkowej pozycji serwa na 0 stopni
}
void loop() {
unsigned long currentTime = millis(); // aktualny czas w milisekundach
buttonState = digitalRead(buttonPin); // odczytanie stanu przycisku
if (buttonState != lastButtonState && (currentTime - lastButtonTime) > debounceDelay) {
if (buttonState == LOW) { // jeśli przycisk został naciśnięty
if (position == 0) { // jeśli serwo jest w pozycji 0 stopni
position = 180; // ustawienie pozycji serwa na 90 stopni
lastButtonTime = currentTime; // zapisanie czasu ostatniego naciśnięcia przycisku
}
else { // jeśli serwo jest w pozycji 90 stopni
position = 0; // ustawienie pozycji serwa na 0 stopni
}
myservo.write(position); // ustawienie kąta obrotu serwomechanizmu na wartość pozycji
}
lastButtonState = buttonState; // zapisanie aktualnego stanu przycisku
}
if (position != 0 && (currentTime - lastButtonTime) >= returnTime) { // jeśli serwo nie jest w pozycji 0 i upłynął czas powrotu do pozycji 0
position = 0; // ustawienie pozycji serwa na 0 stopni
myservo.write(position); // ustawienie kąta obrotu serwomechanizmu na wartość pozycji
}
}