Untitled

 avatar
unknown
plain_text
a year ago
1.4 kB
13
Indexable
const int led1Pin = 12;
const int led2Pin = 14;
const int buttonPin = 27;

hw_timer_t *timer = NULL;
volatile int timerInterruptCount = 0;
const long timerInterval = 3500000; //Absen 33

volatile int externalInterruptCount = 0;
volatile unsigned long lastButtonPressTime = 0;

volatile bool led1State = LOW;
volatile bool led2State = LOW;

void IRAM_ATTR onTimer() {
  led1State = !led1State;
  digitalWrite(led1Pin, led1State);
  timerInterruptCount++;
}

void IRAM_ATTR onButtonPress() {
  if (millis() - lastButtonPressTime > 50) {
    led2State = !led2State;
    digitalWrite(led2Pin, led2State);
    externalInterruptCount++;
    lastButtonPressTime = millis();
  }
}

void setup() {
  Serial.begin(115220);
  pinMode(led1Pin, OUTPUT);
  pinMode(led2Pin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);

  timer = timerBegin(1000000); 
  timerAttachInterrupt(timer, &onTimer);
  timerAlarm(timer, timerInterval, true, 0);

  attachInterrupt(digitalPinToInterrupt(buttonPin), onButtonPress, FALLING);

  Serial.println("Setup selesai. Menunggu interupsi...");
}

void loop() {
  static unsigned long lastPrintTime = 0;
  if (millis() - lastPrintTime > 1000) {
    Serial.print("Interupsi Internal: ");
    Serial.print(timerInterruptCount);
    Serial.print(" | Interupsi Eksternal: ");
    Serial.println(externalInterruptCount);
    lastPrintTime = millis();
  }
}
Editor is loading...
Leave a Comment