Her şeyden önce projenize seri port ile haberleşme sağlayabilmek için CommDriver ve ana klasöre de win32com.dll kütüphanesini eklemelisiniz. Yoksa haberleşmeyi sağlayamazsınız. Ekte bulunan dosyalardan bunları indirebilirsiniz.
Java ile seri port bağlantısı (Serial Port Connection) için gerekli tüm bilgileri şu linklerde bulabilirsiniz
http://java.sun.com/products/javacomm/
http://www.java2s.com/
http://www.captain.at/
http://saloon.javaranch.com/
Ben size Google aramalarında bulmakta zorlanacağınız serialPort.Close() metodunun bir ayrıntısını aktaracağım. Önce serialPort.Open() fonksiyonunu yazalım;
public void open(String comPort, int baudRate, int timeOut) throws Exception {
try { String drivername = "com.sun.comm.Win32Driver"; CommDriver driver = (CommDriver) Class.forName(drivername) .newInstance(); driver.initialize(); } catch (Exception e) { e.printStackTrace(); } try { portID = CommPortIdentifier.getPortIdentifier(comPort); serialPort = (SerialPort) portID.open(comPort, timeOut); inputStream = serialPort.getInputStream(); outputStream = serialPort.getOutputStream(); serialPort.addEventListener(this); //Kritik nokta! (It is critical!) serialPort.notifyOnDataAvailable(true); serialPort.setDTR(true); serialPort.setRTS(true); serialPort.setSerialPortParams(baudRate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); portID.addPortOwnershipListener(this); } catch (Exception e) { e.printStackTrace(); } }
Aslında temel mantık "açarken ne yaptıysanız kapatırken tam tersini yapın" şeklinde. Fakat birini unutursanız (ki o çok kritik bir nokta) bildiğimiz Java hatasıyla karşılaşırsınız. Yani hiçbir hata yoktur ama program çalışmaz :) Buyurun şimdi serialPort.Close() metoduna;
public void closePort() throws Exception { try { serialPort.removeEventListener(); } catch (Exception e) { e.printStackTrace(); } try { portID.removePortOwnershipListener(this); } catch (Exception e) { e.printStackTrace(); } try { //Kritik nokta! (It is critical!) serialPort.notifyOnDataAvailable(false); //En önemli ve aynı zamanda en mantıksız kısım burası. //Bunu unutursanız program hata vermemekle beraber //port da kapanmıyor. //If you don't write this, the serial port will not close. inputStream.close(); outputStream.close(); serialPort.close(); } catch (Exception e) { e.printStackTrace(); } }
Siz de dikkat etmişsinizdir sanırım. Kritik nokta dediğim yer, en gereksiz ayrıntı gibi duruyor. Ama ne yapalım bu JAVA. Bu yüzden "Java diyorum, başka da bir şey demiyorum."
Umarım yardımcı olabilmişimdir. İsteyen olursa kaynak kodları gönderebilirim.
Not: Bazı yerlerde İngilizce yazdığımı fark etmişsinizdir. Bu projeyi yaparken o küçük ayrıntı için oldukça fazla miktarda uğraşmıştım. Çözebilirsem bildiğim bütün dillerde yayınlayacağımı söylemiştim. Sadece İngilizce bildiğim için İngilizce yazdım. Ama her zaman için ortak lisan Java'dır :)
Hiç yorum yok:
Yorum Gönder