Arduino Notlarım

Java Com Port Okuma / Arduino Haberleşmesi

By
on
March 23, 2015

Java Com Port Okuma

Selam,
Bir zamanlar burada Arduino geliyor ! diye bir blog paylaşmıştım.
Farkındayım aradan çok uzun süre geçti ama araya çok fazla iş girdi..
Ama bu yazıdan da anlayacaksınız ki birşeyler yapmaya başladım.

Arduinoda ilk uğraştığım şeyler standart led yakıp söndürme gibi basit işlemlerdi.
Daha sonrasında aradaki bir kaç level'i atlayarak Arduino ve RFID-RC522 kart ile RFID kart okumaya başladım.
Projeyi daha sonrasında detaylı olarak vereceğim ama şimdi sadece çok zamanımı alan Java ile Port Haberleşmesini vereceğim.

Öncelikle RXTX kütüphanesine ihtiyacımız var ve 2.0 sürümünün üzerinde bir RXTX'e ihtiyacımız var.
Çünkü 2.0'ın altındakilerde Windows PC'lerde sorun olduğu sıkça söyleniyor.
Kütüphaneyi alt tarafta vereceğim linkten indirebilirsiniz.
Kütüphaneyi indirip projenize dahil ettikten sonra rar dosyasının içinden çıkan rxtxSerial.dll  dosyasını işletim sisteminiz kaç bit ise uygun dll'i Windows Klasörüne kopyalıyoruz.

Daha sonrasında vereceğim kodlarda uygun değişiklikleri yaparak hangi COM portundan veri almak istiyorsanız verileri isteğiniz gibi şekillendiriyorsunuz.


package com.scrnx.arduino;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;

import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;

import java.util.Enumeration;

import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class ArduinoComPort implements SerialPortEventListener {
 SerialPort serialPort;
 private static final String PORT_NAMES[] = { "COM3", // Windows
 };

 private BufferedReader input;
 /** The output stream to the port */
 private static OutputStream output;
 /** Milliseconds to block while waiting for port open */
 private static final int TIME_OUT = 2000;
 /** Default bits per second for COM port. */
 private static final int DATA_RATE = 9600;

 public void initialize() {
 System.setProperty("gnu.io.rxtx.SerialPorts", "COM3");

 CommPortIdentifier portId = null;
 Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

 while (portEnum.hasMoreElements()) {
 CommPortIdentifier currPortId = (CommPortIdentifier) portEnum
 .nextElement();
 for (String portName : PORT_NAMES) {
 if (currPortId.getName().equals(portName)) {
 portId = currPortId;
 break;
 }
 }
 }
 if (portId == null) {
 System.out.println("Porta veri gelmiyor!.");
 return;
 }

 try {
 serialPort = (SerialPort) portId.open(this.getClass().getName(),
 TIME_OUT);

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

 input = new BufferedReader(new InputStreamReader(
 serialPort.getInputStream()));
 output = serialPort.getOutputStream();

 serialPort.addEventListener(this);
 serialPort.notifyOnDataAvailable(true);
 } catch (Exception e) {
 System.err.println(e.toString());
 }
 }

 public synchronized void close() {
 if (serialPort != null) {
 serialPort.removeEventListener();
 serialPort.close();
 }
 }

 public synchronized void serialEvent(SerialPortEvent oEvent) {
 if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
 try {
 if (input.ready() == true) {
 String inputLine = input.readLine();
// okunan veri  = inputLine bu veriyi aldıktan sonraki iş sizin koderlığınıza bakar.
 JOptionPane.showMessageDialog(null, "Okunan Kart ID "
 + inputLine);
 } else
 System.out.println("Hata, Lütfen kartı tekrar okutunuz.");
 } catch (Exception e) {
 System.err.println(e.toString());
 }
 }
 }

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

 ArduinoComPort main = new ArduinoComPort();
 main.initialize();
 Thread t = new Thread() {
 public void run() {
 try {
 Thread.sleep(1000000);
 } catch (InterruptedException ie) {
 }
 }
 };
 t.start();
 System.out.println("Arduino Yeniden Başlatılıyor..");
 System.err.println("Port Açılıyor..");
 Thread.sleep(3000);
 System.out.println("Port Açıldı..");
 System.out.println("Lütfen Kart Okutunuz..");
 System.err.println(" ");

 }
 }

Kodu çalıştırdıktan sonra işlemleri adım adım yaptıysanız bir sorun olmadan verileri okuyabilirsiniz.
Burada istenilen COM portundan veri okumayı sağlayan kodlar var, yani bana Arduino için lazımdı size başka bir modül için lazım olur gerekli düzenlemeleri yaparak işleminizi gerçekleştirebilirsiniz.
Bir sorun olursa yorum olarak yazın yada bana bir şekilde ulaşın yardımcı olamaya çalışayım.

Bol şans (:

 

RXTXcomm-2.2pre2 Kütüphanesi 

TAGS
RELATED POSTS

LEAVE A COMMENT

Sercan Toğrul
Java Developer - Kyrenia

I'm a java developer. I'm from Turkey but I live in Cyprus. You can see my skills and my notes here. Do you have a question you can send me email and I will answer!