Anda di halaman 1dari 5

Lampu Kedip Dengan Model Finite State

Machine dan Interupsi Timer

Lampu Kedip Dengan Model Finite State Machine dan


Interupsi Timer
  by admin
 

 21/10/2022
 
Artikel ini adalah pengembangan dari artikel “Lampu Kedip Dengan Model Finite State Machine“.
Pada artikel tersebut pewaktuan 1 detik menggunakan fungsi delay() dari Arduino. Pada artikel ini
digunakan Timer 1 untuk mendapatkan perioda 1 detik untuk eksekusi Finite State Machine (FSM).
Spesifikasi
Sistem yang dibuat adalah lampu kedip, dengan perioda 2 detik.

Perangkat Keras
Perangkat lunak dengan Arduino Nano ATmega328. Output dengan LED yang diseri dengan resistor
pembatas arus. Nilai resistor tidak kritis. Pada percobaan ini dipakai nilai resistor 1000 ohm. LED
disambung ke port D3 pada Arduino Nano.
Model Sistem
Model FSM untuk lampu kedip adalah sebagai berikut.

Perangkat Lunak
Pada sistem ini diperlukan pewaktuan (timing) agar lampu berkedip dengan frekuensi 0,5 Hz. Untuk itu
diperlukan FSM yang dihitung/dipanggil setiap 1 detik. Untuk membuat pemanggilan periodik seperti ini
dapat dilakukan dengan beberapa cara sebagai berikut:

 delay pada Arduino atau library lain

 interupsi timer

 delay pada Real Time Operating System misal FreeRTOS


Pada implementasi ini yang dibuat adalah menggunakan interupsi Timer 1 pada Arduino.

Model diagram alir (flowchart) perangkat lunak adalah sebagai berikut.

Inisialisasi di fungsi setup() hanya dipanggil sekali.

loop() dapat dikosongkan , karena tidak melakukan apa-apa di situ.

Interupsi Timer 1 dipanggil setiap detik oleh periferal Timer 1 pada Arduino.

Untuk mengaktifkan Timer 1 pada aplikasi ini dipakai modul TimerOne


(https://www.arduino.cc/reference/en/libraries/timerone/).
Modul ini dapat diinstall secara manual, ataupun dari Library Manager di Arduino.

Untuk instalasi manual, unzip isi library ke direktori Arduino/hardware/libraries/Timer1/ 

Untuk instalasi dengan library manager, cari library timerone dari Sketch -> Include Library -> Manage
Libraries

Source code dapat dilihat di https://github.com/waskita/embedded/tree/master/kedip/nano-fsm-timer1


Penjelasan isi source code sebagai berikut.

Bagian Awal
#include <TimerOne.h>
#define ON 100
#define OFF 101
#define LED_OUTPUT 3
int state = OFF;

Implementasi Inisialisasi
void setup() {
int output = 0;
pinMode(LED_BUILTIN, OUTPUT);
pinMode(LED_OUTPUT, OUTPUT);
Serial.begin(115200);
fsm_init(&state,&output);
fsm_output(output);
Timer1.initialize(1000000); // delay dalam microsecond
Timer1.attachInterrupt(ISR_Timer1);
}

Implementasi FSM Init


Implementasi ini serupa dengan di artikel “Lampu Kedip Dengan Model Finite State Machine“

void fsm_init(int *state, int *out) {


*state = OFF;
*out = 0;
}

Implementasi FSM
Implementasi ini serupa dengan di artikel “Lampu Kedip Dengan Model Finite State Machine“

void fsm(int *state, int *out) {


switch (*state) {
case ON: {
*state = OFF;
*out = 0;
break;
}
case OFF: {
*state = ON;
*out = 1; // nyalakan output
break;
}
}
}

Implementasi Output FSM


Implementasi ini serupa dengan di artikel “Lampu Kedip Dengan Model Finite State Machine“

void fsm_output(int output_value) {


if (output_value == 1) {
digitalWrite(LED_OUTPUT, HIGH);
} else {
digitalWrite(LED_OUTPUT, LOW);
}
}

Implementasi Interrupt Service Routine (ISR)


Fungsi ini dipanggil setiap kali terjadi interupsi timer 1. Setiap kali ada interupsi, dilakukan hal berikut:

 menghitung transisi state

 mengirim output ke port digital I/O pada Arduino


 mengirim status ke port serial. status ini dipakai untuk debugging / monitoring. Jika dipakai

pada sistem sesungguhnya (production), bagian monitoring ini tidak wajib ada.

void ISR_Timer1(void)
{
int output = 0;
fsm(&state, &output);
fsm_output(output);
Serial.print("state: ");
Serial.print(state);
Serial.print(" output: ");
Serial.print( output);
Serial.println();
}

Pengujian
Pengujian dilakukan dengan menjalankan program, kemudian mengamati kedipan lampu dan output ke
port serial.

Pada output serial akan muncul tampilan seperti berikut ini:

14:40:39.834 -> state: 100 output: 1


14:40:40.812 -> state: 101 output: 0
14:40:41.838 -> state: 100 output: 1
14:40:42.813 -> state: 101 output: 0
14:40:43.834 -> state: 100 output: 1
14:40:44.808 -> state: 101 output: 0
14:40:45.836 -> state: 100 output: 1
14:40:46.813 -> state: 101 output: 0
14:40:47.844 -> state: 100 output: 1
14:40:48.815 -> state: 101 output: 0
14:40:49.835 -> state: 100 output: 1
14:40:50.812 -> state: 101 output: 0

Pada serial monitor Arduino kita dapat mengaktifkan timestamp, sehingga kita dapat mengecek apakah
pewaktuan pada sistem ini sudah sesuai dengan yang spesifikasi.

Related Posts:
1. Lampu Kedip Dengan Model Finite State Machine
2. Prosesor untuk kuliah Pengolahan Sinyal Digital
3. Lampu On Off Dengan 1 Sakelar
4. Lampu Penyeberangan Jalan Dengan Extended State Machine
5. Lampu kedip dengan duty cycle tertentu menggunakan model finite state machine
6. Lampu kedip dengan extended state machine

Anda mungkin juga menyukai