// Membuat delay 750 ms
static const TickType_t dim_delay = 750 / portTICK_PERIOD_MS;
// Definisi pin yang digunakan
#define ledPin LED_BUILTIN
#define tombolPin 4
// Handler timer
static TimerHandle_t LED_timer = NULL;
// Tugas interrupt
void IRAM_ATTR tombolInterrupt() {
vTaskDelay(100 / portTICK_PERIOD_MS);
Serial.printf("Tombol ditekan\n");
}
// Callbacks : toggle LED
void autoDimmerCallback(TimerHandle_t xTimer) {
static bool ledState = true;
digitalWrite(ledPin, ledState);
ledState = !ledState;
Serial.printf("Running\n");
}
void setup() {
// Configure Serial
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(tombolPin, INPUT_PULLUP);
// Wait a moment to start (so we don't miss Serial output)
vTaskDelay(1000 / portTICK_PERIOD_MS);
Serial.printf("TP_IOT4_Rezki Muhammad_2106731516\n");
// Definisi interrupt
attachInterrupt(digitalPinToInterrupt(tombolPin),
tombolInterrupt,
FALLING);
// Definisi timer
LED_timer = xTimerCreate(
"LED Timer", // Name of timer
pdMS_TO_TICKS(750), // Period of timer (in ms)
pdTRUE, // Auto-reload
(void *)0, // Timer ID
autoDimmerCallback); // Callback function
if (LED_timer != NULL) {
xTimerStart(LED_timer, portMAX_DELAY); // Memulai timer
Serial.printf("\nTimer berjalan\n");
} else {Serial.printf("RIP TIMER Xv \n");}
// Delete "setup and loop" task
vTaskDelete(NULL);
}
void loop() {
// Execution should never get here
}