mainloop lebih besar daripada waktu receiver input pada ISR, artinya receiver input tidak menerima pulsa pwm dari perangkat receiver, maka system failsafe akan bekerja dengan
cara memberikan nilai pada throttle sebesar 1550µS, sehingga ESC akan memerintahkan motor untuk berputar dengan pwm 1550µS dan wahana akan landing secara perlahan.
4.3.3. Subrutin Menghitung Sensor
Subrutin Menghitung Sensor dipanggil dengan perintah sensor_gyro;. Pemanggilan ini dilakukan selama proses terbang atau dalam fungsi main loop. Perhitungan sensor ini
dimulai dengan komunikasi dengan sensor gyro pada alamat 1101001b atau 105 desimal. Selanjutnya mulai membaca nilai sensor dengan cara membaca register 28h pada gyro dan
menerima 6byte data sensor yang masing masing mewakili nilai pitch, roll, yaw. Setelah data diterima, nilai terukur pada masing masing sumbu akan dikurangi dengan nilai kalibrasi
sensor, sehingga didapatkan nilai sensor sesungguhnya. Sedangkan sensor barometer dipanggil dengan perintah hitung_baro;. Pemanggilan
ini dilakukan setiap 1 x 350 looping program dalam fungsi main loop. Pada Gambar 2.21 memperlihatkan proses pengambilan nilai tekanan udara pada sensor baro yang selanjutnya
dihitung untuk diperoleh nilai ketinggian.
4.3.4. Subrutin Menghitung PID
Subrutin menghitung PID dipanggil dengan perintah menghitung_pid;. Pemanggilan ini dilakukan selama proses terbang atau dalam fungsi main loop dan harus sesudah
mendapatkan nilai sensor yang terukur. Dalam subrutin menghitung pid, terdapat 3 proses yang dilakukan untuk menghitung masing masing output pid pada pitch, roll, dan yaw.
Perhitungan ini dimulai dengan mencari error dari input roll dikurangi dengan setpoin dari receiver. Selanjutnya perhitungan dilakukan dengan mengakumulasi parameter Kp, Ki,
Kd sehingga didapatkan nilai output PID pitch, roll, dan yaw. Nilai tersebut memiliki offset yang sudah diatur di proses inisialisasi yaitu ± 100.
4.3.5. Receiver Input
Subrutin receiver input berjalan diluar fungsi main loop yaitu didalam fungsi Interrupt Service Routine ISR . pada bab sebelumnya, pengambilan paket data yang dikirim dari
perangkat navigasi GCS dimuat dalam satu buah mikrokontroler dengan proses terbang. Namun, sistem merancang pengambilan paket data dimuat dalam mikrokontroler yang
berbeda seperti yang telah dibahas di Pengujian Pengiriman Paket Data dari GCS ke Receiver sub bab 4.2.5.
Sistem menggunakan PORTK Arduino 2560 sebagai receiver input. Karena PORTK adalah analog input A8 - A15, maka diperlukan pengubahan input analog menjadi input
digital dengan cara DDRK = 0. Karena PORTK adalah pin interrupt 16 -23, maka PCIE2 diaktifkan untuk melakukan interrupt pada pin A8 - A15. Jadi, selama proses main loop
berlangsung Fungsi ISR akan mengaktifkan interrupt vector pada PCINT2_vect sehingga data receiver akan terus diperbaharui sesuai perintah perangkta navigasi dari GCS.
Untuk mendapatkan nilai receiver, maka sistem memanfaatkan waktu micros yang telah disediakan oleh mikrokontroler ATMEGA2560 untuk menghitung waktu receiver
input HIGH sampai LOW. Dalam rentang waktu HIGH ke LOW tersebut didapatkan nilai sesuai dengan perintah receiver yang diterima dari perangkat navigasi pada GCS.
4.3.6. Program Penerima