77
LAPORAN WORKSHOP PERANGKAT KERAS DAN PERANGKAT LUNAK “SISTEM HARD REALTIME PADA ARM 11 PHYTEC PHYCORE MONITORING CURAH HUJAN” Nama Kelompok : Abd. Muhaimin (2210121031) Dyah Agustinah W (2210121034) Anang Habibi (2210121037) Pratomo Adhi N (2210121040) M. Ismi Musyafani (2210121054)

Laporan ARM Phycore

Embed Size (px)

DESCRIPTION

laporan resmi projek workshop perangkat lunak dan perangkat keras

Citation preview

LAPORAN WORKSHOP PERANGKAT KERAS DAN PERANGKAT LUNAK SISTEM HARD REALTIME PADA ARM 11 PHYTEC PHYCORE MONITORING CURAH HUJAN

Nama Kelompok :Abd. Muhaimin(2210121031)Dyah Agustinah W(2210121034)Anang Habibi(2210121037)Pratomo Adhi N(2210121040)M. Ismi Musyafani(2210121054)

3 D4 Teknik Komputer BPOLITEKNIK ELEKTRONIKA NEGERI SURABAYA2015

I. TUJUANMahasiswa dapat mengaplikasikan sistem Soft Real Time di modul RTOS.

II. DASAR TEORI PhyCORE-i.MX31 Development KitPhyCORE-i.MX31 merupakan prosesor dari keluarga ARM 11. Modul ini sudah cukup lengkap. Terdapat Ethernet, RAM, LCD, serial, audio output, usb device, dan slot SD card. Untuk bisa mengakses phyCore bukanlah hal yang mudah. Banyak sekali pengaturan yang harus dikerjakan. Untuk mengkonfigurasi phyCORE perlu adanya sambungan kabel serial atau juga bisa menggunakan kabel cross yang dihubungkan dengan computer. Tapi sebelumnya harus disiapkan aplikasi dan software-software pada computer (host) yang berkaitan dengan phyCORE.

Prosesor MCIMX31Prosesor MCIMX31 masih tergolong dalam ARM1136JF-S dengan inti yang mampu berjalan hingga 532 MHz, serta dioptimalkan untuk konsumsi daya rendah menggunakan teknik yang paling canggih dalam penghematan daya (DPTC, DVFS, power gating, clock gating). Dengan teknologi 90 nm dan transistor dual-Vt (dua tegangan threshold), yang mana MCIMX31 memberikan kinerja optimal dalam menghindari kebocoran arus. Kinerja MCIMX31 didorong oleh sistem cache multi-level, dan fitur perangkat seperti MPEG-4 Encoder Hardware (VGA, 30 fps), sebuah Image Processing Otonom Unit, sebuah Vector Floating Pint (VFP11) co-processor, dan SDMA kontroler berbasis RISC. MCIMX31 mendukng koneksi ke berbagai jenis memori eksternal seperti DDR, NAND Flash, NOR Flash, SDRAM dan SRAM. MCIMX31 dapat dihubungkan ke berbagai perangkat eksternal menggunakan teknologi, seperti kecepatan tinggi USB2.0 OTG, ATA, MMC/SDIO dan compact flash.ARM1136JF-S termasuk dalam 16 KB Instruksi data L1 cache. Menghubungkan ke MCIMX31 1.2 cache terpadu melalui instruksi 64-bit (read-only), 64-bit data baca/tulis (bi-directional) dan data 64-bit menulis interface. Tertanam 16K SRAM yang dapat digunakan untuk data audio streaming untuk menghindari memori eksternal untuk mengakses daya rendah yang biasanya dibutuhkan pada perangkat pemutar audio, untuk keamanan, atau untuk aplikasi lain. Sebuah modul ROM patch menyediakan kemampuan untuk menambal ROM internal. Hal ini juga dapat melakukan boot eksternal dengan menimpa ulang urutan boot dengan melompat ke alamat yang dikonfigurasi.

NTFSNTFS adalah singkatan dari New Technology File System. Beberapa keunggulan NTFS adalah: Realibility, Security dan Access Control, Breaking Size Brriers, Storage Efficency, Long File Names, Networking, Storage Fault Tolerance, Multiple Data Stream, Unicode Names, Improved File Attribute Indexing, Data Compression, Encryption, Reparse Points.

ARM 11Keluarga prosesor ARM 11 dalam produksi saat ini digunakan untuk smartphone, ARM 11 juga banyak digunakan oleh konsumen, perusahaan dan beberapa aplikasi. ARM 11 ini memiliki daya rendah dengan kinerja dari 350 MHz sampai dengan 1 GHz dengan kecepatan dioptimalkan dalam 45 nm dan 65 nm. Software prosesor ARM 11 kompatibel dengan semua generasi sebelumnya dari prosesor ARM, dan memperkenalkan SIMD 32-bit untuk pengolahan media, fisik tag cache untuk meningkatkan kinerja OS konteks switch, TrustZone untuk hardware-peningkatan keamanan, dan tightly coupled memories untuk aplikasi real-time.

Ext2Ext2 adalah singkatan dari Second Extended File System. Dirancang oleh Remy Card sebagai file system yang ekstensibel dan powerful untuk digunakan pada sistem operasi Linux. Ext2 merupakan file system yang paling banyak digunakan oleh para pengguna Linux.

ZFSFile system ZFS adalah file system baru rovlusioner yang secara fundamental mengubah bagaimana mengadministrasi suatu file system. Dengan fitur dan keuntungan yang tidak ditemukan pada file system manapun, ZFS didesain untuk menjadi file system yang scalable, mudah diadministrasi dan bersifat robust.

File SystemFAT singkatan dari File Allocation Table. Digunakan pada awal tahun 80-an dan dikenal sebagai file DOS. Pada awalnya hanya untuk beroperasi pada computer berkapasitas rendah. FAT mengalami bermacam evolusi, dimana versi awalnya hanya menyokong computer berkapasitas tidak lebih dari 32 MB untuk setiap bagian/partisi, kemudian terus berkembang hingga 528 MB dan terus meningkat sampai 2 GB.

IO subsystemSubsistem IO di Linux menyediakan antarmuka yang sederhana dan seragam untuk perangkat onboard. Tiga jenis perangkat yang didukung oleh subsistem IO antara lain:1. Character devices untuk mendukung device sequential2. Block devices untuk mendukung perangkat dapat diakses secara acak. Block devices sangat penting untuk menerapkan sistem file3. Network devices yang mendukung berbagai perangkat lapisan link

Media penghubung phyCORE-i.MX31 Untuk bisa mengakses phyCORE dibutuhkan beberapa media penghubung diantaranya sebagai berikut:a. GNU croos-platform toolchainAplikasi ini digunakan untuk melakukan cross compiling. Karena pada target tidak ada compiler. Sehingga sebuah target membutuhkan host yang mampu mengkompilasi program untuk ditujukan pada target yaitu phyCORE i.MX3.1Sebuah cross-platform toolchain memiliki komponen-komponen seperti dibawah ini: Binutils : seperangkat program yang diperlukan untuk kompilasi/ menghubungkan/ dan debugging operasi lainnya. GNU C compiler : kompilator C dasar yang digunakan untuk menghasilkan kode obyek(baik kernel dan aplikasi). GNU C library : library ini mengimplementasi system calls API seperti membuka, membaca, dan sebagainya, dan fungsi pendukung lainnya. Semua aplikasi yang dikembangkan perlu dihubungkan dengan library dasar ini.

b. MicrocomMenggunakan konsol dengan komunikasi serial. Mikrocom ini digunakan untuk melakukan perintah berupa command yang ada pada phyCORE. Dengan masuk pada microcosm berarti telah masuk pada root dari phyCORE dan system dengan leluasa bisa diberikan instruksi-instruksi pada filesystemnya.

c. FTP for TargetFTP for target adalah browser filesystem yang berfungsi untuk melakukan proses pengiriman ataupun penghapusan data pada target. Aplikasi ini telah disediakan pada saat instalasi phyCORE-i.MX3.1 kit. Untuk bisa mengakses FTP pastikan terlebih dulu bahwa cross wire telah tersambung dengan phyCORE. Seperti halnya Microcom. Untuk menjalankan tinggal klik pada icon FTP for target yang ada pada desktop(default). Sedangkan untuk program terminalnya bisa dijalankan dengan perintah ~ftp root@ip_from_phycore.

d. SSH for TargetKomunikasi SSH dilakukan melalui croos wire. Sama seperti halnya Microcom. SSH digunakan untuk bisa masuk ke root target agar bisa mengkompilasi program-program yang terletak pada phyCORE. Perintahnya adalah ~ssh root@ip_from_phycore.

e. SD cardPada phyCORE proses booting secara default dilakukan oleh media serial. Tapi proses ini juga bisa melalui SD acrd dengan melakukan pengaturan pada environment setting. Selain itu keberadaan SD card juga bisa menjadi alternative untuk menampung library-library OpenCV yang tidak bisa dimuat pada NAND flash yang hanya berkapasitas hingga 64 MByte.

f. Program phyCORE-i.MX31Program pada phyCORE menggunakan bahasa C. Untuk pengolah imagenya menggunakan OpenCV sedangkan interfacenya memakai Qtopia Core.

g. Library OpenCVBerikut adalah library-library yang terletak pada OpenCV: CXCORE : mengandung library-library tentang struktur data, aljabar matriks, transformasi data, object persistence, manajemen memory, penanganan error, dan juga kode loading yang dinamik. CV : mengandung library-library image processing, analisa struktur gambar, gerakan dan penjejakan/tracking, pengenalan pola, dan kalibrasi kamera. Machine Learning (ML) : berisi library-library tentang clustering, klasifikasi data dan fungsi analisa data. HighGUI : mengandung library-library user interface GUI, akses video dan gambar serta media penyimpanan sementara video/ gambar. CVCAM : kamera interface.

h. Qtopia CoreGUI dari Qtopia Core sangat berguna untuk membuat sebuah interface pada LCD phyCORE. Apabila tidak ada GUI maka semua program pada opencv tidak bisa ditampilkan pada LCD phyCORE. Oleh sebab itu untuk menampilkan program yang dibuat pada OpenCV, maka OpenCV tersebut harus bisa berintegrasi dengan Qtopia Core

Soft Real-TimePada percobaan ini, topik atau kasus yang digunakan adalah mengenai aplikasi Sistem Telemetering Kecepatan Angin di Gedung Teknik Komputer Lantai 3 - PENS. Sistem tersebut berbasis Soft Real-Time dikarenakan data yang diterima (data kecepatan angin) tidak akan berpengaruh vital terhadap kinerja sistem tersebut. Sehingga sistem akan terus berjalan walaupun data tidak diterima, namun terdapat informasi yang memberitahukan bahwa data pada saat itu tidak diterima oleh sistem.III. PERCOBAAN 3.1 PeralatanUntuk menunjang percobaan pada kasus ini dibutuhkan beberapa peralatan sebagai berikut :1. Komputer Personal2. Modul ARM 11 Phytec Phycore

3.2 Pembuatan SistemBerikut ini adalah langkah untuk membuat sistem monitoring curah hujan:1. Membuat plant untuk sistem monitoring curah hujan dan menentukan input dan output.2. Membuat program GUI pada phytec :#include "pintuair.h"#include "ui_pintuair.h"

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

#include #include #include #include #include #include

#include #include #include #include

#define PORT 5000

char buffer[100];char *onred = "background-color: rgb(255, 0, 0); color: rgb(255, 255, 255);";char *onblue = "background-color: rgb(0, 0, 255); color: rgb(255, 255, 255);";char *onyellow = "background-color: rgb(255, 255, 0); color: rgb(255, 255, 255);";char *offred = "background-color: rgb(170, 0, 0); color: rgb(255, 255, 255);";char *ongreen = "background-color: rgb(85, 255, 0); color: rgb(255, 255, 255);";char *offyellow = "background-color: rgb(170, 170, 0); color: rgb(255, 255, 255);";

int counter=0, detik=10,flag_timer=0;

struct paket{ int hujan; int motor; int air;};

struct paket dataSensor;

PintuAir::PintuAir(QWidget *parent) : QMainWindow(parent), ui(new Ui::PintuAir){ ui->setupUi(this);

ui->pushButtonStart->setEnabled(false);

timer = new QTimer(this); timer2 = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(receive())); connect(timer,SIGNAL(timeout()),this,SLOT(onTimeout())); connect(timer2,SIGNAL(timeout()),this,SLOT(on2Timeout())); connect(ui->pushButtonStart,SIGNAL(clicked()),this,SLOT(startTimer()));

timer->start(10);

}

PintuAir::~PintuAir(){ delete ui;}

void diep(char *s){ perror(s); exit(1);}

void PintuAir::display(struct paket dataSensor){ this->ui->lcdNumber_air->display(dataSensor.air); this->ui->lcdNumber_hujan->display(dataSensor.hujan); this->ui->lcdNumber_motor->display(dataSensor.motor);}

void PintuAir::on2Timeout(){ ui->lcdNumber_timer->display(--detik); if(detikpushButtonStart->setEnabled(true); ui->pushButtonFail->setStyleSheet(QString(offred)); timer2->stop(); flag_timer=0; } else timer2->start(1000);}

void PintuAir::onTimeout(){ if(dataSensor.hujan>50&&dataSensor.air>70&&dataSensor.motor==0) { if(flag_timer==0) { timer2->start(1000); flag_timer=1; } ui->pushButtonFail->setStyleSheet(QString(onred));

} else if(dataSensor.hujan>50&&dataSensor.air>70&&dataSensor.motorpushButtonFail->setStyleSheet(QString(onyellow)); timer2->stop(); detik=10; ui->lcdNumber_timer->display(detik); }

else if(dataSensor.hujansetStyleSheet(QString(onyellow)); timer2->stop(); detik=10; ui->lcdNumber_timer->display(detik); }

else if(dataSensor.hujan>50&&dataSensor.air>70&&dataSensor.motor>50) { ui->pushButtonFail->setStyleSheet(QString(ongreen)); timer2->stop(); detik=10; ui->lcdNumber_timer->display(detik); }

else{ ui->pushButtonFail->setStyleSheet(QString(ongreen)); timer2->stop(); detik=10; ui->lcdNumber_timer->display(detik); }}

void PintuAir::startTimer(){ ui->pushButtonStart->setEnabled(false); ui->pushButtonFail->setStyleSheet(QString(ongreen)); detik=10; flag_timer=0; ui->lcdNumber_timer->display(detik);}

void PintuAir::receive(){ struct sockaddr_in si_me, si_other; int s, slen=sizeof(si_other), on=1;

if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1) diep("socket");

int broadcastEnable=1; int ret=setsockopt(s, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));

memset((char *) &si_me, 0, sizeof(si_me)); si_me.sin_family = AF_INET; si_me.sin_port = htons(PORT); si_me.sin_addr.s_addr = htonl(INADDR_ANY); if (::bind(s, (struct sockaddr*)&si_me, sizeof(si_me))==-1) diep("bind");

int rv; fd_set readfds; struct timeval tv;

// clear the set ahead of time FD_ZERO(&readfds);

// add our descriptors to the set FD_SET(s, &readfds);

// wait until socket has data ready to be recv()d (timeout 0.05 secs) tv.tv_sec = 0;//2;//3; tv.tv_usec = 10000;//100000;//500000; rv = select(s+1, &readfds, NULL, NULL, &tv);

if (rv == -1) { perror("select\n"); // error occurred in select() ::close(s); } else if (rv == 0) { //printf("Timeout occurred! No data after 0.05 seconds.\n"); ::close(s); } else { if (FD_ISSET(s, &readfds)) { if (recvfrom(s, &dataSensor, sizeof (dataSensor), 0, (struct sockaddr*)&si_other, (socklen_t*)&slen)==-1) diep("recvfrom()");

display(dataSensor); ::close(s); } }}

3. Membuat program GUI pada PC :* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */

package ANGIN;

import jssc.SerialPort;import jssc.SerialPortEvent;import jssc.SerialPortEventListener;import jssc.SerialPortException;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.OutputStream;import java.util.Enumeration;import java.util.HashMap;import javax.swing.Timer;

/** * * @author EROS */public class GUINuklir extends javax.swing.JFrame implements SerialPortEventListener{ static SerialPort serialPort; public GUINuklir() { flag = 0; overheatFlag = 0; coolingfailFlag = 0; turbinfailFlag = 0; counter = 0; countdown = 10; offblue = new Color(0,0,153); offblue = new Color(0,0,153); offblue = new Color(153,153,0); of new Color(255,51,0); offblue = new Color(0,0,153); offblue =new Color(255,255,0); temp=0;//suhu wafo=0;// fuel=0; powe=0; cofo=0; buffer=new char[5][5]; indek=0; tipe=0; completed=0; initComponents(); t=new Timer(500,new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { if(flag == 1) counter++; else if(flag == 0){ counter=0; countdown=10; jTextFieldStatus.setText("System Fine"); } if(counter % 2 == 0){ if(overheatFlag == 1) jTextFieldStatus.setText("SSSSS"+Integer.toString(countdown)); else if(coolingfailFlag == 1) jTextFieldStatus.setText("Cooling Fail! Shutdown dalam "+Integer.toString(countdown)); else if(turbinfailFlag == 1) jTextFieldStatus.setText("Turbin Fail! Shutdown dalam "+Integer.toString(countdown)); countdown--; } if(fuel>0){ if(fuel80){ //Overheat/curah hujan overheatFlag = 1; jPanelOverheat.setBackground(onred); jPanelCool.setBackground(offyellow); jPanelReaktor.setBackground(offyellow); }else if(temp>0&&temp==80) { //Cooling System on overheatFlag = 0; jPanelCool.setBackground(onyellow); jPanelReaktor.setBackground(onyellow); jPanelOverheat.setBackground(offred); }else { //Reaktor System On overheatFlag = 0; coolingfailFlag = 0; jPanelCool.setBackground(offyellow); jPanelOverheat.setBackground(offred); jPanelReaktor.setBackground(onyellow); }

if(wafo>70&&powe==70){ //Turbin Fail On turbinfailFlag = 1; jPanelTurbinFail.setBackground(onred); jPanelReaktor.setBackground(offyellow); }else{ //Turbin Fail Off turbinfailFlag = 0; jPanelTurbinFail.setBackground(offred); }

if(cofo==0&&temp>80){ //Cooling Fail on coolingfailFlag = 1; jPanelCoolFail.setBackground(onblue); jPanelReaktor.setBackground(offyellow); }else{ //Cooling Fail Off coolingfailFlag = 0; jPanelCoolFail.setBackground(offblue); } /* if((overheatFlag | coolingfailFlag | turbinfailFlag) == 1) flag = 1; else flag = 0; if(counter == 20){ jTextFieldStatus.setText("System dimatikan secara keseluruhan"); try{ serialPort.writeString("System dimatikan secara keseluruhan"); serialPort.closePort(); }catch(SerialPortException ex){ System.out.println(ex); }temp=0; wafo=0; powe=0; cofo=0;

jLabelCool.setText("0"); jLabelFlow.setText("0"); jLabelFuel.setText("0"); jLabelPower.setText("0"); jLabelTemp.setText("0"); t.stop(); reset(); }*/ }else { reset(); jPanelLowFuel.setBackground(onblue); } } }); } private void reset(){ jPanelReaktor.setBackground(offyellow); jPanelCool.setBackground(offyellow); jPanelCoolFail.setBackground(offblue); jPanelLowFuel.setBackground(offblue); jPanelOverheat.setBackground(offred); jPanelTurbinFail.setBackground(offred); }

/** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // private void initComponents() {

jPanelReaktor = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jPanelCool = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel(); jPanelOverheat = new javax.swing.JPanel(); jLabel3 = new javax.swing.JLabel(); jPanelCoolFail = new javax.swing.JPanel(); jLabel4 = new javax.swing.JLabel(); jPanelTurbinFail = new javax.swing.JPanel(); jLabel5 = new javax.swing.JLabel(); jPanelLowFuel = new javax.swing.JPanel(); jLabel6 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); jLabel8 = new javax.swing.JLabel(); jLabel9 = new javax.swing.JLabel(); jLabel10 = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); jLabelTemp = new javax.swing.JLabel(); jLabelFlow = new javax.swing.JLabel(); jLabelFuel = new javax.swing.JLabel(); jLabelPower = new javax.swing.JLabel(); jLabelCool = new javax.swing.JLabel(); jLabel17 = new javax.swing.JLabel(); jLabel18 = new javax.swing.JLabel(); jLabel19 = new javax.swing.JLabel(); jLabel20 = new javax.swing.JLabel(); jLabel21 = new javax.swing.JLabel(); jLabel22 = new javax.swing.JLabel(); jTextFieldPort = new javax.swing.JTextField(); jButtonConnect = new javax.swing.JButton(); jTextFieldStatus = new javax.swing.JTextField(); jLabel12 = new javax.swing.JLabel(); jLabel13 = new javax.swing.JLabel(); jLabel14 = new javax.swing.JLabel(); jLabel15 = new javax.swing.JLabel(); jLabel16 = new javax.swing.JLabel(); jLabel23 = new javax.swing.JLabel(); jLabel24 = new javax.swing.JLabel(); jLabel25 = new javax.swing.JLabel(); jLabel26 = new javax.swing.JLabel(); jLabel27 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jPanelReaktor.setBackground(new java.awt.Color(153, 153, 0));

jLabel1.setForeground(new java.awt.Color(255, 255, 255)); jLabel1.setText("WASPADA ");

javax.swing.GroupLayout jPanelReaktorLayout = new javax.swing.GroupLayout(jPanelReaktor); jPanelReaktor.setLayout(jPanelReaktorLayout); jPanelReaktorLayout.setHorizontalGroup( jPanelReaktorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelReaktorLayout.createSequentialGroup() .addContainerGap(28, Short.MAX_VALUE) .addComponent(jLabel1) .addGap(19, 19, 19)) ); jPanelReaktorLayout.setVerticalGroup( jPanelReaktorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelReaktorLayout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) );

jPanelCool.setBackground(new java.awt.Color(153, 153, 0));

jLabel2.setForeground(new java.awt.Color(255, 255, 255)); jLabel2.setText("SIAGA");

javax.swing.GroupLayout jPanelCoolLayout = new javax.swing.GroupLayout(jPanelCool); jPanelCool.setLayout(jPanelCoolLayout); jPanelCoolLayout.setHorizontalGroup( jPanelCoolLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelCoolLayout.createSequentialGroup() .addGap(33, 33, 33) .addComponent(jLabel2) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanelCoolLayout.setVerticalGroup( jPanelCoolLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelCoolLayout.createSequentialGroup() .addContainerGap() .addComponent(jLabel2) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) );

jPanelOverheat.setBackground(new java.awt.Color(153, 0, 0));

jLabel3.setForeground(new java.awt.Color(255, 255, 255)); jLabel3.setText("AWAS");

javax.swing.GroupLayout jPanelOverheatLayout = new javax.swing.GroupLayout(jPanelOverheat); jPanelOverheat.setLayout(jPanelOverheatLayout); jPanelOverheatLayout.setHorizontalGroup( jPanelOverheatLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelOverheatLayout.createSequentialGroup() .addContainerGap(37, Short.MAX_VALUE) .addComponent(jLabel3) .addGap(29, 29, 29)) ); jPanelOverheatLayout.setVerticalGroup( jPanelOverheatLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 33, Short.MAX_VALUE) );

jPanelCoolFail.setBackground(new java.awt.Color(0, 0, 153));

jLabel4.setForeground(new java.awt.Color(255, 255, 255)); jLabel4.setText("AWAS");

javax.swing.GroupLayout jPanelCoolFailLayout = new javax.swing.GroupLayout(jPanelCoolFail); jPanelCoolFail.setLayout(jPanelCoolFailLayout); jPanelCoolFailLayout.setHorizontalGroup( jPanelCoolFailLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelCoolFailLayout.createSequentialGroup() .addContainerGap(37, Short.MAX_VALUE) .addComponent(jLabel4) .addGap(32, 32, 32)) ); jPanelCoolFailLayout.setVerticalGroup( jPanelCoolFailLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE) );

jPanelTurbinFail.setBackground(new java.awt.Color(153, 0, 0));

jLabel5.setForeground(new java.awt.Color(255, 255, 255)); jLabel5.setText("BAHAYA");

javax.swing.GroupLayout jPanelTurbinFailLayout = new javax.swing.GroupLayout(jPanelTurbinFail); jPanelTurbinFail.setLayout(jPanelTurbinFailLayout); jPanelTurbinFailLayout.setHorizontalGroup( jPanelTurbinFailLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelTurbinFailLayout.createSequentialGroup() .addContainerGap(27, Short.MAX_VALUE) .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(19, 19, 19)) ); jPanelTurbinFailLayout.setVerticalGroup( jPanelTurbinFailLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelTurbinFailLayout.createSequentialGroup() .addContainerGap() .addComponent(jLabel5) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) );

jPanelLowFuel.setBackground(new java.awt.Color(0, 0, 153));

jLabel6.setForeground(new java.awt.Color(255, 255, 255)); jLabel6.setText("CERAH");

javax.swing.GroupLayout jPanelLowFuelLayout = new javax.swing.GroupLayout(jPanelLowFuel); jPanelLowFuel.setLayout(jPanelLowFuelLayout); jPanelLowFuelLayout.setHorizontalGroup( jPanelLowFuelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelLowFuelLayout.createSequentialGroup() .addContainerGap(34, Short.MAX_VALUE) .addComponent(jLabel6) .addGap(31, 31, 31)) ); jPanelLowFuelLayout.setVerticalGroup( jPanelLowFuelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelLowFuelLayout.createSequentialGroup() .addContainerGap() .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) );

jLabel7.setText("SUHU :");

jLabel8.setText("Kecepatan :");

jLabel9.setText("Tekanan :");

jLabel10.setText("Tinggi tempat :");

jLabel11.setText("Presipitasi :");

jLabelTemp.setText("0");

jLabelFlow.setText("0");

jLabelFuel.setText("0");

jLabelPower.setText("0");

jLabelCool.setText("0");

jLabel17.setText("C");

jLabel18.setText("km/Hour");

jLabel22.setText("PORT :");

jTextFieldPort.setText("COM4"); jTextFieldPort.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jTextFieldPortActionPerformed(evt); } });

jButtonConnect.setText("Sambungkan"); jButtonConnect.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonConnectActionPerformed(evt); } });

jTextFieldStatus.setEditable(false); jTextFieldStatus.setHorizontalAlignment(javax.swing.JTextField.CENTER); jTextFieldStatus.setText("System Fine"); jTextFieldStatus.setEnabled(false);

jLabel12.setText("mm");

jLabel13.setText("m");

jLabel14.setText("Pa");

jLabel15.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jLabel15.setText("SISTEM TELEMETERING ANGIN ");

jLabel16.setFont(new java.awt.Font("Times New Roman", 1, 11)); // NOI18N jLabel16.setText("ANGIN KENCANG"); jLabel16.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

jLabel23.setFont(new java.awt.Font("Times New Roman", 1, 11)); // NOI18N jLabel23.setText("PUTING BELIUNG"); jLabel23.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

jLabel24.setFont(new java.awt.Font("Times New Roman", 1, 11)); // NOI18N jLabel24.setText("ANGIN TOPAN"); jLabel24.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

jLabel25.setFont(new java.awt.Font("Times New Roman", 1, 11)); // NOI18N jLabel25.setText("ANGIN RIBUT"); jLabel25.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

jLabel26.setFont(new java.awt.Font("Times New Roman", 1, 11)); // NOI18N jLabel26.setText("ANGIN FOHN"); jLabel26.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

jLabel27.setFont(new java.awt.Font("Times New Roman", 1, 11)); // NOI18N jLabel27.setText("NORMAL"); jLabel27.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

jTextArea1.setColumns(20); jTextArea1.setRows(5); jTextArea1.setText("Cerah :\nAngin normal.\n\nAngin Kencang :\nPeringatan waspada\nkarena berakibat\npohon-pohon terancam\nroboh.\n\nAngin Ribut :\nPeringatan waspada \ncenderung mendekati\nputing beliung\n\nAngin beliung :\nMenyebabkan kerusakan\nrumah-rumah, pohon tumbang dll.\n\nAngin Fohn :\nMenyebabkan kerusakan\nbahkan korban jiwa.\nterjadi sekitar lokasi tinggi\nseperti pegunungan.\n\nAngin Topan :\nMenyebabkan kerusakan\nbesar dan korban jiwa."); jScrollPane1.setViewportView(jTextArea1);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel21) .addComponent(jLabel20) .addGroup(layout.createSequentialGroup() .addGap(17, 17, 17) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel15) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jLabel22, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jTextFieldPort, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(2, 2, 2) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelFlow, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabelTemp, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel18, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel17, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabelFuel, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addGap(6, 6, 6) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelPower, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(layout.createSequentialGroup() .addComponent(jLabelCool, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)))))) .addGroup(layout.createSequentialGroup() .addComponent(jLabel10) .addGap(86, 86, 86) .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanelOverheat, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jPanelTurbinFail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel23)) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(35, 35, 35) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanelLowFuel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(jLabel26)))) .addGroup(layout.createSequentialGroup() .addGap(30, 30, 30) .addComponent(jPanelCoolFail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(jLabel24) .addGap(61, 61, 61) .addComponent(jLabel27)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(jLabel16, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanelReaktor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(34, 34, 34) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanelCool, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(jLabel25) .addGap(0, 0, Short.MAX_VALUE))))) .addComponent(jLabel19)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jButtonConnect, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jTextFieldStatus) .addComponent(jScrollPane1)))))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(20, 20, 20) .addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel22) .addComponent(jTextFieldPort, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jButtonConnect)) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(26, 26, 26) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(2, 2, 2) .addComponent(jLabel17) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel8) .addComponent(jLabelFlow) .addComponent(jLabel18)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel9) .addComponent(jLabelFuel) .addComponent(jLabel14)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel11) .addComponent(jLabelCool) .addComponent(jLabel12))) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel7) .addComponent(jLabelTemp))) .addGap(11, 11, 11) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel10) .addComponent(jLabelPower) .addComponent(jLabel13))) .addGroup(layout.createSequentialGroup() .addGap(74, 74, 74) .addComponent(jLabel19) .addGap(50, 50, 50) .addComponent(jLabel20))) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jPanelReaktor, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addComponent(jPanelCool, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel25) .addComponent(jLabel16)) .addGap(12, 12, 12) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jPanelCoolFail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(98, 98, 98)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(1, 1, 1) .addComponent(jPanelOverheat, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel23) .addComponent(jLabel26)) .addGap(16, 16, 16) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanelTurbinFail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jPanelLowFuel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel24) .addComponent(jLabel27))))) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 349, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(18, 18, 18) .addComponent(jTextFieldStatus, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(20, 20, 20) .addComponent(jLabel21) .addContainerGap(28, Short.MAX_VALUE)) );

pack(); }//

private void jButtonConnectActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: serialPort = new SerialPort(jTextFieldPort.getText()); try { serialPort.openPort();//Open port serialPort.setParams(9600, 8, 1, 0);//Set params int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR;//Prepare mask serialPort.setEventsMask(mask);//Set mask serialPort.addEventListener(this); jButtonConnect.setEnabled(false); t.start(); } catch (SerialPortException ex) { System.out.println(ex); t.stop(); } }

private void jTextFieldPortActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: }

/** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ // /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(GUINuklir.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(GUINuklir.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(GUINuklir.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(GUINuklir.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //

/* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new GUINuklir().setVisible(true); } }); }

char flag, overheatFlag, coolingfailFlag, turbinfailFlag, counter; int countdown; Timer t; int indek,tipe,completed; char buffer[][]; int temp,wafo,powe,cofo,fuel; Color offred,offblue,offyellow,onred,onblue,onyellow; //Variabel -variabel private static final int TIME_OUT = 2000; Enumeration ports; HashMap portMap=new HashMap(); //private CommPortIdentifier openedPort = null; private BufferedReader input; private OutputStream output; private boolean connected =false; // Variables declaration - do not modify private javax.swing.JButton jButtonConnect; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel14; private javax.swing.JLabel jLabel15; private javax.swing.JLabel jLabel16; private javax.swing.JLabel jLabel17; private javax.swing.JLabel jLabel18; private javax.swing.JLabel jLabel19; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel20; private javax.swing.JLabel jLabel21; private javax.swing.JLabel jLabel22; private javax.swing.JLabel jLabel23; private javax.swing.JLabel jLabel24; private javax.swing.JLabel jLabel25; private javax.swing.JLabel jLabel26; private javax.swing.JLabel jLabel27; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JLabel jLabelCool; private javax.swing.JLabel jLabelFlow; private javax.swing.JLabel jLabelFuel; private javax.swing.JLabel jLabelPower; private javax.swing.JLabel jLabelTemp; private javax.swing.JPanel jPanelCool; private javax.swing.JPanel jPanelCoolFail; private javax.swing.JPanel jPanelLowFuel; private javax.swing.JPanel jPanelOverheat; private javax.swing.JPanel jPanelReaktor; private javax.swing.JPanel jPanelTurbinFail; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextArea jTextArea1; private javax.swing.JTextField jTextFieldPort; private javax.swing.JTextField jTextFieldStatus; // End of variables declaration

@Override public void serialEvent(SerialPortEvent event) { if(event.isRXCHAR()){//If data is available try{ //String buffer=serialPort.readString(); String buffer = serialPort.readString(4); System.out.println("buffer : "+buffer); if(buffer!=null){ if(buffer.contains("t"))temp=Integer.parseInt(buffer.substring(1)); else if(buffer.contains("w"))wafo=Integer.parseInt(buffer.substring(1)); else if(buffer.contains("f"))fuel=Integer.parseInt(buffer.substring(1)); else if(buffer.contains("p"))powe=Integer.parseInt(buffer.substring(1)); else if(buffer.contains("c"))cofo=Integer.parseInt(buffer.substring(1));

jLabelTemp.setText(""+temp); jLabelFlow.setText(""+wafo); jLabelFuel.setText(""+fuel); jLabelPower.setText(""+powe); jLabelCool.setText(""+cofo);

} } catch (SerialPortException ex) { System.out.println(ex); } } }}

3.3 Hasil Percobaan dan Analisa

3.4 KesimpulanBerdasarkan hasil percobaan dan analisa, yang telah didapatkan dalam pembuatan project ini dapat dimabil kesimpulan yaitu dalam Sistem monitoring angin dapat dibuat dan diimplementasikan pada Modul Phycore ARM11. Untuk menjalankannya dibutuhkan sambungan komunikasi serial dan LAN untuk mengirimkan data ke PC. Sistem ini bertujuan untuk memonitoring adanya kerja angin sesuai dengan parameter.

LAMPIRAN PROGRESS PENGERJAAN PROJECT: Progres 10 Juni (Akses Phytec Pycore)Instalasi minicom dapat dilakukan dengan menggunakan perintah sudo apt-get install minicom.

Konfigurasi dilakukan dengan perintah minicom -s. Maka untuk melakukan pengaturan port serial dipilih menu serial port setup.

Selanjutnya tidak perlu dilakukan konfigurasi kembali. Untuk menggunakan komunikasi serial , maka hanya dengan memberikan perintah minicom kemudian login dengan username : root dan password : (kosong). . Untuk koneksi antara komputer dengan phytec phycore menggunakan perintah ssh root@IP_Phytec Phycore . untuk mengetahui IP Phytec Phycore maka harus login ke minicom. (kabel LAN harus tersambung antara PC dengan Phytec Phycore).

Kemudian melakukan uji koneksi antara PC dengan modul Phytec Phycore dengan perintah ping.

Setelah dua koneksi ini sudah bisa digunakan maka dapat dilakukan pemrograman dengan menggunakan phytec phycore.

Mengakses LCD pada Phytec PhycorePertama dijalankan minicom untuk bisa mengakses Phytec Phycore menggunakan serial.

Setelah berhasil menjalankan minicom langkah selanjutnya yaitu login menggunakan username root.

Kemudian menjalankan program fbtest dan fbsaver dimana program tersebut tersimpan dalam direktori /usr/local/Framebuffer-Demos. Untuk melakukan test terhadap framebuffer sudah disediakan fungsi fbtest dan fbsaver pada Phytec Phycore. Untuk mengetahui program yang terdapat dalam fungsi tersebut dapat diambil pada web resmi dari Phycore.

Berikut merupakan langkah-langkah untuk menjalankan fbtes

Dan berikut adalah output dari LCD phytec phycore

Masih dalam direktori Framebuffer-Demos, dijalankan lagi program fbsaver untuk menampilkan yang lain.

Berikut adalah output dari LCD Phytec phycore :

Instalasi QtopiacoreUntuk bisa menggunakan LCD phytec phycore secara touchscreen disini tim menggunakan QtopiaCore. Berikut adalah instalasi Qtopia:

Akses LCD secara touchscreen belum berhasil karena saat ini belum dapat mengkonfigurasi file .conf dari library tslib.

LAMPIRAN SOURCE CODE:fbsaver.c/* * Framebuffer demonstration program. * Based on http://doc.trolltech.com/3.3/emb-framebuffer-howto.html * */ #include #include #include #include #include // Convert 16-bit RGB to int: #define rgb16(r, g, b) ((r)