// Menyertakan Library yang dibutuhkan
#include <Arduino.h>
// Variable Counter sebagai volatile int (GLOBAL VARIABLE)
volatile int counter = 0;
// Variable untuk menyimpan waktu pada proses increment counter
unsigned long lastCounterTime = 0;
// Variabel time interval untuk setiap increment
const unsigned long counterInterval = 1000;
// Thread ISR
void isr() {
counter++; // GLOBAL VARIABLE
}
// Thread counter pertama
void counterFunc() {
unsigned long now = millis(); //LOCAL VARIABLE untuk thread counter pertama
// Perintah increment variabel counter setiap millisecond
if (now - lastCounterTime >= counterInterval) {
lastCounterTime = now;
counter++;
Serial.print("Counter: ");
Serial.println(counter);
}
}
// Thread counter kedua
void counterFunc2() {
unsigned long now = millis(); //LOCAL VARIABLE untuk thread counter kedua
// Perintah increment variabel counter setiap 2 x millisecond
if (now - lastCounterTime >= 2*counterInterval) {
lastCounterTime = now;
counter++;
Serial.print("Counter 2: ");
Serial.println(counter);
}
}
void setup() {
Serial.begin(9600); // Inisiali terminal monitor -> serial
pinMode(2, INPUT); // Atur pin 2 sebagai input untuk pemanggilan thread ISR
attachInterrupt(digitalPinToInterrupt(2), isr, FALLING); // memanggil thread isr
}
void loop() {
// Fungsi menjadi Non-Reentrant jika thread isr dieksekusi
counterFunc(); // Memanggil thread counter pertama
counterFunc2(); // Memanggil thread counter kedua
}