#include <Arduino.h>
#define LED_BLINK D10
#define LED_BUTTON D11
#define LED_FIBO D12
#define BUTTON_PIN A3
int fibIndex = 1;
// =====================================================
// FIBONACCI
// =====================================================
unsigned long fibonacci(int n) {
if (n <= 1)
return n;
unsigned long a = 0;
unsigned long b = 1;
unsigned long c;
for (int i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
// =====================================================
// TIMING VARIABLES
// =====================================================
unsigned long lastBlink = 0;
unsigned long lastFibo = 0;
bool blinkState = false;
// =====================================================
// SETUP
// =====================================================
void setup() {
Serial.begin(115200);
pinMode(LED_BLINK, OUTPUT);
pinMode(LED_BUTTON, OUTPUT);
pinMode(LED_FIBO, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
// =====================================================
// LOOP (ALL TASK IN ONE LOOP)
// =====================================================
void loop() {
unsigned long now = millis();
// =====================================================
// 1. LED BLINK 1 Hz
// =====================================================
if (now - lastBlink >= 500) {
lastBlink = now;
blinkState = !blinkState;
digitalWrite(LED_BLINK, blinkState);
}
// =====================================================
// 2. BUTTON LED
// =====================================================
if (digitalRead(BUTTON_PIN) == LOW) {
digitalWrite(LED_BUTTON, HIGH);
} else {
digitalWrite(LED_BUTTON, LOW);
}
// =====================================================
// 3. FIBONACCI TASK (0.1 detik)
// =====================================================
if (now - lastFibo >= 100) {
lastFibo = now;
digitalWrite(LED_FIBO, LOW);
unsigned long startTime = micros();
unsigned long result = fibonacci(fibIndex);
unsigned long endTime = micros();
// =================================================
// PULSE LED FIBO (SOLUSI SETARA RTOS VERSION)
// =================================================
digitalWrite(LED_FIBO, HIGH);
delay(30);
digitalWrite(LED_FIBO, LOW);
// =================================================
// SERIAL OUTPUT
// =================================================
Serial.print("Fib(");
Serial.print(fibIndex);
Serial.print(") = ");
Serial.print(result);
Serial.print(" | Time = ");
Serial.print(endTime - startTime);
Serial.println(" us");
fibIndex++;
if (fibIndex > 45)
fibIndex = 1;
}
}