#include <Servo.h> // Include the Servo library
// Inisialisasi objek servo
Servo myServo;
// Variabel untuk menyimpan waktu sebelumnya
unsigned long previousMillis = 0;
// Interval waktu dalam milidetik (20 ms)
const long interval = 12;
// Sudut awal dan akhir
const int startAngle = 0;
const int endAngle = 140;
// Variabel untuk menyimpan sudut saat ini
int currentAngle = startAngle;
// Variabel untuk menentukan arah perubahan sudut
int angleStep = 6; // Perubahan sudut per iterasi
// Variabel untuk penundaan setelah mencapai sudut 0 derajat
bool delayActive = false;
unsigned long delayStart = 0;
const long delayDuration = 2000; // 2 detik
void setup() {
// Attach servo ke pin 9
myServo.attach(9);
// Set initial position
myServo.write(currentAngle);
}
void loop() {
// Ambil waktu saat ini dalam milidetik
unsigned long currentMillis = millis();
if (!delayActive) {
// Periksa apakah sudah melewati interval waktu yang ditentukan
if (currentMillis - previousMillis >= interval) {
// Simpan waktu terakhir saat perubahan sudut
previousMillis = currentMillis;
// Update sudut
currentAngle += angleStep;
// Jika mencapai sudut akhir atau sudut awal, ubah arah
if (currentAngle >= endAngle || currentAngle <= startAngle) {
angleStep = -angleStep;
// Jika mencapai sudut 0 derajat, aktifkan penundaan
if (currentAngle == startAngle) {
delayActive = true;
delayStart = currentMillis;
}
}
// Set sudut servo
myServo.write(currentAngle);
}
} else {
// Jika penundaan aktif, periksa apakah waktu penundaan sudah berlalu
if (currentMillis - delayStart >= delayDuration) {
delayActive = false;
}
}
}