// Pin untuk push button (sesuaikan dengan pin STM32 Anda)
const uint16_t buttonOnPin = PA10; // Contoh: Pin PB0
const uint16_t buttonOffPin = PA9; // Contoh: Pin PB1
// Pin untuk LED (sesuaikan dengan pin STM32 Anda)
const uint16_t ledPins[] = {PB5, PB6, PB7, PB8, PB9, PB10, PB11, PB12}; // Contoh: Pin PA0-PA7
const uint8_t numLeds = 8;
// Variabel untuk status program
bool isRunning = false;
// Variabel untuk debouncing tombol
unsigned long lastDebounceTimeOn = 0;
unsigned long lastDebounceTimeOff = 0;
const unsigned long debounceDelay = 50; // Waktu debouncing dalam ms
void setup() {
// Set pin LED sebagai output
for (uint8_t i = 0; i < numLeds; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // Pastikan semua LED mati saat start
}
// Set pin push button sebagai input dengan pull-up
pinMode(buttonOnPin, INPUT_PULLUP);
pinMode(buttonOffPin, INPUT_PULLUP);
// Inisialisasi serial monitor untuk debugging (opsional)
Serial.begin(115200);
Serial.println("Program dimulai. Tekan tombol ON untuk memulai.");
}
void loop() {
// Baca status tombol ON
bool onButtonState = digitalRead(buttonOnPin);
// Debouncing untuk tombol ON
if (onButtonState == LOW) {
if (millis() - lastDebounceTimeOn > debounceDelay) {
lastDebounceTimeOn = millis();
// Jika tombol ON ditekan sesaat dan program belum berjalan
if (!isRunning) {
isRunning = true;
Serial.println("Tombol ON ditekan. Program LED dimulai.");
jalankanPolaLed();
}
}
}
// Baca status tombol OFF
bool offButtonState = digitalRead(buttonOffPin);
// Debouncing untuk tombol OFF
if (offButtonState == LOW) {
if (millis() - lastDebounceTimeOff > debounceDelay) {
lastDebounceTimeOff = millis();
// Jika tombol OFF ditekan sesaat dan program sedang berjalan
if (isRunning) {
isRunning = false;
matikanSemuaLed();
Serial.println("Tombol OFF ditekan. Program LED dihentikan.");
}
}
}
// Lakukan tugas lain di sini jika ada
}
void jalankanPolaLed() {
int delayTime = 200;
// Menyala dari LED 1 ke 8
Serial.println("Menyalakan LED dari 1 ke 8...");
for (uint8_t i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], HIGH);
delay(delayTime);
if (delayTime > 50) {
delayTime -= 20;
}
// Cek apakah program dihentikan saat pola menyala
if (!isRunning) {
matikanSemuaLed();
Serial.println("Program dihentikan saat pola menyala.");
return; // Keluar dari fungsi jalankanPolaLed
}
}
// Mematikan dari LED 8 ke 1
Serial.println("Mematikan LED dari 8 ke 1...");
for (int i = numLeds - 1; i >= 0; i--) {
digitalWrite(ledPins[i], LOW);
delay(delayTime);
if (delayTime > 50) {
delayTime -= 20;
}
// Cek apakah program dihentikan saat pola mematikan
if (!isRunning) {
matikanSemuaLed();
Serial.println("Program dihentikan saat pola mematikan.");
return; // Keluar dari fungsi jalankanPolaLed
}
}
// Setelah pola selesai, program tetap berjalan (siap untuk dihentikan atau dijalankan lagi)
}
void matikanSemuaLed() {
for (uint8_t i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], LOW);
}
}Loading
stm32-bluepill
stm32-bluepill