Tuesday, November 29, 2022

Program Sensor Suhu LM35 Menggunakan Arduino

 

 

Berikut adalah proyek sensor suhu :

1. Persiapan yang diperlukan

  • 1x Arduino 
  • 1x Breadboard  
  • 1x LM35 Sensor Suhu
  • 2x LED hijau 
  • 2x LED kuning 
  • 2x LED merah 
  • 6x Resistor 220ohm 
  • 11x Kabel Jumper 


2. Rancangan 


Penjelasan :

  • Pasang dari GND dan 5V Arduino ke Breadboard.
  • Pasang kaki kiri LM35 ke 5V, kaki kanan LM35 ke GND, kaki tengah LM35 ke pin A0 Arduino.
  • Pasang kaki Positif LED hijau ke pin 2 dan pin 3, LED kuning ke pin 4 dan pin 5, LED merah ke pin 6 dan pin 7 Arduino.
  • Setiap kaki negatif LED dipasang ke GND menggunakan Resistor 220ohm.


3.  pemograman Sensor Suhu LM35, gunakan sketch :

byte lm35= A0;

int nilai;

void setup(){

  Serial.begin(9600);

}

void loop(){

  nilai= analogRead(lm35);

  nilai= nilai*0.488;

  Serial.println(nilai);

  delay(500);

}

Penjelasan:

  • Serial.begin(9600); kode yang digunakan agar Arduino bisa berkomunikasi dengan komputer.
  • nilaiLM35 = analogRead(LM35); menyimpan nilai yang dihasilkan oleh sensor LM35 ke variabel nilaiLM35.
  • nilaiLM35 = nilaiLM35 * 0.488; konversi nilaiLM35 ke celsius dengan dikalikan 0.4888.
  • Serial.println(nilaiLM35); menampilkan hasil dari nilai LM35.


4. Membuat Indikator Suhu dengan menggunakan LED.

Lihat nilai pada sensor suhu LM35, dengan melihat di Serial Monitor. bisa membuka Serial Monitor dengan menekan CTRL+SHIFT+M pada keyboard.  


Catatan : 

Angka 27 adalah nilai Suhu. Jika menyentuh Sensor LM35 dan nilai akan bertambah, karena sensor menerima panas dari suhu tubuh.


5. Tambahkan Code :

int LM35 = A0; // membuat variabel LM35 untuk pin A0 Arduino

int nilaiLM35= 0;   // membuat variabel nilaiLM35 untuk menyimpan nilai sensor

int LED1= 2;         // membuat variabel LED1 untuk Pin 2 digital

int LED2= 3;       // membuat variabel LED2 untuk Pin 3 digital

int LED3= 4;       // membuat variabel LED3 untuk Pin 4 digital

void setup(){

Serial.begin(9600);     // komunikasi serial dari Arduino ke Komputer

pinMode(LED1, OUTPUT);   // mengatur LED1 menjadi OUTPUT

pinMode(LED2, OUTPUT);   // mengatur LED2 menjadi OUTPUT

pinMode(LED3, OUTPUT);   // mengatur LED3 menjadi OUTPUT

}

void loop(){

nilaiLM35 = analogRead(LM35);   // menyimpan nilai dari LM35 ke variabel nilaiLM35

nilaiLM35 = nilaiLM35 * 0.488;   // konversi nilai dari LM35 menjadi Derajat Celcius

Serial.println(nilaiLM35);     // menampilkan nilai dari LM35 ke Serial Monitor

delay(500);                     // memberi jeda sebanyak 500 milidetik

if (nilaiLM35 == 28)       // jika nilaiLM35 sama dengan 28

{

  digitalWrite(LED1, HIGH); // LED1 menyala

  digitalWrite(LED2, LOW);   // LED2 mati

  digitalWrite(LED3, LOW);   // LED3 mati

}

else if (nilaiLM35 == 29)   // jika nilaiLM35 sama dengan 29

{

  digitalWrite(LED1, HIGH); // LED1 menyala

  digitalWrite(LED2, HIGH); // LED2 menyala

  digitalWrite(LED3, LOW);   // LED3 menyala

}

else if (nilaiLM35 == 30)   // jika nilaiLM35 sama dengan 30

{

  digitalWrite(LED1, HIGH); // LED1 menyala

  digitalWrite(LED2, HIGH); // LED2 menyala

  digitalWrite(LED3, HIGH); // LED3 menyala

}

else                       // jika tidak

{

  digitalWrite(LED1, LOW);   // LED1 mati

  digitalWrite(LED2, LOW);   // LED2 mati

  digitalWrite(LED3, LOW);   // LED3 mati

}

}


Penjelasan :

  • Nilai yang dipakai pada LM35, disesuaikan dengan nilai suhu dilingkungan. Karena suhu disuatu tempat dengan tempat lain bisa saja berbeda 
  • if (nilaiLM35 == 28) kode ini digunakan untuk perintah logika, “jika nilaiLM35 sama dengan 28.” arduino akan menjalankan kode perintah yang ada pada program if ini.
  • else if (nilaiLM35 == 29) tapi jika nilainya ternyata sama dengan 29, maka arduino akan menjalankan kode perintah pada else if.
  • Else tapi jika tidak ada yang sama dengan nilai pada nilai if dan else if, maka arduino akan menjalakan kode perintah pada else.


Baca juga artikel yang berkaitan :


Arduino ESP8266 menggunakan MySQL Pada XAMPP/web hosting - I

 


Arduino + ESP8266 

1. Rangkaian yang digunakan


Diagram :




2. Code

#include "WiFiEsp.h"

 

char ssid[] = "ArduinoMySQL";        // Isi dengan nama profil Wifi

char pass[] = "12345678";            // password wifi

//char server[] = "192.168.123.1";     // alamat access point yang telah terinstall XAMPP local host

char server[] = "semesin.com";     // alamat web hosting

 

char namaVariabel[] = "Variabel";

String text = "";

String Respon = "";

bool responDariServer = false;

 

bool statusKomunikasiWifi = false;

long waktuMulai;

long waktuMintaData = 5000; //minta data setiap 5000ms

 

WiFiEspClient client;

int status = WL_IDLE_STATUS;

 

void setup()

{

  Serial.begin(9600);

  Serial.println("Koneksi arduino dengan mySql menggunakan ESp8266 dan XAMPP");

  Serial.println("Ketik pesan yang akan dikirim (pastikan setting serial ke \"both NL & CR\")");

  Serial.println("http://www.semesin.com/project");

  Serial.println();

 

  Serial1.begin(115200);

  WiFi.init(&Serial1);

 

  // check for the presence of the shield

  if (WiFi.status() == WL_NO_SHIELD) {

    Serial.println("WiFi shield not present");

    // don't continue

    while (true);

  }

 

  // attempt to connect to WiFi network

  while ( status != WL_CONNECTED) {

    Serial.print("Attempting to connect to WPA SSID: ");

    Serial.println(ssid);

    // Connect to WPA/WPA2 network

    status = WiFi.begin(ssid, pass);

  }

 

  // you're connected now, so print out the data

  Serial.println("You're connected to the network");

   

  printWifiStatus();

  waktuMulai = millis();

}

 

void loop()

{

  //tunggu imputan nilai dari untuk dikirim ke server

  while(Serial.available())

  {

    char c = Serial.read();

    if((c != '\r') && (c != '\n'))

    {

      text += c;

    }

    if(c == '\n')

    {

      statusKomunikasiWifi = kirimKeDatabase("dataDariSerial",text);

      text = "";

      waktuMulai = millis();

    }

  }

 

  if(waktuMintaData < millis() - waktuMulai)

  {

    statusKomunikasiWifi = ambilDatabase("perintah");

    waktuMulai = millis();

  }

   

  // periksa respon dari server

  if(statusKomunikasiWifi)

  {

    // if there are incoming bytes available

    // from the server, read them and print them

    while (client.available()) 

    {

      char c = client.read();

      Respon += c;

    }

   

    // if the server's disconnected, stop the client

    if (!client.connected()) {

      Serial.println("Disconnecting from server...");

      client.stop();

      statusKomunikasiWifi = false;

      responDariServer = true;

    }

  }

  // penanganan data yang diretima dari server

  if(responDariServer)

  {

    responDariServer = false;

    //Serial.println(Respon);

    int posisiData = Respon.indexOf("\r\n\r\n");

    String Data = Respon.substring(posisiData+4);

    Data.trim();

 

    String variabel;

    String nilai;

 

    Serial.println("Data dari server");

    posisiData = Data.indexOf('=');

    if(posisiData > 0)

    {

      variabel = Data.substring(0,posisiData);

      nilai = Data.substring(posisiData+1);

   

      //===========Penanganan respon disini

      Serial.print(variabel);

      Serial.print(" = ");

      Serial.println(nilai);

    }

    Respon = "";

  }

}

bool ambilDatabase(String variabel)

{

  Serial.println();

  Serial.println("Starting connection to server...");

  // if you get a connection, report back via serial

  if (client.connect(server, 80)) {

    Serial.println("Connected to server");

    // Make a HTTP request

    client.print("GET /arduino_mysql/keArduino.php?variabel=");

    client.print(variabel);

    client.println(" HTTP/1.1");

    client.print("Host: ");

    client.println(server);

    client.println("Connection: close");

    client.println();

 

    long _startMillis = millis();

    while (!client.available() and (millis() - _startMillis < 2000));

 

    return true;

  }

  return false;

}

 

bool kirimKeDatabase(String namaVariabel, String nilai)

{

  Serial.println();

  Serial.println("Starting connection to server...");

  // if you get a connection, report back via serial

  if (client.connect(server, 80)) {

    Serial.println("Connected to server");

    // Make a HTTP request

 

    // parameter 1

    client.print("GET /arduino_mysql/dariArduino.php?");

    client.print("variabel=");

    client.print(namaVariabel);

     

    // parameter 2 dan selanjutnya

    client.print("&");

    client.print("nilai=");

    client.print(nilai);

     

    client.println(" HTTP/1.1");

    client.print("Host: ");

    client.println(server);

    client.println("Connection: close");

    client.println();

 

    return true;

  }

  return false;

}

void printWifiStatus()

{

  // print the SSID of the network you're attached to

  Serial.print("SSID: ");

  Serial.println(WiFi.SSID());

 

  // print your WiFi shield's IP address

  IPAddress ip = WiFi.localIP();

  Serial.print("IP Address: ");

  Serial.println(ip);

 

  // print the received signal strength

  long rssi = WiFi.RSSI();

  Serial.print("Signal strength (RSSI):");

  Serial.print(rssi);

  Serial.println(" dBm");

 

  IPAddress gateway = WiFi.gatewayIP();

  Serial.print("gateway:");

  Serial.print(gateway);

  Serial.println(" ");

}






Contoh Program Serial Java & Arduino Dengan RXTX

 


1. Arduino 

1.1. Rancangan



1.2. Code 

int potPin = A0;

int potValue;

void setup() {

  // put your setup code here, to run once:

  Serial.begin(9600);

}

void loop() {

  // put your main code here, to run repeatedly:

  potValue = analogRead(potPin);

  Serial.print(potValue);

  Serial.print(",");

  delay(15);

}


2. Java

2.1. Konfigurasi RXTX

2.1.1. Download library RXTX dari websitenya : link download

2.1.2. Extract file zip yang telah didownload

2.1.3. Copy file rxtxSerial.dll dan rxtxParallel.dll ke folder C:\Program Files\java\jre7\bin

2.1.4. Copy file RXTXcomm.jar ke direktori C:\Program Files\java\jre7\lib\ext


2.2. Code 

package com.sad301.exc;


import gnu.io.CommPort;

import gnu.io.CommPortIdentifier;

import gnu.io.SerialPort;

import gnu.io.SerialPortEvent;

import gnu.io.SerialPortEventListener;


import java.awt.event.ItemEvent;

import java.awt.event.ItemListener;

import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.Enumeration;

import java.util.List;


import javax.swing.ComboBoxModel;

import javax.swing.GroupLayout;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JToggleButton;

import javax.swing.SwingUtilities;

import javax.swing.UIManager;

import javax.swing.event.ListDataListener;

import javax.swing.text.DefaultCaret;


public class SerialExc extends JFrame implements SerialPortEventListener {


/**

 * 

 */

private boolean isOpened;

private byte[] buffer = new byte[1024];

private static final long serialVersionUID = 1L;

private InputStream in;

private JComboBox<String> cbCommPortId;

private JTextArea taData;

private JToggleButton bConnect;

private SerialPort serialPort;


public static void main(String[] args) throws Exception {

String laf = UIManager.getSystemLookAndFeelClassName();

UIManager.setLookAndFeel(laf);

SerialExc sx = new SerialExc();

sx.setVisible(true);

}


public SerialExc() {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

createGUI();

}

});

}


@SuppressWarnings("unchecked")

private void createGUI() {

Enumeration<CommPortIdentifier> portEnum = CommPortIdentifier.getPortIdentifiers();

CBModelCommPortId model = new CBModelCommPortId(portEnum);


JLabel lPort = new JLabel("Pilih Port :");

cbCommPortId = new JComboBox<String>(model);

cbCommPortId.setSelectedIndex(0);

bConnect = new JToggleButton("Connect");

bConnect.addItemListener(new ItemListener() {

@Override

public void itemStateChanged(ItemEvent arg0) {

int stateChange = arg0.getStateChange();

switch(stateChange) {

case ItemEvent.SELECTED :

startConnection();

break;

case ItemEvent.DESELECTED :

stopConnection();

break;

}

}

});


taData = new JTextArea();

DefaultCaret caret = (DefaultCaret)taData.getCaret();

caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

JScrollPane spData = new JScrollPane(taData);


GroupLayout l = new GroupLayout(getContentPane());

l.setAutoCreateGaps(true);

l.setAutoCreateContainerGaps(true);

l.setHorizontalGroup(l.createSequentialGroup()

.addGroup(l.createParallelGroup()

.addGroup(l.createSequentialGroup()

.addComponent(lPort)

.addComponent(cbCommPortId)

.addComponent(bConnect)

)

.addComponent(spData)

)

);

l.setVerticalGroup(l.createSequentialGroup()

.addGroup(l.createParallelGroup(GroupLayout.Alignment.BASELINE)

.addComponent(lPort)

.addComponent(cbCommPortId)

.addComponent(bConnect)

)

.addComponent(spData)

);


setTitle("SerialExc");

setSize(200, 200);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLocationRelativeTo(null);

getContentPane().setLayout(l);

}


private void startConnection() {

try {

String portId = (String)cbCommPortId.getSelectedItem();

CommPortIdentifier commPortId = CommPortIdentifier.getPortIdentifier(portId);

CommPort commPort = commPortId.open(getClass().getName(), 2000);

if(commPort instanceof SerialPort) {

serialPort = (SerialPort)commPort;

serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

isOpened = true;

in = serialPort.getInputStream();

serialPort.addEventListener(this);

serialPort.notifyOnDataAvailable(true);

}

}

catch(Exception exc) {

taData.append(exc.toString()+"\n");

bConnect.setSelected(false);

}

}


private void stopConnection() {

if(isOpened) {

serialPort.close();

serialPort.removeEventListener();

}

}


@Override

public void serialEvent(SerialPortEvent arg0) {

// TODO Auto-generated method stub

int data;

try {

int len = 0;

while((data=in.read()) > -1) {

if(data==',') {

break;

}

buffer[len++] = (byte)data;

}

taData.append(new String(buffer, 0, len) + "\n");

}

catch(IOException exc) {

taData.append(exc.toString() + "\n");

}

}

}


class CBModelCommPortId implements ComboBoxModel<String> {

private String selectedItem;

private List<String> items;

public CBModelCommPortId(Enumeration<CommPortIdentifier> arg0) {

this.items = getCommPortIdNames(arg0);

}

@Override

public void addListDataListener(ListDataListener l) {

// TODO Auto-generated method stub


}

@Override

public String getElementAt(int index) {

// TODO Auto-generated method stub

return items.get(index);

}

@Override

public int getSize() {

// TODO Auto-generated method stub

return items.size();

}

@Override

public void removeListDataListener(ListDataListener l) {

// TODO Auto-generated method stub

}

@Override

public Object getSelectedItem() {

// TODO Auto-generated method stub

return (String)this.selectedItem;

}

@Override

public void setSelectedItem(Object arg0) {

// TODO Auto-generated method stub

this.selectedItem = (String)arg0;

}

private List<String> getCommPortIdNames(Enumeration<CommPortIdentifier> arg0) {

List<String> temp = new ArrayList<>();

while(arg0.hasMoreElements()) {

CommPortIdentifier commPortId = arg0.nextElement();

if(commPortId.getPortType()==CommPortIdentifier.PORT_SERIAL) {

temp.add(commPortId.getName());

}

}

return temp;

}

}


Baca juga artikel yang berkaitan :


Monday, November 28, 2022

Menyimpan Tanda Tangan Pada Microsoft Word

 


Sebelumnya baca dulu : Membuat Tanda Tangan Pada Microsoft Word

Microsoft Word ternyata memiliki fitur lain yang dapat digunakan untuk menyimpan tanda tangan selain memasukkan tanda tangan,  Dengan begitu, akan lebih mudah memasukkan tanda tangan untuk menandatangani dokumen-dokumen penting lain secara digital. 

1. Klik gambar tanda tangan yang sudah dimasukkan sebelumnya

Klik gambar tanda tangan yang sudah dimasukkan sebelumnya.


2. Pilih Insert dan Quick Parts

Setelah itu, pilih Insert dan Quick Parts. Sebagai informasi, fitur Quick Parts dalam Microsoft Word 2007 dapat membantu untuk menyisipkan objek-objek yang sering digunakan dengan cepat dan efisien.


3. Klik Save Selection to Quick Part Gallery

Dalam fitur Quick Parts, akan ditemukan opsi Save Selection to Quick Part Gallery. Langkah ini akan mengarahkan untuk membuka kotak dialog Create New Building Block.


4. Isi nama file pada kolom Create New Building Block

Jika kotak dialog Create New Building sudah berhasil dibuka, ubah nama file tersebut untuk blok tanda tangan.


5. Ubah kolom Gallery dengan AutoText

Setelah mengubah nama untuk blok tanda tangan, ubah juga kolom gallery dengan AutoText atau Teks Otomatis. Lalu klik Ok, dengan begitu tanda tangan berhasil tersimpan di Microsoft Word. Apabila ingin menggunakan, klik Insert --> Quick Parts --> AutoText.

Baca juga artikel berkaitan :


Componen, Fungsi & Event Framework zkoss - II [ Button - Date & Time - Radio & Checkbox ]

 


Berikut adalah contoh componen pada zkoss 

1. Button

<vbox>

<button label="Left" image="/img/Centigrade-Widget-Icons/ArrowLeft-16x16.png" hoverImage="/img//ArrowLeftGreen-16x16.png" width="125px" />

<button label="Right" image="/img/Centigrade-Widget-Icons/ArrowRight-16x16.png" hoverImage="/img//ArrowRightGreen-16x16.png" dir="reverse" width="125px" />

<button label="Above" image="/img/ArrowUp-16x16.png" hoverImage="/img/ArrowUpGreen-16x16.png" orient="vertical" width="125px" />

<button label="Below" image="/img/ArrowDown-16x16.png" hoverImage="/img/ArrowDownGreen-16x16.png" orient="vertical" dir="reverse" width="125px" />

</vbox>


2. Date & Time

<zk>
Calendar:<calendar/>
<separator/>
Timebox: <timebox id="tb" cols="14" format="a hh:mm:ss" onCreate="self.value = new Date()"/>
<separator/>
Datebox: <datebox id="db" cols="20" format="yyyy/MM/dd a hh:mm:ss"  onCreate="self.value = new Date()"/>
<separator/>
</zk>




3. Checkbox & RadioBox

<vbox width="100%" align="stretch">
ZK Online Survey
<radiogroup onCheck="choice.value = self.selectedItem.label">
<grid xmlns:ca="client/attribute" ca:data-scrollable="false">
<rows>
<row spans="5">
Which one area would you like ZK to improve upon?</row>
<row>
<radio label="IDE Support" />
<radio label="Bug Fixing" />
<radio label="Performance" />
<radio label="Backward Compatibility" />
<radio label="Offline Functionality" />
</row>
<row>
<radio label="Forum" />
<radio label="Smalltalk" />
<radio label="How-to Wiki" />
<radio label="Offical Web Site" />
<radio label="On-line Training" />
</row>
<row>
<radio label="ZK Demo" />
<radio label="Style Guide" />
<radio label="Developer Guide" />
<radio label="Developer Reference" />
<radio label="Component Developer's Guide" />
</row>
</rows>
</grid>
</radiogroup>
<hbox>
You have selected :
<label id="choice" />
</hbox>
<separator bar="true" />
Which layout component you like in ZK ?
<hbox>
<checkbox id="l1" label="Border" onCheck="doChecked()" />
<checkbox id="l2" label="Box" onCheck="doChecked()" />
<checkbox id="l3" label="Table" onCheck="doChecked()" />
<checkbox id="l4" label="Portal" onCheck="doChecked()" />
<checkbox id="l5" label="Column" onCheck="doChecked()" />
</hbox>
<hbox>
You have selected :
<label id="layout" />
</hbox>
<zscript>
void doChecked() {
layout.value = (l1.isChecked() ? l1.label+' ' : &quot;&quot;) 
+ (l2.isChecked() ? l2.label+' ' : &quot;&quot;)
+ (l3.isChecked() ? l3.label+' ' : &quot;&quot;) 
+ (l4.isChecked() ? l4.label+' ' : &quot;&quot;)  
+ (l5.isChecked() ? l5.label+' ' : &quot;&quot;);
}
</zscript>
</vbox>


Baca juga artikel yang berkaitan :


Reference : https://www.zkoss.org/zksandbox/#g2

Componen, Fungsi & Event Framework zkoss - X [ Menu & Toolbar ]

 


Berikut adalah contoh componen pada zkoss 

1. Menu

<zk>

<menubar id="menubar" hflex="min">

<custom-attributes org.zkoss.zul.image.preload="true" />

<menu label="Project" image="/img/Centigrade-Widget-Icons/Briefcase-16x16.png">

<menupopup>

<menuitem image="/img/Centigrade-Widget-Icons/BriefcaseSpark-16x16.png" label="New"

onClick="alert(self.label)" />

<menuitem image="/img/Centigrade-Widget-Icons/BriefcaseOpen-16x16.png" label="Open"

onClick="alert(self.label)" />

<menuitem image="/img/Centigrade-Widget-Icons/DisketteBlack-16x16.png" label="Save"

onClick="alert(self.label)" />

<menuseparator />

<menuitem label="Exit" image="/img/Centigrade-Widget-Icons/DoorOpen-16x16.png" onClick="alert(self.label)" />

</menupopup>

</menu>

<menu label="Help" image="/img/Centigrade-Widget-Icons/QuestionmarkButton-16x16.png">

<menupopup>

<menuitem label="Index" onClick="alert(self.label)" />

<menu label="About">

<menupopup>

<menuitem label="About ZK"

onClick="alert(self.label)" />

<menuitem label="About Potix"

onClick="alert(self.label)" />

</menupopup>

</menu>

</menupopup>

</menu>

<menu image="/img/Centigrade-Widget-Icons/Spyglass-16x16.png">

<menupopup>

<menuitem label="Index" onClick="alert(self.label)" />

<menu label="Color Picker" content="#color=#184dc6"/>

</menupopup>

</menu>

</menubar>

<checkbox label="Vertical orient">

<attribute name="onCheck">

menubar.orient= self.checked ? "vertical" : "horizontal";

</attribute>

</checkbox>

<checkbox label="Autodrop" if="true">

<attribute name="onCheck">

menubar.autodrop = self.checked;

</attribute>

</checkbox>

</zk>


2. Toolbar and Toolbarbutton

<zk>

<style dynamic="true">

.z-toolbar a, .z-toolbar a:visited, .z-toolbar a:hover{

background-color:transparent;

border:0 none;

}

.vista {

filter: -;

background:#000000 url(/zksandbox/img/bar.png) repeat-x 0 0;

color:white;

padding-top:7px;

}

.p-vista .z-panelchildren {

background-color: #008BB6;

border-bottom: 0 none;

}

</style>

Toolbar style: 

<separator/>

<radiogroup onCheck='tb.sclass = self.selectedItem.label;'>

<radio label="default" />

<radio label="vista" checked="true" />

</radiogroup>

<separator/>

<panel id="panel" title="ZK Desktop" height="362px" width="433px"

border="normal" sclass="p-vista">

<panelchildren>

<image src="/img/castle.png" />

</panelchildren>

<toolbar id="tb" sclass="vista" height="32px" align="end">

<toolbarbutton image="/img/live.gif"

onClick='alert("Live")' />

<toolbarbutton image="/img/defender.gif"

onClick='alert("Defender")' />

<toolbarbutton image="/img/battery.gif"

onClick='alert("Battery")' />

<toolbarbutton image="/img/network.gif"

onClick='alert("Network")' />

<toolbarbutton image="/img/volumn.gif"

onClick='alert("Volumn")' />

<toolbarbutton  label="12:55 PM"

onClick='alert("time")' />

</toolbar>

</panel>

</zk>


3.  Context Menu

<vbox>

<label if="true">Right click the profile picture.</label>

<label if="false">Touch on the profile picture for a while</label>

<image src="/img/msn2.gif" context="editPopup" />

<menupopup id="editPopup">

<menuitem image="/img/Centigrade-Widget-Icons/Bubble-16x16.png" label="Message" />

<menuseparator />

<menuitem image="/img/Centigrade-Widget-Icons/UserProfileMale-16x16.png" label="Profile" />

<menuitem image="/img/Centigrade-Widget-Icons/Envelope-16x16.png" label="Mail to" />

<menuseparator />

<menu label="Group" image="/img/Centigrade-Widget-Icons/CasualUsers-16x16.png">

<menupopup>

<menu label="Add to...">

<menupopup>

<menuitem label="Member" autocheck="true"

checkmark="true" checked="true" />

<menuitem label="Managers" autocheck="true"

checkmark="true" />

<menuitem label="Guest" autocheck="true"

checkmark="true" />

<menuitem label="Customers" autocheck="true"

checkmark="true" />

</menupopup>

</menu>

<menu label="Move to...">

<menupopup>

<menuitem label="Member" autocheck="true"

checkmark="true" />

<menuitem label="Managers" autocheck="true"

checkmark="true" />

<menuitem label="Guest" autocheck="true"

checkmark="true" />

<menuitem label="Customers" autocheck="true"

checkmark="true" />

</menupopup>

</menu>

</menupopup>

</menu>

<menuitem label="Block" image="/img/Centigrade-Widget-Icons/CasualUserMaleProhibition-16x16.png" />

<menuitem label="Remove contant" image="/img/Centigrade-Widget-Icons/DeleteCross-16x16.png" />

</menupopup>

</vbox>


4.  Fisheye Menu ( pada ZK PE or EE )

<zk>

<div height="550px">

<checkbox label="Attach icon edge at bottom"

onCheck='fsb.attachEdge=self.checked?"bottom":"top"' />

<checkbox label="Vertical orient"

onCheck='fsb.orient=self.checked?"vertical":"horizontal"' />

<separator bar="true" />

<fisheyebar id="fsb" style="position:absolute;margin:20px 150px;"

attachEdge="top" itemWidth="80" itemHeight="80" itemMaxHeight="160" itemMaxWidth="160">

<fisheye image="/img/Centigrade-Widget-Icons/FolderABlue-128x128.png" label="Folder"

onClick="alert(self.label)" />

<fisheye image="/img/Centigrade-Widget-Icons/ReadingGlass-128x128.png" label="Reading Glasses"

onClick="alert(self.label)" />

<fisheye image="/img/Centigrade-Widget-Icons/Briefcase-128x128.png" label="Project"

onClick="alert(self.label)" />

<fisheye image="/img/Centigrade-Widget-Icons/MailboxFlag-128x128.png"

label="Email" onClick="alert(self.label)" />

<fisheye image="/img/Centigrade-Widget-Icons/Globe-128x128.png"

label="Globe" onClick="alert(self.label)" />

<fisheye image="/img/Centigrade-Widget-Icons/Spyglass-128x128.png" label="Spyglass"

onClick="alert(self.label)" />

</fisheyebar>

</div>

</zk>


5.  Tooltips and Popup

<zk>

<style>

.profile { width:60px; height:60px; } .p-data { padding-top:5px;

}

</style>

<listbox width="500px">

<listhead>

<listheader label="Operation" width="200px" />

<listheader label="Contants" sort="auto" />

</listhead>

<listitem tooltip="msg">

<listcell label=" Mouse hover - tooltip " />

<listcell>

<hlayout>

<image src="/img/msn1.gif" class="profile" />

<image src="/img/Centigrade-Widget-Icons/CasualUserMale-16x16.png" class="p-data" />

<vlayout class="p-data">

<label value="Male" />

<label value="Male@hotmail.com" />

</vlayout>

</hlayout>

</listcell>

</listitem>

<listitem popup="msg">

<listcell label="Click - popup" />

<listcell>

<hlayout>

<image src="/img/msn1.gif" class="profile" />

<image src="/img/Centigrade-Widget-Icons/CasualUserFemale-16x16.png" class="p-data" />

<vlayout class="p-data">

<label value="Female" />

<label value="Female@hotmail.com" />

</vlayout>

</hlayout>

</listcell>

</listitem>

</listbox>

<popup id="msg" width="300px">

<vlayout>

This user is online now !

<toolbarbutton label="Mail him/her"/>

</vlayout>

</popup>

</zk>


Baca juga artikel yang berkaitan : 


Reference : https://www.zkoss.org/zksandbox/#g2



Membuat CRUD Menggunakan ZKoss Hibernate

 


Pada artikel kali ini akan membuat CRUD ( Create Update Delete Read ) MVC ZK Framework menggunakan hibernate dan database postgres di Netbeans.

Tools yang digunakan :

  • Netbeans, 
  • Glassfish sever,
  • postgres database.

Kesiapan yang sebelum membuat project :


Berikut adalah cara membuat CRUD menggunakan ZKoss Hibernate

1. Buat Table 

CREATE TABLE public.mahasiswa

(

  nama character(30),

  id integer NOT NULL DEFAULT nextval('mahasiswa_id_seq'::regclass),

  nim character(10),

  CONSTRAINT id_pkey PRIMARY KEY (id)

)

WITH (

  OIDS=FALSE

);

ALTER TABLE public.mahasiswa

  OWNER TO postgres;

 

2. Buat Project

2.1. Buat Project ZK 

2.2. Klik New Project  

2.3. Klik Java Web

2.4. Klik ZK700CE JavaEE6 Application , Contoh  :  ZK Crud

2.5. Setelah itu masukkan library Postegres ke Netbeans

    • Klik Kanan Project
    • Pilih Properties 
    • klik Libraries   
    • lalu klik Add Library 
    • Pilih PostgreSQL JDBC Drive 
    • lalu Klik OK


3. Setting Hibernate 

Generate Hibernate Configuration Wizard

  • Klik pada project 
  • Klik New 
  • Klik Hibernate  
  • Klik Hibernate Configuration Wizard 
  • Klik Next
  • Isi Folder dengan src\java 
  • Klik Next  
  • Pilih Database Connection yang sudah dibuat.

Catatan : Jika belum ada database maka 

  • Pilih New Database Connection 
  • Pilih Driver, isikan dengan PostgreSQL 
  • Klik Next 
  • Isikan host, database, username, password disesuaikan dengan database yang dibuat --> 
  • Klik Test Connection 
  • Klik Finish.

Generate Hibernate reverse engineering Wizard, 

  • klik nanan project 
  • Klik New 
  • Klik Hibernate
  • Hibernate reverse engineering Wizard  
  • Klik Next
  • Isi Folder dengan src\java 
  • Klik Next  
  • Klik Add All 
  • Klik Finish.

Generate Mapping Files and Pojos :

  • klik nanan project 
  • Klik New
  • Klik Hibernate 
  • Klik Hibernate Mapping Files and POJOs from database
  • isikan package dengan model
  • Klik Finish.

Catatan : jika tidak bisa generate Mapping Files and POJOs : cek nama table di database harus lowercase semua, jika sudah hapus file hibernate.reveng.xml terus coba generate ulang mulai dari Generate Hibernate reverse engineering Wizard.

Generate HibernateUtils :

  • Klik nanan project 
  • Klik New
  • Klik Hibernate
  • Isikan HibernateUtil.java 
  • Klik Next
  • isikan package dengan util 
  • Klik Finish.


4.  Design Tampilan: dengan nama file : index.zul


<?xml version="1.0" encoding="UTF-8"?>

<zk xmlns="http://www.zkoss.org/2005/zul">

    <window id="win" apply="com.crud.controller.IndexController">

        <groupbox id="gb" mold="3d" width="600px">

            <caption label="MAHASISWA"/>

            <grid>

                <columns>

                    <column align="right" width="150px"/>

                    <column />

                </columns>

                <rows>

                    <row>

                        <label value="Nim :"/>

                        <textbox id="txtNim" />

                    </row>

                    <row>

                        <label value="Nama :"/>

                        <textbox id="txtNama" />

                    </row>

                    <row spans="2">

                        <hbox>

                            <button id="btnAdd" label="ADD"/>

                            <button id="btnUpdate" label="UPDATE"/>

                            <button id="btnDelete" label="DELETE"/>

                        </hbox>

                    </row>

                </rows>

            </grid>

            <listbox id="lb" width="600px" mold="paging" pageSize="5">

                <listhead>

                    <listheader label="Nim" />

                    <listheader label="Nama" />

                </listhead>             

            </listbox>

        </groupbox>

    </window>

</zk>


5. Buat Render : IndexRenderer.java

import com.crud.vo.Mahasiswa;

import org.zkoss.zul.Listcell;

import org.zkoss.zul.Listitem;

import org.zkoss.zul.ListitemRenderer;

public class IndexRenderer implements ListitemRenderer {

    public void render(Listitem lstm, Object t, final int i) throws Exception {

        final Mahasiswa data = (Mahasiswa) t;

        Listcell cell = new Listcell(String.valueOf(data.getNim()));

        cell.setParent(lstm);

        cell = new Listcell(data.getNama());

        cell.setParent(lstm);

    }

}


6. Buat Controller : IndexController.java

import com.crud.renderer.IndexRenderer;

import com.crud.util.HibernateUtil;

import com.crud.vo.Mahasiswa;

import java.math.BigInteger;

import java.util.ArrayList;

import java.util.List;

import org.hibernate.Query;

import org.hibernate.Session;

import org.zkoss.zk.ui.Component;

import org.zkoss.zk.ui.util.GenericForwardComposer;

import org.zkoss.zul.ListModelList;

import org.zkoss.zul.Listbox;

import org.zkoss.zul.Textbox;


/**  control CRUD  */

public class IndexController extends GenericForwardComposer {

    private Listbox lb;

    private Textbox txtNim, txtNama;

    private List<Mahasiswa> listMhs = new ArrayList<Mahasiswa>();

    @Override

    public void doAfterCompose(Component comp) throws Exception {

        super.doAfterCompose(comp);

        loadData();

    }

    private void loadData() {

        Session sess = HibernateUtil.getSessionFactory().openSession();

        Query query = sess.createQuery("from Mahasiswa");

        listMhs = query.list();

        sess.close();

        //set data to listbox

        lb.setModel(new ListModelList(listMhs));

        lb.setItemRenderer(new IndexRenderer());

    }

    public void onClick$lb() {

        if (lb.getSelectedIndex() != -1) {

            txtNim.setValue(String.valueOf(listMhs.get(lb.getSelectedIndex()).getNim()));

            txtNama.setValue(listMhs.get(lb.getSelectedIndex()).getNama());

        } else {

            alert("Pilih Salah Data");

        }

    }

    public void onClick$btnAdd() {

        if (!txtNama.getValue().trim().equals("") && !txtNim.getValue().trim().equals("")) {

            Session sess = HibernateUtil.getSessionFactory().openSession();

            sess.beginTransaction();

            Integer id = ((BigInteger) sess.createSQLQuery("select nextval('mahasiswa_id_seq')").uniqueResult()).intValue();

            Mahasiswa data = new Mahasiswa();

            data.setId(id);

            data.setNim(txtNim.getValue());

            data.setNama(txtNama.getValue());

            sess.save(data);

            sess.getTransaction().commit();

            sess.close();

            loadData();

            clearField();

            alert("Added");

        } else {

            alert("Nama dan NIM tidak boleh kosong");

        }

    }

    public void onClick$btnUpdate() {

        if (!txtNama.getValue().trim().equals("") && !txtNim.getValue().trim().equals("")) {

            Session sess = HibernateUtil.getSessionFactory().openSession();

            sess.beginTransaction();

            Mahasiswa obj = (Mahasiswa) sess.get(Mahasiswa.class, listMhs.get(lb.getSelectedIndex()).getId());

            obj.setNama(txtNama.getValue());

            obj.setNim(txtNim.getValue());

            sess.update(obj);

            sess.getTransaction().commit();

            sess.close();

            loadData();

            clearField();

            alert("Updated");

        } else {

            alert("Nama dan NIM tidak boleh kosong");

        }

    }

    public void onClick$btnDelete() {

        if (!txtNama.getValue().trim().equals("") && !txtNim.getValue().trim().equals("")) {

            Session sess = HibernateUtil.getSessionFactory().openSession();

            sess.beginTransaction();

            Mahasiswa obj = (Mahasiswa) sess.get(Mahasiswa.class, listMhs.get(lb.getSelectedIndex()).getId());

            sess.delete(obj);

            sess.getTransaction().commit();

            sess.close();

            loadData();

            clearField();

            alert("Deleted");

        } else {

            alert("Nama dan NIM tidak boleh kosong");

        }

    }

    private void clearField() {

        txtNim.setValue("");

        txtNama.setValue("");

    }

}

 

Memunculkan Simbol & Emoji Pada OS Mac

  Memunculkan Simbol & Emoji  1. Buka aplikasi Pages / Notes pada Macbook. 2. Klik pada Menubar Edit --> Pilih Emoji and Symbols a...