81
ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI mikrodenetleyici kartını java arayüz programıyla nasıl kullanacağınızın örnekleri verilecektir. Javayla ARDUINO denetleyicinizi bağlamak için seri iletişimkanalını kullanmanız gerekir, bunun için ilk işlem java programlarının seri iletişim kurmasını sağlamaktır. Bu iletişimi oluşturacak programlara (RXTX) http://fizzed.com/oss/rxtx-for-java adresinden ulaşabilirsiniz. Bu programlar c dilindedir, bu yüzden kendi bilgisayarınıza uygun olan alt setleri seçerek kullanmalısınız. Benim bilgisayarım 64 bit Windows kökenli olduğundan ben burada bundan bahsedeceğim. Windows 64 için bu siteden mfz-rxtx-2.2-20081207-win-x64.zip dosyası geldi. Bu dosyayı açtığımızda aşağıdaki programları göreceksiniz. Listedeki RXTXcomm.jar dosyasını bilgisayarınızdaki java derleyicisini yerleştirdiğiniz dosya sisteminin altındaki jre\lib\ext dosyasına kaydetmelisiniz. rxtxSerial.dll dosyasını da bilgisayarınızdaki java derleyicisini yerleştirdiğiniz dosya sisteminin altındaki jre\bin dosyasına kaydetmelisiniz. Ayrıca ben burada mikrokontrol sisteminden aldığınız veriyi SQLite veri tabanına kaydederek kullanılmasından da bahsedeceğim. Bunun için de SQLite-java bağlantı programına ihtiyacınız olacak. Bu programı da https://bitbucket.org/xerial/sqlite-jdbc/downloads/

ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

  • Upload
    lamdieu

  • View
    261

  • Download
    4

Embed Size (px)

Citation preview

Page 1: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

ARDUINO JAVA ARAYÜZ PROGRAMLAMA

M. Turhan ÇOBAN

Burada ARDUINI mikrodenetleyici kartını java arayüz programıyla nasıl kullanacağınızın örnekleri

verilecektir. Javayla ARDUINO denetleyicinizi bağlamak için seri iletişimkanalını kullanmanız gerekir,

bunun için ilk işlem java programlarının seri iletişim kurmasını sağlamaktır. Bu iletişimi oluşturacak

programlara (RXTX)

http://fizzed.com/oss/rxtx-for-java

adresinden ulaşabilirsiniz. Bu programlar c dilindedir, bu yüzden kendi bilgisayarınıza uygun olan alt setleri

seçerek kullanmalısınız. Benim bilgisayarım 64 bit Windows kökenli olduğundan ben burada bundan

bahsedeceğim. Windows 64 için bu siteden mfz-rxtx-2.2-20081207-win-x64.zip dosyası geldi. Bu dosyayı

açtığımızda aşağıdaki programları göreceksiniz.

Listedeki RXTXcomm.jar dosyasını bilgisayarınızdaki java derleyicisini yerleştirdiğiniz dosya sisteminin

altındaki jre\lib\ext dosyasına kaydetmelisiniz. rxtxSerial.dll dosyasını da bilgisayarınızdaki java

derleyicisini yerleştirdiğiniz dosya sisteminin altındaki jre\bin dosyasına kaydetmelisiniz. Ayrıca ben

burada mikrokontrol sisteminden aldığınız veriyi SQLite veri tabanına kaydederek kullanılmasından da

bahsedeceğim. Bunun için de SQLite-java bağlantı programına ihtiyacınız olacak. Bu programı da

https://bitbucket.org/xerial/sqlite-jdbc/downloads/

Page 2: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Adresinden edinebilirsiniz. Bu adreste bulacağınız sqlite-jdbc-3.16.1.jar dosyasını da java derleyicisini

yerleştirdiğiniz dosya sisteminin altındaki jre\lib\ext dosyasına kaydetmelisiniz. Bu prosesi otomatik

yapmak için aşağıda verilen bat dosyasını kullanabilirsiniz.

RXTX.bat

SET JAVA_HOME=%1 copy sqlite-jdbc-3.16.1.jar %JAVA_HOME%\jre\lib\ext\ copy RXTXcomm.jar %JAVA_HOME%\jre\lib\ext\ copy rxtxSerial.dll %JAVA_HOME%\jre\bin\

Burada değişik projeler üzerinden bu bağlantıları göstermeye çalışacağız. Arduino programlarını yazmak

için bir editör ve yükleme programına ihtiyacınız olacak. Bu amaçla kullanabileceğiniz bir editör

programını https://www.arduino.cc/en/Main/Software adresinde bulabilirsiniz.

Yapısal komutlar

setup() loop()

Kontrol yapıları

if

if...else

for

switch case

while

do... while

break

continue

return

goto

diğer sintaxlar

; (semicolon)

{} (curly braces)

// (single line comment)

/* */ (multi-line comment)

#define

#include

Arithmetic Operators

= (assignment operator)

+ (addition)

- (subtraction)

* (multiplication)

/ (division)

% (modulo)

Karşılaştırma deyimleri

Page 3: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

== (equal to)

!= (not equal to)

< (less than)

> (greater than)

<= (less than or equal to)

>= (greater than or equal to)

Mantık operatörleri

&& (and)

|| (or)

! (not)

Pointer (işaretçi) operatörleri

* dereference operator

& reference operator

Bit Operatörleri

& (bitwise and)

| (bitwise or)

^ (bitwise xor)

~ (bitwise not)

<< (bitshift left)

>> (bitshift right)

Birleşik matematik operatörleri

++ (increment)

-- (decrement)

+= (compound addition)

-= (compound subtraction)

*= (compound multiplication)

/= (compound division)

%= (compound modulo)

&= (compound bitwise and)

|= (compound bitwise or)

DEĞİŞKENLER

Sabitler

HIGH | LOW

INPUT | OUTPUT | INPUT_PULLUP

LED_BUILTIN

true | false

integer constants

floating point constants

Veri tipleri

Page 4: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

void

boolean

char

unsigned char

byte

int

unsigned int

word

long

unsigned long

short

float

double

string - char array

String - object

array

Dönüştürücüler

char()

byte()

int()

word()

long()

float()

değişken işaretleri

variable scope

static

volatile

const

Yardımcı metod ve değişken

sizeof()

PROGMEM

Fonksiyonlar

Dijital girdi/çıktı I/O

pinMode()

digitalWrite()

digitalRead()

Analog girdi/çıktı I/O

analogReference()

analogRead()

analogWrite() - PWM

Page 5: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Due & Zero only

analogReadResolution()

analogWriteResolution()

ileri girdi çıktı I/O

tone()

noTone()

shiftOut()

shiftIn()

pulseIn()

zaman

millis()

micros()

delay()

delayMicroseconds()

Matematik

min()

max()

abs()

constrain()

map()

pow()

sqrt()

Trigonometri

sin()

cos()

tan()

Karekterler

isAlphaNumeric()

isAlpha()

isAscii()

isWhitespace()

isControl()

isDigit()

isGraph()

isLowerCase()

isPrintable()

isPunct()

isSpace()

isUpperCase()

isHexadecimalDigit()

Page 7: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Bu program arduinoda abcdefg harflerini yazdırmaktadır. Programı Arduinoya aktarmak için

Dogrula/Derle komutuyla derleyerek yükle komutuyla mikroprosesöre göndermemiz gerekir. Yükle

komutu önce derlediği için tek olarak ta kullanılabilir. Program çıktısını serport ekranından da görebiliriz

(bu editör programı da veriyi okumak için RXTX iletişimi kullanmaktadır ve aslında java dilinde yazılmıştır)

Page 8: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Biz bunu javaya aktararak görmek istiyoruz. Seri kanal iletişimi açmak için önce bir küçük iletişim kanal

açma programı oluşturalım. Bu program grafik ekranda arduino ile iletişim kuracak seri kanalı açacaktır.

import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.Enumeration; import java.util.HashMap; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; /** * Choose a port, any port! * * Java Communications is a "standard extention" and must be downloaded and * installed separately from the JDK before you can even compile this program. * * @author Ian F. Darwin, http://www.darwinsys.com/ * @version $Id: PortChooser.java,v 1.9 2004/04/11 23:50:40 ian Exp $ * methods added by M. Turhan Coban 18.11.2011 */ public class PortChooser extends JDialog implements ItemListener { /** A mapping from names to CommPortIdentifiers. */ protected HashMap map = new HashMap(); /** The name of the choice the user made. */

Page 9: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

protected String selectedPortName; /** The CommPortIdentifier the user chose. */ protected CommPortIdentifier selectedPortIdentifier; /** The JComboBox for serial ports */ protected JComboBox serialPortsChoice; /** The JComboBox for parallel ports */ protected JComboBox parallelPortsChoice; /** The JComboBox for anything else */ protected JComboBox other; /** The SerialPort object */ protected SerialPort ttya; /** To display the chosen */ protected JLabel choice; /** Padding in the GUI */ protected final int PAD = 5; /** * This will be called from either of the JComboBoxen when the user selects * any given item. */ public void itemStateChanged(ItemEvent e) { // Get the name selectedPortName = (String) ((JComboBox) e.getSource()) .getSelectedItem(); // Get the given CommPortIdentifier selectedPortIdentifier = (CommPortIdentifier) map.get(selectedPortName); // Display the name. choice.setText(selectedPortName); } /* The public "getter" to retrieve the chosen port by name. */ public String getSelectedName() { return selectedPortName; } /* The public "getter" to retrieve the selection by CommPortIdentifier. */ public CommPortIdentifier getSelectedIdentifier() { return selectedPortIdentifier; } /** A test program to show up this chooser. */ public static void main(String[] ap) { PortChooser c = new PortChooser(null); c.setVisible(true); // blocking wait System.out.println("Seçtiğiniz kanal " + c.getSelectedName() + " (known by " + c.getSelectedIdentifier() + ")."); System.exit(0); } public static CommPortIdentifier select_port(JFrame parent) { PortChooser c = new PortChooser(parent); c.setVisible(true); // blocking wait return c.getSelectedIdentifier(); } /** * Construct a PortChooser --make the GUI and populate the ComboBoxes. */ public PortChooser(JFrame parent) { super(parent, "Datalogger bağlantısı kanal seçici ", true); makeGUI(); populate(); finishGUI(); }

Page 10: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

/** * Build the GUI. You can ignore this for now if you have not yet worked * through the GUI chapter. Your mileage may vary. */ protected void makeGUI() { Container cp = getContentPane(); JPanel centerPanel = new JPanel(); cp.add(BorderLayout.CENTER, centerPanel); centerPanel.setLayout(new GridLayout(0, 2, PAD, PAD)); centerPanel.add(new JLabel("seri bağlantılar ", JLabel.RIGHT)); serialPortsChoice = new JComboBox(); centerPanel.add(serialPortsChoice); serialPortsChoice.setEnabled(false); centerPanel.add(new JLabel("paralel bağlantılar ", JLabel.RIGHT)); parallelPortsChoice = new JComboBox(); centerPanel.add(parallelPortsChoice); parallelPortsChoice.setEnabled(false); centerPanel.add(new JLabel("Bilinmiyen bağlantılar", JLabel.RIGHT)); other = new JComboBox(); centerPanel.add(other); other.setEnabled(false); centerPanel.add(new JLabel("Sizin seçiminiz :", JLabel.RIGHT)); centerPanel.add(choice = new JLabel()); JButton okButton; cp.add(BorderLayout.SOUTH, okButton = new JButton("SEÇTİKTEN SONRA BASINIZ")); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { PortChooser.this.dispose(); } }); } /** * Populate the ComboBoxes by asking the Java Communications API what ports * it has. Since the initial information comes from a Properties file, it * may not exactly reflect your hardware. */ protected void populate() { // get list of ports available on this particular computer, // by calling static method in CommPortIdentifier. Enumeration pList = CommPortIdentifier.getPortIdentifiers(); // Process the list, putting serial and parallel into ComboBoxes while (pList.hasMoreElements()) { CommPortIdentifier cpi = (CommPortIdentifier) pList.nextElement(); // System.out.println("Port " + cpi.getName()); map.put(cpi.getName(), cpi); if (cpi.getPortType() == CommPortIdentifier.PORT_SERIAL) { serialPortsChoice.setEnabled(true); serialPortsChoice.addItem(cpi.getName()); } else if (cpi.getPortType() == CommPortIdentifier.PORT_PARALLEL) { parallelPortsChoice.setEnabled(true); parallelPortsChoice.addItem(cpi.getName()); } else { other.setEnabled(true); other.addItem(cpi.getName()); } } serialPortsChoice.setSelectedIndex(-1); parallelPortsChoice.setSelectedIndex(-1); } protected void finishGUI() {

Page 11: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

serialPortsChoice.addItemListener(this); parallelPortsChoice.addItemListener(this); other.addItemListener(this); pack(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } }

Bunun ardından da ilk java Monitor programı ile ARDUINO’nun gönderdiği seri iletişimi okuyarak

yazdıralım. Bu tür iletişim programları gerçek zaman programlarıdır. İletişim hızı olarak 9600 baud, veri

olarak 8 bit iletişim, durdurma biti olarak 1 değeri(STOPBITS_1) ve PARITY_NONE (PARITY_NONE

PARITY_EVEN veya PARITY_ODD olabilir) değerleri direk olarak programın içinde atanmıştır.

import java.io.*; import java.util.*; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import java.io.FileDescriptor; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.awt.*; public class Monitor implements Runnable { private static final long serialVersionUID = 8257386587L; public Thread readThread; // zaman içinde çalışma değişkeni public CommPortIdentifier portId; // seri bağlantı kanal numarası public SerialPort serialPort; // seri kanal public OutputStream outputStream; // çıktı kanalı public InputStream inputStream; // girdi kanalı public int sleep1; // readThread bekleme zamanı milisaniye //kontrol parametresi public Monitor(String s) { portId=portId(s); System.out.println("portID is read"); try { serialPort = (SerialPort) portId.open(s, 2000); } catch (gnu.io.PortInUseException e) {} try { outputStream = serialPort.getOutputStream(); } catch (IOException e) {} try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (gnu.io.UnsupportedCommOperationException e) {} } //seri ileti?im kanal? aç?lmas? public CommPortIdentifier portId(String s) { portId = PortChooser.select_port(null); try { serialPort = (SerialPort) portId.open(s, 2000); } catch (gnu.io.PortInUseException e) {} return portId; } public void start() {readThread = new Thread(this); readThread.start(); } public void run() { int k=0; while(true)

Page 12: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

{ try{ k++; Thread.sleep(1000); try { inputStream = serialPort.getInputStream(); byte[] readBuffer = new byte[30]; long[] readBuffer1 = new long[30]; byte numBytes = (byte)inputStream.read(readBuffer); //System.out.println("numBytes="+numBytes); //String s= new String(readBuffer, "US-ASCII"); String s= new String(readBuffer); int i=0; for(i=0;i<numBytes;i++) { readBuffer1[i]=readBuffer[i]&0xFF; //readBuffer1[i]=readBuffer[i]; //System.out.print("i = "+i+"*"); //System.out.printf("%x ",readBuffer[i]); } //System.out.println(); System.out.println(s); } catch (IOException e) {} } catch (InterruptedException e) {System.out.println("InterruptedException 1");} } } public static void main(String arg[]) { Monitor m=new Monitor("ARDUNIO"); m.start();} }

Page 13: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

İkinci program olarak seri kanaldan sayı oluşturarak gönderelim

double i; String s; void setup() { Serial.begin(9600); } void loop() { Serial.println(i); i++; delay(1000); }

Page 14: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Bu okumayı yapacak java monitör programı

import java.io.*; import java.util.*; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import java.io.FileDescriptor; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.awt.*; public class Monitor1 implements Runnable { private static final long serialVersionUID = 8257386587L; public Thread readThread; // zaman içinde çal??ma de?i?keni public CommPortIdentifier portId; // seri ba?lant? kanal? numaras? public SerialPort serialPort; // seri kanal public OutputStream outputStream; // ç?kt? kanal? public InputStream inputStream; // girdi kanal? public int sleep1; // readThread bekleme zaman? milisaniye //kontrol parametresi public Monitor1(String s) { portId=portId(s); System.out.println("portID is read"); try { serialPort = (SerialPort) portId.open(s, 2000); } catch (gnu.io.PortInUseException e) {} try { outputStream = serialPort.getOutputStream(); } catch (IOException e) {} try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (gnu.io.UnsupportedCommOperationException e) {} } //seri iletişim kanalı açılması public CommPortIdentifier portId(String s) { portId = PortChooser.select_port(null); try { serialPort = (SerialPort) portId.open(s, 2000); } catch (gnu.io.PortInUseException e) {} return portId; } public void start() {readThread = new Thread(this);

Page 15: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

readThread.start(); } public void run() { int k=0; while(true) { try{ k++; Thread.sleep(1000); try { inputStream = serialPort.getInputStream(); byte[] readBuffer = new byte[30]; long[] readBuffer1 = new long[30]; byte numBytes = (byte)inputStream.read(readBuffer); String s= new String(readBuffer); int i=0; for(i=0;i<numBytes;i++) { readBuffer1[i]=readBuffer[i]&0xFF; } System.out.print(s); } catch (IOException e) {} } catch (InterruptedException e) {System.out.println("InterruptedException 1");} } } public static void main(String arg[]) { Monitor1 m=new Monitor1("ARDUNIO"); m.start();} }

Program 3 Analog okuma Bir sonraki programda bir potansiyometre kullanacağız. Potansiyometre direnci

değiştirerek voltaj çıkışını değiştirebilen bir aygıttır.

void setup() { Serial.begin(9600); } void loop() { // inputu analog 0 pininden okuyun: int sensorValue = analogRead(A0); // okunan değeri seri çıktıya yazın: Serial.println(sensorValue/1023.0*5.0); delay(100);

Page 16: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

}

Page 17: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Java programına a GUI (kullanıcı grafik arayüzü) programı da eklenerek çıktının grafik formunda olması

sağlanmıştır.

import java.io.*; import java.util.*; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import java.io.FileDescriptor; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.awt.*; public class Monitor3 implements Runnable { String s2="[\\x00-\\x20]*[+-]?(((((\\p{Digit}+)(\\.)?((\\p{Digit}+)?)([eE][+-]?(\\p{Digit}+))?)|(\\.((\\p{Digit}+))([eE][+-]?(\\p{Digit}+))?)|(((0[xX](\\p{XDigit}+)(\\.)?)|(0[xX](\\p{XDigit}+)?(\\.)(\\p{XDigit}+)))[pP][+-]?(\\p{Digit}+)))[fFdD]?))[\\x00-\\x20]*"; private static final long serialVersionUID = 8257386587L; public Thread readThread; // zaman içinde çalışma değişkeni public CommPortIdentifier portId; // seri bağlantı kanalı numarası public SerialPort serialPort; // seri kanal public OutputStream outputStream; // çıktı kanalı public InputStream inputStream; // girdi kanal? public int sleep1; // readThread bekleme zaman? milisaniye public tplot2D d3; public dials d1; double T1; //kontrol parametresi public Monitor3(String s) { portId=portId(s); System.out.println("portID is read"); try { serialPort = (SerialPort) portId.open(s, 2000); } catch (gnu.io.PortInUseException e) {} try { outputStream = serialPort.getOutputStream(); } catch (IOException e) {} try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (gnu.io.UnsupportedCommOperationException e) {} dials(); } //seri iletişim kanalı açılması public CommPortIdentifier portId(String s) { portId = PortChooser.select_port(null); try { serialPort = (SerialPort) portId.open(s, 2000); } catch (gnu.io.PortInUseException e) {} return portId; } public void start() {readThread = new Thread(this); readThread.start(); } public void run() { int k=0; while(true) { try{ k++; Thread.sleep(100); try { inputStream = serialPort.getInputStream(); byte[] readBuffer = new byte[30]; long[] readBuffer1 = new long[30];

Page 18: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

byte numBytes = (byte)inputStream.read(readBuffer); //System.out.println("numBytes="+numBytes); //String s= new String(readBuffer, "US-ASCII"); String s= new String(readBuffer); int i=0; for(i=0;i<numBytes;i++) { readBuffer1[i]=readBuffer[i]&0xFF; //readBuffer1[i]=readBuffer[i]; //System.out.print("i = "+i+"*"); //System.out.printf("%x ",readBuffer[i]); } if(s.matches(s2)) { T1=Double.parseDouble(s);} else {T1=0.0;} double T2[]={T1}; d1.setData(T2); System.out.print("T1="+T1); } catch (IOException e) {} } catch (InterruptedException e) {System.out.println("InterruptedException 1");} } } public void dials() { double n1=Math.PI/2; double n2=3.0*n1; String st[]={" Voltage V "}; double td[]={0}; double tmin=0; double tmax=5.0; double tetamax=100; double teta1_rad=Math.PI/4; double teta2_rad=3.0*Math.PI/2.0+teta1_rad; d1=new dials("Arduino analog read","Voltage V",st,td,tmin,tmax,teta1_rad,teta2_rad); FrameGraphic.plot("Voltmetre ",d1); } public static void main(String arg[]) { Monitor3 m=new Monitor3("ARDUNIO"); m.start(); } }

GUI programı3 adet sınıfın birlikte çalışmasıyla oluşmaktadır. Bunlar polar.java, analogDialP.java ve

dials.java programlarıdır. Polar.java kartezian-polar koordinat ilişkilerini tanımlamaktadır(analog dial polar

koordinat kullanarak rakamları göstermektedir)

//=======================================================// //JAVA-ARDUINO veri sistem entagrasyonu // // analog yuvarlak çıktı göstergesinin kullandığı // // polar koordinat sistemi programı: polar // // M. Turhan Coban // //=======================================================// public class polar { // polar coordinates // teta radyan protected double R,teta; public polar() { R=1; teta=0; } public polar(double Ri,double tetai) { R=Ri;

Page 19: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

teta=tetai; } public polar(polar y) { R=y.ROku(); teta=y.tetaOku(); } public void R_input(double Ri) { R=Ri; } public void teta_input(double tetai) { teta=tetai; } public void polar_input(double Ri,double tetai) { R=Ri; teta=tetai; } public void kartesien_input(double xi,double xj) { R=Math.sqrt(xi*xi+xj*xj); teta=Math.atan2(xj,xi); } public double ROku() { return R; } public double tetaOku() { return teta; } public double xi() { return R*Math.cos(teta); } public double xj() { return R*Math.sin(teta); } public void topla(polar y) { kartesien_input((xi()+y.xi()),(xj()+y.xj())); } public void fark(polar y) { kartesien_input((xi()-y.xi()),(xj()-y.xj())); } public polar polarOku() { return this; } public boolean esittir(polar v) { boolean b=((R==v.ROku())&&(teta==v.tetaOku()));

Page 20: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

return b; } public boolean buyuktur(polar v) { return (this.R>v.ROku()); } public boolean kucuktur(polar v) { return (this.R<v.ROku()); } }

analogDialP analog göstergeyi çizip hazırlamaktadır.

//=======================================================// //JAVA-ARDUINO veri sistem entagrasyonu // // analog yuvarlak çıktı göstergesi // // analogDialP // // M. Turhan Coban // //=======================================================// // Girdi Değişken listesi // String name : gösterge ismi // String unit : gösterge birim // double minx: gösterge minimum rakam // double maxx: gösterge maksimum rakam // double minteta : gösterge minimum rakam açısı (radyan) // double maxtetai: gösterge maksimum rakam açısı (radyan) // int ni : rakamların da gösterildiği büyük skala bölüm sayısı // int n1i: küçük skala bölüm sayısı import javax.swing.*; import java.awt.Graphics; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import java.net.*; import java.io.*; import java.awt.Graphics; import java.util.*; import java.text.*; import java.util.Locale; import java.awt.image.*; import java.awt.Font; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.*; import java.awt.font.*; // ============ public class analogDialP extends JPanel { private static final long serialVersionUID = 756764376L; double x,minx,maxx; double minteta,maxteta; int n; int n1; polar p; double angle1,angle2,angle3; String name; String unit; public analogDialP(String namei,String uniti,double minxi,double maxxi,double mintetai,double maxtetai,int ni,int n1i) { name=namei; unit=uniti;

Page 21: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

minx=minxi; maxx=maxxi; minteta=mintetai; maxteta=maxtetai; x=minx; n=ni; n1=n1i; angle1=minteta; angle2=maxteta; } public void setx(double xi) {x=xi;} public void drawPlotLabel(Graphics g2,String s, int xi,int yi,int R1i) {Graphics2D g=(Graphics2D)g2; int x1,y1; int R1=R1i; x1=xi+R1; y1=yi+R1; g.drawString(s,x1,y1); //AffineTransform origTransform = g.getTransform(); //g.translate(x1,y1); //g.rotate(90*Math.PI/180); //g.drawString(s,0,0); //g.setTransform(origTransform); //g.drawString("xxxxxxxxxxxxx",0,0); } public void drawLabel1(Graphics g2,int xi,int yi,int R1i) { double angle; Graphics2D g=(Graphics2D)g2; double R1=R1i; polar P1=new polar(); int x[]=new int[n]; int y[]=new int[n]; GeneralPath polygon=new GeneralPath(GeneralPath.WIND_EVEN_ODD, x.length); int x1,y1; double teta=(maxteta-minteta)/n; double dx=(maxx-minx)/n; for(double xx=minx;xx<=maxx;xx+=dx) { angle=(xx-minx)/(maxx-minx)*(maxteta-minteta)+minteta; double teta1=-angle+Math.PI*3.0/2.0; //System.out.println("xx="+xx+"angle="+angle+"teta1="+teta1); P1.polar_input(R1+20,teta1); x1=(xi+(int)P1.xi()); y1=(yi+(int)P1.xj()); if(teta1>Math.PI/2.0 && teta1<3.0*Math.PI/2.0) { x1=(xi+(int)P1.xi())-40; } else { x1=(xi+(int)P1.xi()); } if(teta1>Math.PI && teta1<2.0*Math.PI) { y1=(yi-(int)P1.xj())+10;} else { y1=(yi-(int)P1.xj());} g.setFont(new Font("Serif",Font.BOLD,18)); g.drawString(toString(xx,6,3),x1,y1); } } public void drawLabel(Graphics g2,int xi,int yi,int R1i)

Page 22: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

{ double angle; Graphics2D g=(Graphics2D)g2; double R1=R1i; polar P1=new polar(); polar P2=new polar(); int x[]=new int[n]; int y[]=new int[n]; int x1,y1; double teta=(maxteta-minteta)/n; double teta2; double dx=(maxx-minx)/n; g.setFont(new Font("Serif",Font.BOLD,18)); AffineTransform at; AffineTransform origTransform = g.getTransform(); for(double xx=minx;xx<=maxx;xx+=dx) { angle=(xx-minx)/(maxx-minx)*(maxteta-minteta)+minteta; double teta1=-angle+Math.PI*3.0/2.0; teta2=angle+Math.PI/2.0-Math.PI/40.0; // dik yazı istersek // teta2=angle+Math.PI/2.0+Math.PI/80.0; P1.polar_input(R1,teta2); x1=(xi+(int)P1.xi()); y1=(yi+(int)P1.xj()); g.translate(x1,y1); g.rotate(teta2+Math.PI/2.0); // dik yazı istersek // g.rotate(teta2); g.drawString(toString(xx,4,1),0,0); g.setTransform(origTransform); //TextLayout t=new TextLayout(toString(xx,5,1),g.getFont(),g.getFontRenderContext()); //at=AffineTransform.getRotateInstance(teta1,x1,y1); //g.setTransform(at); //t.draw(g,x1,y1); //at=AffineTransform.getRotateInstance(0,0,0); //g.setTransform(at); //g.translate(x1,y1); //g.rotate(angle); //t.draw(g,x1,y1); //g.setTransform(origTransform); //g.drawText(toString(xx,5,1)); /* if(teta1>Math.PI/2.0 && teta1<3.0*Math.PI/2.0) { x1=(xi+(int)P1.xi())-40; } else { x1=(xi+(int)P1.xi()); } if(teta1>Math.PI && teta1<2.0*Math.PI) { y1=(yi-(int)P1.xj())+10;} else { y1=(yi-(int)P1.xj());} */ //g.drawString(toString(xx,5,1),x1,y1); } } //drawAkrep metodu sonu public static String toString(double left, int w, int d) // converts a double to a string with given width and decimals. { NumberFormat df=NumberFormat.getInstance(Locale.US); df.setMaximumFractionDigits(d); df.setMinimumFractionDigits(d); df.setGroupingUsed(false); String s = df.format(left); while (s.length() < w) s = " " + s; if (s.length() > w)

Page 23: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

{ s = ""; for (int i=0; i<w; i++) s = s + "-"; } return s; } public void drawLine(Graphics g2,int xi,int yi,int R1i,int R2i,int ni) { double angle; Graphics2D g=(Graphics2D)g2; double R1=R1i; double R2=R2i; polar P1=new polar(); polar P2=new polar(); int x[]=new int[ni]; int y[]=new int[ni]; GeneralPath polygon=new GeneralPath(GeneralPath.WIND_EVEN_ODD, x.length); double teta=(maxteta-minteta)/ni; double dx=(maxx-minx)/ni; for(double xx=minx;xx<=maxx;xx+=dx) { angle=(xx-minx)/(maxx-minx)*(maxteta-minteta)+minteta; double teta1=-angle+Math.PI*3.0/2.0; P1.polar_input(R1,teta1); P2.polar_input(R2,teta1); polygon.moveTo((xi+(int)P1.xi()),(yi-(int)P1.xj())); polygon.lineTo((xi+(int)P2.xi()),(yi-(int)P2.xj())); } g.draw(polygon); } //drawAkrep metodu sonu public void drawAkrep(Graphics g2,int xi,int yi,int Ri) { double angle=(x-minx)/(maxx-minx)*(maxteta-minteta)+minteta; Graphics2D g=(Graphics2D)g2; double R=Ri; double r=Ri*0.3; polar P1=new polar(); polar P2=new polar(); polar P3=new polar(); int x[]=new int[5]; int y[]=new int[5]; GeneralPath polygon=new GeneralPath(GeneralPath.WIND_EVEN_ODD, x.length); x[0]=xi; y[0]=yi; x[4]=xi; y[4]=yi; double teta=Math.PI/10.0; double teta1=-angle+Math.PI*3.0/2.0; double teta2=teta1+teta/2.0; double teta3=teta1-teta/2+Math.PI*2; P1.polar_input(R,teta1); P2.polar_input(r,teta2); P3.polar_input(r,teta3); x[1]=xi+(int)P3.xi(); y[1]=yi-(int)P3.xj(); x[2]=xi+(int)P1.xi(); y[2]=yi-(int)P1.xj(); x[3]=xi+(int)P2.xi(); y[3]=yi-(int)P2.xj(); for(int i=0;i<5;i++) { if(i==0) { polygon.moveTo(x[0],y[0]); } else

Page 24: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

{ polygon.lineTo(x[i],y[i]); } } g.draw(polygon); } //drawAkrep metodu sonu public void fillAkrep(Graphics g2,int xi,int yi,int Ri) { double angle=(x-minx)/(maxx-minx)*(maxteta-minteta)+minteta; Graphics2D g=(Graphics2D)g2; double R=Ri; double r=Ri*0.3; polar P1=new polar(); polar P2=new polar(); polar P3=new polar(); int x[]=new int[5]; int y[]=new int[5]; GeneralPath polygon=new GeneralPath(GeneralPath.WIND_EVEN_ODD, x.length); x[0]=xi; y[0]=yi; x[4]=xi; y[4]=yi; double teta=Math.PI/10.0; double teta1=-angle+Math.PI*3.0/2.0; double teta2=teta1+teta/2.0; double teta3=teta1-teta/2+Math.PI*2; P1.polar_input(R,teta1); P2.polar_input(r,teta2); P3.polar_input(r,teta3); x[1]=xi+(int)P3.xi(); y[1]=yi-(int)P3.xj(); x[2]=xi+(int)P1.xi(); y[2]=yi-(int)P1.xj(); x[3]=xi+(int)P2.xi(); y[3]=yi-(int)P2.xj(); for(int i=0;i<5;i++) { if(i==0) { polygon.moveTo(x[0],y[0]); } else { polygon.lineTo(x[i],y[i]); } } g.fill(polygon); } //drawAkrep metodu sonu public static void drawDaire(Graphics g2, int xi,int yi, int R) { Graphics2D g=(Graphics2D)g2; g.draw(new Ellipse2D.Double((xi-R),(yi-R),2*R,2*R)); } public static void fillDaire(Graphics g2, int xi,int yi, int R) { Graphics2D g=(Graphics2D)g2; g.fill(new Ellipse2D.Double((xi-R),(yi-R),2*R,2*R)); } public TexturePaint getImageTexture(String imageFile,int xi,int yi, int R) { URL url = getClass().getResource(imageFile); Image img = getToolkit().getImage(url); try { MediaTracker tracker = new MediaTracker(this); tracker.addImage(img, 0);

Page 25: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

tracker.waitForID(0); } catch (Exception e) {} int width = 2*R; int height = 2*R; BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics g = buffImg.getGraphics(); g.drawImage(img,-30,-20, this); Rectangle2D rect = new Rectangle((xi-R),(yi-R), width, height); return new TexturePaint(buffImg, rect); } public void paintComponent(Graphics g) { final Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); try{ final BasicStroke s1 = new BasicStroke(1); final BasicStroke s2 = new BasicStroke (2); final BasicStroke s10 = new BasicStroke (10); FontMetrics metrics=g.getFontMetrics(); //System.out.println(metrics.getAscent()); //System.out.println(metrics.getDescent()); //System.out.println(metrics.getHeight()); int xi=150; int yi=120; int R1=85; int R2=80; int R3=75; g2.setColor(Color.yellow); TexturePaint tp = getImageTexture("arduino.jpg",xi,yi,R1); g2.setPaint(tp); star.fillDaire(g2,xi,yi,R1); g2.setColor(Color.red); fillAkrep(g2,xi,yi,R2); g2.setColor(Color.black); g2.setStroke (s2); g2.setPaint (Color.black); drawDaire(g2,xi,yi,R1); drawDaire(g2,xi,yi,R2); drawDaire(g2,xi,yi,5); drawAkrep(g2,xi,yi,R2); drawLine(g2,xi,yi,R1,R2,n); g2.setStroke (s1); drawDaire(g2,xi,yi,R3); drawLine(g2,xi,yi,R2,R3,n1); g2.setStroke (s2); drawLabel(g2,xi,yi,R1+10); drawPlotLabel(g2,name,0,yi+20,R1); drawPlotLabel(g2,""+x+" "+unit,0,yi+40,R1); } catch(NullPointerException e){} } }

Dials birçok göstergeyi bir arada göstermeye yaramaktadır.

//==========================================================// //JAVA-ARDUINO veri sistem entagrasyonu // // dials // // M. Turhan Coban // //==========================================================// import java.io.*; import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.util.*;

Page 26: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

import javax.swing.*; import javax.swing.table.*; import java.awt.*; import java.awt.event.*; import javax.swing.event.*; import java.awt.geom.*; import java.awt.Graphics; public class dials extends JPanel { analogDialP tp[]; JPanel jp; JPanel jp1; JTextArea output; public dials(String s1,String unit,String s[],double td[],double tmin,double tmax,double teta1_rad,double teta2_rad) { int n=td.length; System.out.println("n="+n); tp=new analogDialP[n]; jp=new JPanel(); jp1=new JPanel(); jp.setLayout(new GridLayout(2,3)); for(int i=0;i<n;i++) { tp[i]=new analogDialP(s[i],unit,tmin,tmax,teta1_rad,teta2_rad,10,50);tp[i].setx(td[i]);jp.add(tp[i]);} String ss=""; ss+="Monitor3\n"; Color c=this.getBackground(); output=new JTextArea(ss); output.setBackground(c); this.setLayout(new BorderLayout()); add(output,BorderLayout.NORTH); add(jp,BorderLayout.CENTER); } public void setData(double td[]) { int n=td.length; for(int i=0;i<n;i++) {tp[i].setx(td[i]);} repaint(); } public static void main(String arg[]) { double n1=Math.PI/2; double n2=3.0*n1; String st[]={" Voltage V "}; double td[]={0}; double tmin=0; double tmax=5.0; double tetamax=100; double teta1_rad=Math.PI/4; double teta2_rad=3.0*Math.PI/2.0+teta1_rad; dials d1=new dials("Arduino analog read","Voltage V",st,td,tmin,tmax,teta1_rad,teta2_rad); FrameGraphic.plot("Voltmetre ",d1); } }

Bir sonraki örnekte veri aynı arduino programından okunacak, fakat çıktı olarak veri tabanına da yazılacak

ve aynı zamanda grafik ekranında gösterilecektir. Bunun için veri tabanı ve grafik entegrasyonu

gerekmektedir. Bu programlar ayrı sınıflar halinde hazırlanmış ve veri okuma monitör programı içinde

kullanılmışlardır.

import java.io.*; import java.util.*; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import java.io.FileDescriptor; import java.io.IOException;

Page 27: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

import java.io.InputStream; import java.io.OutputStream; import java.awt.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Monitor4 implements Runnable { String s2="[\\x00-\\x20]*[+-]?(((((\\p{Digit}+)(\\.)?((\\p{Digit}+)?)([eE][+-]?(\\p{Digit}+))?)|(\\.((\\p{Digit}+))([eE][+-]?(\\p{Digit}+))?)|(((0[xX](\\p{XDigit}+)(\\.)?)|(0[xX](\\p{XDigit}+)?(\\.)(\\p{XDigit}+)))[pP][+-]?(\\p{Digit}+)))[fFdD]?))[\\x00-\\x20]*"; private static final long serialVersionUID = 8257386587L; public Thread readThread; // zaman içinde çalışma değişkeni public CommPortIdentifier portId; // seri bağlantı kanalı numarası public SerialPort serialPort; // seri kanal public OutputStream outputStream; // çıktı kanalı public InputStream inputStream; // girdi kanalı public int sleep1; // readThread bekleme zamanı milisaniye public tplot2D d3; public dials d1; double T1,T1old; double ymin,ymax; //kontrol parametresi public String veritabani; public String veritablosu[]; public Connection connection = null; public Statement statement; String zamanold,zamannew; SQLite_Table tt; public String veri[][]; // String formunda ç?kt? de?i?kenleri public Monitor4(String s,String veritabanii,String veritablosui[],double ymini,double ymaxi) { ymin=ymini; ymax=ymaxi; veritabani=veritabanii; veritablosu=veritablosui; portId=portId(s); System.out.println("portID is read"); try { serialPort = (SerialPort) portId.open(s, 2000); } catch ( gnu.io.PortInUseException e) {} try { outputStream = serialPort.getOutputStream(); } catch (IOException e) {} try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch ( gnu.io.UnsupportedCommOperationException e) {} T1old=0; dials(); listTable(0); timeplot(); } //seri ileti?im kanal? aç?lmas? public CommPortIdentifier portId(String s) { portId = PortChooser.select_port(null); try { serialPort = (SerialPort) portId.open(s, 2000); } catch ( gnu.io.PortInUseException e) {} return portId; } public void start() {readThread = new Thread(this); readThread.start(); } public void run()

Page 28: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

{ int ix=0; int n=1; int k=0; while(true) { try{ k++; Thread.sleep(100); try { inputStream = serialPort.getInputStream(); byte[] readBuffer = new byte[30]; long[] readBuffer1 = new long[30]; byte numBytes = (byte)inputStream.read(readBuffer); //System.out.println("numBytes="+numBytes); //String s= new String(readBuffer, "US-ASCII"); String s= new String(readBuffer); int i=0; for(i=0;i<numBytes;i++) { readBuffer1[i]=readBuffer[i]&0xFF; //readBuffer1[i]=readBuffer[i]; //System.out.print("i = "+i+"*"); //System.out.printf("%x ",readBuffer[i]); } if(s.matches(s2)) { T1=Double.parseDouble(s);} else {T1=T1old;} double T2[]={T1}; d1.setData(T2); T1old=T1; veri=new String[n][T2.length+4]; veri[ix][0]=""+k; String zaman[]=zaman(); veri[ix][1]=zaman[0]; veri[ix][2]=zaman[1]; double tt=zaman1(zaman[1]); zamannew=zaman[1]; int cihaz_adresi[]={0}; veri[ix][3]=""+cihaz_adresi[ix]; veri[ix][4]=""+T2[0]; //System.out.print("k= "+k+" "+zaman[0]+" "+zaman[1]+"cihaz = "+cihaz_adresi[ix]+" "); //for(int ii=0;i<T2.length;ii++) // {System.out.print(" T["+ix+"]["+ii+"] ="+T2[ii]+" ");veri[ix][ii+4]=""+T2[ii];} d1.setData(T2); String ss1=""; ss1+="insert into "+veritablosu[ix]+" values("; int ii=0; for(ii=0;ii<veri[ix].length-1;ii++) {ss1+="'"+veri[ix][ii]+"',";} ss1+="'"+veri[ix][ii]+"');"; System.out.println(ss1); try{ writeTable(ss1); } catch(ClassNotFoundException e4) {System.out.println("Class not found");} zamanold=zamannew; d3.setXY(tt,T2,ymin,ymax); //System.out.print("T1="+T1); } catch (IOException e) {} } catch (InterruptedException e) {System.out.println("InterruptedException 1");} } } public double zaman1(String ss) { StringTokenizer token=new StringTokenizer(ss,":"); int m=token.countTokens(); String s1[]=new String[m]; int j=0; while(token.hasMoreTokens()) { s1[j]=token.nextToken();j++;} double tt=Double.parseDouble(s1[0])*3600+Double.parseDouble(s1[1])*60+Double.parseDouble(s1[2]); return tt;

Page 29: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

} public String[] zaman() { GregorianCalendar calendar; Date date=new Date(); String[] ids = TimeZone.getAvailableIDs(+3 * 60 * 60 * 1000); SimpleTimeZone pdt = new SimpleTimeZone(+3 * 60 * 60 * 1000, ids[0]); calendar=new GregorianCalendar(pdt); calendar.setTime(date); String dt=""+calendar.get(Calendar.DATE); if (dt.length()==1) dt="0"+dt; String mo=""+(calendar.get(Calendar.MONTH)+1); if (mo.length()==1) mo="0"+mo; String Sdate=dt+"/"+mo+"/"+calendar.get(Calendar.YEAR); String ho=""+(calendar.get(Calendar.AM_PM)*12+calendar.get(Calendar.HOUR)); if (ho.length()==1) ho="0"+ho; String min=""+calendar.get(Calendar.MINUTE); if (min.length()==1) min="0"+min; String sec=""+calendar.get(Calendar.SECOND); if (sec.length()==1) sec="0"+sec; String Stime=ho+":"+min+":"+sec+" "; String z[]={Sdate,Stime}; return z; } //Database programs public void createTable(int ix) throws ClassNotFoundException { // sqlite-JDBC sürücüsünü yükle Class.forName("org.sqlite.JDBC"); Connection connection = null; int kanalsayisi=1; //just one channel reading try { // veritaban? ile ba?lant? kur. connection = DriverManager.getConnection("jdbc:sqlite:"+veritabani+".db"); statement = connection.createStatement(); statement.setQueryTimeout(30); // set timeout to 30 sec. statement.executeUpdate("drop table if exists "+veritablosu[ix]+";"); String ss="create table "+veritablosu[ix]+"(no String,tarih String,saat String,kanal String,"; int i; for(i=0;i<kanalsayisi-1;i++) ss+="ch"+i+" String, "; ss+="ch"+i+" String);"; statement.executeUpdate(ss); System.out.println("veritablosu = "+veritablosu[ix]); String ss1="select * from "+veritablosu[ix]; //tt.setQuerry(ss1); } catch(SQLException e) { // if the error message is "out of memory", // it probably means no database file is found System.err.println(e.getMessage()); } finally { try { if(connection != null) connection.close(); } catch(SQLException e) { // connection close failed. System.err.println(e); } } } public void writeTable(String querry) throws ClassNotFoundException { // sqlite-JDBC sürücüsünü yükle Class.forName("org.sqlite.JDBC"); Connection connection = null;

Page 30: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

try { // veritabanı ile bağlantı kur. connection = DriverManager.getConnection("jdbc:sqlite:"+veritabani+".db"); Statement statement = connection.createStatement(); statement.setQueryTimeout(30); // set timeout to 30 sec. statement.executeUpdate(querry); } catch(SQLException e) { // if the error message is "out of memory", // it probably means no database file is found System.err.println(e.getMessage()); } finally { try { if(connection != null) connection.close(); } catch(SQLException e) { // connection close failed. System.err.println(e); } } } public void listTable(int ix) { try { tt=new SQLite_Table(veritablosu[ix]);tt.setVisible(true); } catch(ClassNotFoundException e) { // "out of memory" mesajı veri tabanının bulunamadığı anlamına gelir System.err.println(e.getMessage()); }} public void dials() { double n1=Math.PI/2; double n2=3.0*n1; String st[]={" Voltage V "}; double td[]={0}; double tmin=0; double tmax=5.0; double tetamax=100; double teta1_rad=Math.PI/4; double teta2_rad=3.0*Math.PI/2.0+teta1_rad; d1=new dials("Arduino analog read","Voltage V",st,td,tmin,tmax,teta1_rad,teta2_rad); FrameGraphic.plot("ARDUINO Voltmetre ",d1); } //zamana bağlı grafik public void timeplot() { int nyi=1; int nquei=30; String pl="ARDUINO Voltage plot"; String xl="time second"; String yl="Voltage V"; int xnt=10; int ynt=10; int xgr=1; int ygr=1; int ipti[]={5}; Color ibg=Color.cyan; Color ifg[]={Color.black,Color.blue,Color.red,Color.black,Color.green,Color.cyan,Color.yellow,Color.black}; d3=new tplot2D(nyi,nquei,pl,xl,yl,xnt,ynt,xgr,ygr,ipti,ibg,ifg); FrameGraphic.plot("Zaman Grafiği ",d3,1300,800); } public static void main(String arg[]) throws ClassNotFoundException { String veritabani="VT"; String veritablosu[]={"VT1"}; double ymin=0.0; double ymax=5.0;

Page 31: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Monitor4 m=new Monitor4("ARDUNIO",veritabani,veritablosu,ymin,ymax); m.createTable(0); m.start(); } }

//=======================================================// // veritabanından veriyi okuyup basit bir grafik çıktısı // // olarak gösteren bir program // // tplot2D // // M. Turhan Coban // //=======================================================// import java.io.*; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import java.awt.print.PrinterJob; import java.util.*; import java.awt.print.*; public class tplot2D extends JPanel { private static final long serialVersionUID = 832595695263L; public Graphics2D g; final static Color bg = Color.white; final static Color fg = Color.black; final static Color red = Color.red; final static Color white = Color.white; final static BasicStroke stroke = new BasicStroke(1.0f); final static BasicStroke boldStroke = new BasicStroke(2.0f); PlotShapesSW ps; public double xx[],yy[][]; public double xmin,xmax,ymin,ymax; int ny; //number of data in the plot window int nque; ArrayDeque<Double> timeque; ArrayDeque<Double>[] xque; String label; String xlabel; String ylabel; int xntic; int yntic; int xgridon; int ygridon; int nplot[]; Color fgcolor[]; Color bgColor; // ny : number of data set // label : plot label // xlabel : xaxis label // ylabel : y axis label // xntic : number of x axis tic // yntic : number of y axis tic // nplot : plot line type public tplot2D(int nyi,int nquei, String pl,String xl,String yl,int xnt,int ynt,int xgr,int ygr,int ipt[],Color bg,Color fg[]) { ny=nyi; nque=nquei; label=pl; xlabel=xl; ylabel=yl; xntic=xnt; yntic=ynt; xgridon=xgr; ygridon=ygr; bgColor=bg; fgcolor=new Color[ny];

Page 32: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

nplot=new int[ny]; xx=new double[nque]; yy=new double[ny][nque]; xmin=9.99e50; xmax=-9.99e50; ymin=9.99e50; ymax=-9.99e50; for(int i=0;i<ny;i++) {fgcolor[i]=fg[i]; nplot[i]=ipt[i]; } setBackground(bgColor); setForeground(Color.black); timeque=new ArrayDeque<Double>(nque); xque=new ArrayDeque[ny]; for(int i=0;i<ny;i++) {xque[i]=new ArrayDeque<Double>(nque);} } public void setXY(double itime,double iyy[]) { xmin=9.99e50; xmax=-9.99e50; ymin=9.99e50; ymax=-9.99e50; timeque.addLast(new Double(itime)); if(timeque.size()>nque) timeque.removeFirst(); for(int i=0;i<ny;i++) { xque[i].addLast(new Double(iyy[i])); if(xque[i].size()>nque) xque[i].removeFirst(); } Object[] a=timeque.toArray(); Double da; for(int j=0;j<a.length;j++) {da=(Double)a[j];xx[j]=da.doubleValue(); if(xx[j]<xmin) xmin=xx[j]; if(xx[j]>xmax) xmax=xx[j]; } Object[] b; for(int i=0;i<ny;i++) { b=xque[i].toArray(); Double db; for(int j=0;j<b.length;j++) {db=(Double)b[j];yy[i][j]=db.doubleValue(); if(yy[i][j]<ymin) ymin=yy[i][j]; if(yy[i][j]>ymax) ymax=yy[i][j]; if(ymin==ymax) {ymin=yy[i][j]-0.1;ymax=yy[i][j]+0.1;} } }} public void setXY(double itime,double iyy[],double ymini,double ymaxi) { xmin=9.99e50; xmax=-9.99e50; ymin=ymini; ymax=ymaxi; timeque.addLast(new Double(itime)); if(timeque.size()>nque) timeque.removeFirst(); for(int i=0;i<ny;i++) { xque[i].addLast(new Double(iyy[i])); if(xque[i].size()>nque) xque[i].removeFirst(); } Object[] a=timeque.toArray(); Double da; for(int j=0;j<a.length;j++) {da=(Double)a[j];xx[j]=da.doubleValue(); if(xx[j]<xmin) xmin=xx[j];

Page 33: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

if(xx[j]>xmax) xmax=xx[j]; } Object[] b; for(int i=0;i<ny;i++) { b=xque[i].toArray(); Double db; for(int j=0;j<b.length;j++) {db=(Double)b[j]; yy[i][j]=db.doubleValue(); if(yy[i][j]<ymin) yy[i][j]=ymin; if(yy[i][j]>ymax) yy[i][j]=ymax; //if(yy[i][j]<ymin) ymin=yy[i][j]; //if(yy[i][j]>ymax) ymax=yy[i][j]; //if(ymin==ymax) {ymin=yy[i][j]-0.1;ymax=yy[i][j]+0.1;} } }} public void drawShapes(Graphics2D g2) { g=g2; //draw Plot Dimension d=getSize(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int gridWidth = d.width; int gridHeight = d.height; int rowspacing=(int)(d.width/100.0); int columnspacing=(int)(d.height/50.0); int rectWidth=gridWidth-columnspacing; int rectHeight=gridHeight-rowspacing; int xabsmin=(int)(0.25*rectWidth); int yabsmin=(int)(0.2*rectHeight); int abswidth=(int)(0.65*rectWidth); int absheight=(int)(0.7*rectHeight); int xlog=0; int ylog=0; char ch='+'; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setStroke(stroke); //g2.setPaint(fgcolor); g2.drawRect(xabsmin,yabsmin,abswidth,absheight); ps=new PlotShapesSW(g2,xabsmin,yabsmin, absheight,abswidth,xmin,xmax,ymin,ymax,xlog,ylog); if(xgridon!=0) ps.drawXGrid(xntic); if(ygridon!=0) ps.drawYGrid(yntic); int i,j; for(i=0;i<ny;i++) { // Select plot colors g2.setPaint(fgcolor[i]); ps.drawPlotLine(nplot[i],xx,yy[i]); }//end of for(i=0 g2.setPaint(fg); ps.drawXTic(xntic,(ymax-ymin)/80.0,0); ps.drawYTic(yntic,(xmax-xmin)/80.0,0); ps.drawXString(xntic); //ps.drawXNumbers(xntic); ps.drawYNumbers(yntic); ps.drawLabel(label); ps.drawXLabel(xlabel); ps.drawYLabel(ylabel); } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; drawShapes(g2); repaint(); }

Page 34: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

}

PlotShapesSW sınıfı grafik çizmek için kullanılan bir alt sınıftır.

/====================================================== // Numerical Analysis package in java // PlotShapes class // This class convert graphic draw methods to // plot coordinates and gives additional plotting methods // Dr. Turhan Coban // ===================================================== import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import java.awt.font.*; import java.io.*; import java.util.Locale; public class PlotShapesSW { public Graphics2D g; int xabsmin,yabsmin; int absheight,abswidth; double xmin,xmax,ymin,ymax; public int xlog,ylog; double xminmaxlog,yminmaxlog; Font f; final static float dash1[] = {10.0f}; final static float dash2[] = {10.0f,3.0f,3.0f}; final static float dash3[] = {10.0f,3.0f,3.0f}; final static float dash4[] = {5.0f,5.0f,5.0f}; final static BasicStroke d1 = new BasicStroke(1.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 3.0f, dash1, 2.0f); final static BasicStroke d2 = new BasicStroke(1.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 3.0f, dash2, 2.0f); final static BasicStroke d3 = new BasicStroke(1.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 3.0f, dash3, 2.0f); final static BasicStroke d4 = new BasicStroke(1.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 3.0f, dash4, 2.0f); final static BasicStroke d5 = new BasicStroke(2.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 3.0f, dash1, 2.0f); final static BasicStroke d6 = new BasicStroke(2.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 3.0f, dash2, 2.0f); final static BasicStroke d7 = new BasicStroke(2.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 3.0f, dash3, 2.0f); final static BasicStroke d8 = new BasicStroke(2.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 3.0f, dash4, 2.0f); public PlotShapesSW(Graphics2D gi,int xabsmini ,int yabsmini, int absheighti,int abswidthi, double xmini,double xmaxi, double ymini,double ymaxi, int xlogi,int ylogi) { // xabsmin : absolute(pixel) starting point x axis // yabsmin : absolute(pixel) starting point y axis // absheight : absolute(pixel) height of plotting window // abswidth : absolute(pixel) width of plotting window // xmin : minimum x value (real number)

Page 35: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

// xmax : maximum x value (real number) // ymin : minimum y value (real number) // ymax : maximum y value (real number) // g : graphic object that actual drawing is done through g=gi; //Font fonts[]=GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts(); //f=fonts[2].deriveFont(Font.BOLD,14);//You can change Fony from here //g.setFont(f); xabsmin=xabsmini; yabsmin=yabsmini; absheight=absheighti; abswidth=abswidthi; xmin=xmini; xmax=xmaxi; ymin=ymini; ymax=ymaxi; xlog=xlogi; ylog=ylogi; if(xlog!=0) {xminmaxlog=Math.log10(xmax-xmin+10.0)-1.0;} if(ylog!=0) {yminmaxlog=Math.log10(ymax-ymin+10.0)-1.0;} } public void drawLine(int plottype,double x1,double y1,double x2,double y2) { // draw a line from (x1,y1) to (x2,y2) int xx1,xx2,yy1,yy2; if(xlog!=0) { xx1=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth)); xx2=(int)(xabsmin+((Math.log10(x2-xmin+10.0)-1.0)/xminmaxlog*abswidth)); } else { xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth); xx2=(int)(xabsmin+(x2-xmin)/(xmax-xmin)*abswidth); } if(ylog!=0) { yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight)); yy2=(int)(yabsmin+absheight-((Math.log10(y2-ymin+10.0)-1.0)/yminmaxlog*absheight)); } else { yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight); yy2=(int)(yabsmin+absheight-(y2-ymin)/(ymax-ymin)*absheight); } g.draw(new Line2D.Double( xx1,yy1,xx2,yy2)); } //end of drawLine public void drawPolyline(int plottype,double x1[],double y1[]) { // draw a line from (x1,y1) to (x2,y2) int points=y1.length; int xPoints[]=new int[points]; int yPoints[]=new int[points]; int xx1,yy1; for(int i=0;i<points;i++) { if(xlog!=0) {xx1=(int)(xabsmin+(Math.log10(x1[i]-xmin+10.0)-1.0)/xminmaxlog*abswidth);} else {xx1=(int)(xabsmin+(x1[i]-xmin)/(xmax-xmin)*abswidth);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-(Math.log10(y1[i]-ymin+10.0)-1.0)/yminmaxlog*absheight);} else {yy1=(int)(yabsmin+absheight-(y1[i]-ymin)/(ymax-ymin)*absheight);} xPoints[i]=xx1; yPoints[i]=yy1; } g.drawPolyline(xPoints,yPoints,points);

Page 36: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

} //end of drawPolyLine public void drawChar(char ch,double x1,double y1) { // draws a single character at (x1,y1) char ch1[]=new char[1]; ch1[0]=ch; int h=g.getFontMetrics().getHeight(); int w=h-2; int xx1,yy1; if(xlog!=0) {xx1=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth-abswidth/200.0));} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth);}//-abswidth/200.0);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight))+h/2;} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight);}//+h/2;} g.drawChars(ch1,0,1,xx1,yy1); } //end of PlotShapes.drawChar public void drawChars(char ch[],int firstspace,int numberofchars, double x1,double y1) { int h=g.getFontMetrics().getHeight(); int w=h-2; int xx1,yy1; if(xlog!=0) {xx1=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth-abswidth/80.0));} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth);}//-abswidth/80.0);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight));} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight);} g.drawChars(ch,firstspace,numberofchars,xx1,yy1); } //end of PlotShapes.drawChars public void drawString(String s,double x1,double y1) { //draws a String at (x1,y1) int h=g.getFontMetrics().getHeight(); int w=h-2; int xx1,yy1; if(xlog!=0) {xx1=(int)(xabsmin+((Math.log10(x1-xmin+1.0)-1.0)/xminmaxlog*abswidth));} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight));} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight);} g.drawString(s,xx1,yy1); } //end of PlotShapes.drawString public void drawString(String s[],double x1,double y1,double dy) { // draws a serial of Strings starting at (x1,y1) // increasing with dy each time int h=g.getFontMetrics().getHeight(); int w=h-2; double xx1,yy1; int n=s.length; xx1=x1; for(int i=0;i<n;i++) { yy1=y1-i*dy; if(s[i]!="") drawString(s[i],xx1,yy1); else break; }

Page 37: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

} //end of PlotShapes.drawStrings public void drawString(String s[],int plottypes[],double x1,double y1,double dx,double dy) { // draws a serial of plot characters and then Strings starting at (x1,y1) // increasing with dy each time double x[]=new double[2]; double y[]=new double[2]; int h=g.getFontMetrics().getHeight(); int w=h-2; int xx1,yy1; int n=s.length; double xx2=x1+2*dx; double y2=y[0]; double yy2=0; for(int i=0;i<n;i++) { if(s[i]!="") { x[0]=x1; x[1]=x1+dx; y[0]=y1-i*dy; y[1]=y1-i*dy; yy2=y[0]-(xmax-xmin)/50.0; //drawPlotLine(int plottypei,double xi[],double yi[]) drawPlotLine(plottypes[i],x,y); drawString(s[i],xx2,yy2); } else break; } } //end of PlotShapes.drawStrings public void drawRect(double x1,double y1,int rectwidth,int rectheight) { // draw a rectangle starting at (x1,y1) // with dimensions of (rectwidth,rectheight) int xx1,yy1; if(xlog!=0) {xx1=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth-rectwidth/2));} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth-rectwidth/2);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight-rectheight/2));} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight-rectheight/2);} g.draw(new Rectangle2D.Double(xx1,yy1,rectwidth,rectheight)); }//end of drawRect public void drawBar(double x1,double y1) { // draw a rectangle starting at (x1,y1) // with dimensions of (rectwidth,rectheight) int xx1,yy1; double barheight; double barwidth=abswidth/300; if(xlog!=0) {xx1=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth-barwidth/2.0));} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth-barwidth/2.0); } if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight)); barheight =(int)((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight); } else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight); barheight =(int)((y1-ymin)/(ymax-ymin)*absheight);} g.draw(new Rectangle2D.Double(xx1,yy1,barwidth,barheight)); }//end of drawBar

Page 38: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

public void fillBar(double x1,double y1) { int xx1,yy1; double barheight; double barwidth=abswidth/300; if(xlog!=0) {xx1=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth-barwidth/2.0));} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth-barwidth/2.0); } if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight)); barheight =(int)((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight); } else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight); barheight =(int)((y1-ymin)/(ymax-ymin)*absheight);} g.fill(new Rectangle2D.Double(xx1,yy1,barwidth,barheight)); }//end of fillBar public void fillRect(double x1,double y1,int rectwidth,int rectheight) { // draw a rectangle starting at (x1,y1) // with dimensions of (rectwidth,rectheight) // draw a rectangle starting at (x1,y1) // with dimensions of (rectwidth,rectheight) int xx1,yy1; if(xlog!=0) {xx1=(int)(xabsmin+(Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth-rectwidth/2);} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth-rectwidth/2);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight-rectheight/2));} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight-rectheight/2);} g.fill(new Rectangle2D.Double(xx1,yy1,rectwidth,rectheight)); } public void drawEllipse(double x1,double y1,int width,int height) { // draw an oval with the centre of (x1,y1) // with dimension of (width,height) int xx1,yy1; if(xlog!=0) {xx1=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth-width/2));} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth-width/2);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight-height/2));} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight-height/2);} g.draw(new Ellipse2D.Double(xx1,yy1,width,height)); }//end of drawRect public void fillEllipse(double x1,double y1,int width,int height) { // draw an oval with the centre of (x1,y1) // with dimension of (width,height) int xx1,yy1; if(xlog!=0) {xx1=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth-width/2));} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth-width/2);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight-height/2));} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight-height/2);} g.fill(new Ellipse2D.Double(xx1,yy1,width,height)); }//end of drawRect public void drawPolygon(double x1,double y1,int radius,int side)

Page 39: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

{ //draw a polygon of n sides n=3(trinagle),n=4(dimond).... double Pi=Math.PI; int xvalues[]=new int[side+1]; int yvalues[]=new int[side+1]; GeneralPath polygon=new GeneralPath(GeneralPath.WIND_EVEN_ODD, xvalues.length); double angle_increase; double angle; angle_increase=2.0*Pi/side; angle=Pi/2.0; for(int i=0;i<=side;i++) { if(xlog!=0) {xvalues[i]=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth+radius*Math.cos(angle)));} else {xvalues[i]=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth+radius*Math.cos(angle));} if(ylog!=0) {yvalues[i]=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight-radius*Math.sin(angle)));} else {yvalues[i]=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight-radius*Math.sin(angle));} angle+=angle_increase; if(i==0) { xvalues[side]=xvalues[i];yvalues[side]=yvalues[i]; polygon.moveTo(xvalues[0],yvalues[0]); } else { polygon.lineTo(xvalues[i],yvalues[i]); } } g.draw(polygon); }//end of drawPolygon public void fillPolygon(double x1,double y1,int radius,int side) { //draw a polygon of n sides n=3(trinagle),n=4(dimond).... //draw a polygon of n sides n=3(trinagle),n=4(dimond).... double Pi=Math.PI; int xvalues[]=new int[side+1]; int yvalues[]=new int[side+1]; GeneralPath polygon=new GeneralPath(GeneralPath.WIND_EVEN_ODD, xvalues.length); double angle_increase; double angle; angle_increase=2.0*Pi/side; angle=Pi/2.0; for(int i=0;i<=side;i++) { if(xlog!=0) {xvalues[i]=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth+radius*Math.cos(angle)));} else {xvalues[i]=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth+radius*Math.cos(angle));} if(ylog!=0) {yvalues[i]=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight-radius*Math.sin(angle)));} else {yvalues[i]=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight-radius*Math.sin(angle));} angle+=angle_increase; if(i==0) { xvalues[side]=xvalues[i];yvalues[side]=yvalues[i]; polygon.moveTo(xvalues[0],yvalues[0]); } else { polygon.lineTo(xvalues[i],yvalues[i]); } } g.fill(polygon); }//end of fillPolygon

Page 40: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

public void drawStar(double x1,double y1,int radius,int side) { double teta=2.0*Math.PI/side; double R=radius; double r=radius*0.35; int xvalues[]=new int[2*side+2]; int yvalues[]=new int[2*side+2]; GeneralPath polygon=new GeneralPath(GeneralPath.WIND_EVEN_ODD, xvalues.length); double teta1,teta2; for(int i=0;i<=side;i++) { teta1=teta*i+Math.PI/2.0; teta2=teta/2.0+teta1; if(xlog!=0) { xvalues[2*i]= (int)(Math.floor(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/ xminmaxlog*abswidth+R*Math.cos(teta1)))); xvalues[2*i+1]= (int)(Math.floor(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/ xminmaxlog*abswidth+r*Math.cos(teta2)))); } else { xvalues[2*i]= (int)(Math.floor(xabsmin+(x1-xmin)/ (xmax-xmin)*abswidth+R*Math.cos(teta1))); xvalues[2*i+1]= (int)(Math.floor(xabsmin+(x1-xmin)/ (xmax-xmin)*abswidth+r*Math.cos(teta2))); } if(ylog!=0) { yvalues[2*i]= (int)(Math.floor(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/ yminmaxlog*absheight-R*Math.sin(teta1)))); yvalues[2*i+1]= (int)(Math.floor(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/ yminmaxlog*absheight-r*Math.sin(teta2)))); } else { yvalues[2*i]= (int)(Math.floor(yabsmin+absheight-(y1-ymin)/ (ymax-ymin)*absheight-R*Math.sin(teta1))); yvalues[2*i+1]= (int)(Math.floor(yabsmin+absheight-(y1-ymin)/ (ymax-ymin)*absheight-r*Math.sin(teta2))); } if(i==side) { xvalues[2*i]=xvalues[0]; yvalues[2*i]=yvalues[0]; } } for(int i=0;i<=2*side;i++) { if(i==0) { polygon.moveTo(xvalues[0],yvalues[0]); } else { polygon.lineTo(xvalues[i],yvalues[i]); } } g.draw(polygon); }//end of drawStar public void fillStar(double x1,double y1,int radius,int side) { double teta=2.0*Math.PI/side; double R=radius; double r=radius*0.35;

Page 41: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

int xvalues[]=new int[2*side+2]; int yvalues[]=new int[2*side+2]; GeneralPath polygon=new GeneralPath(GeneralPath.WIND_EVEN_ODD, xvalues.length); double teta1,teta2; for(int i=0;i<=side;i++) { teta1=teta*i+Math.PI/2.0; teta2=teta/2.0+teta1; if(xlog!=0) { xvalues[2*i]= (int)(Math.floor(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/ xminmaxlog*abswidth+R*Math.cos(teta1)))); xvalues[2*i+1]= (int)(Math.floor(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/ xminmaxlog*abswidth+r*Math.cos(teta2)))); } else { xvalues[2*i]= (int)(Math.floor(xabsmin+(x1-xmin)/ (xmax-xmin)*abswidth+R*Math.cos(teta1))); xvalues[2*i+1]= (int)(Math.floor(xabsmin+(x1-xmin)/ (xmax-xmin)*abswidth+r*Math.cos(teta2))); } if(ylog!=0) { yvalues[2*i]= (int)(Math.floor(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/ yminmaxlog*absheight-R*Math.sin(teta1)))); yvalues[2*i+1]= (int)(Math.floor(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/ yminmaxlog*absheight-r*Math.sin(teta2)))); } else { yvalues[2*i]= (int)(Math.floor(yabsmin+absheight-(y1-ymin)/ (ymax-ymin)*absheight-R*Math.sin(teta1))); yvalues[2*i+1]= (int)(Math.floor(yabsmin+absheight-(y1-ymin)/ (ymax-ymin)*absheight-r*Math.sin(teta2))); } if(i==side) { xvalues[2*i]=xvalues[0]; yvalues[2*i]=yvalues[0]; } } for(int i=0;i<=2*side;i++) { if(i==0) { polygon.moveTo(xvalues[0],yvalues[0]); } else { polygon.lineTo(xvalues[i],yvalues[i]); } } g.fill(polygon); }//end of drawStar public void drawXTic(int ticNumber,double ticHeight,int ticSide) { //draw a series of x axis tics double dtic=(xmax-xmin)/ticNumber; double x1=xmin; double y1=ymin; double dy; dy=ticHeight; int xx1,yy1,yy2,yy3; for(int i=0;i<=ticNumber;i++) {

Page 42: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

if(xlog!=0) {xx1=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth));} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth);} yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight); yy2=(int)(yabsmin+absheight-(y1-dy-ymin)/(ymax-ymin)*absheight); yy3=(int)(yabsmin+absheight-(y1+dy-ymin)/(ymax-ymin)*absheight); if(ticSide==0) {g.draw(new Line2D.Double( xx1,yy1,xx1,yy2));} else {g.draw(new Line2D.Double( xx1,yy1,xx1,yy3));} x1=x1+dtic; } } public void drawYTic(int ticNumber,double ticWidth,int ticSide) { //draw a series of y axis tics double dtic=(ymax-ymin)/ticNumber; double x1=xmin; double y1=ymin; double dx; dx=ticWidth; double xx1,xx2,xx3,yy1; for(int i=0;i<=ticNumber;i++) {if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight));} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight);} xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth); xx2=(int)(xabsmin+(x1-dx-xmin)/(xmax-xmin)*abswidth); xx3=(int)(xabsmin+(x1+dx-xmin)/(xmax-xmin)*abswidth); if(ticSide==0) {g.draw(new Line2D.Double( xx1,yy1,xx2,yy1));} else {g.draw(new Line2D.Double( xx1,yy1,xx3,yy1));} y1=y1+dtic; } } public void drawXGrid(int ticNumber) { //draw x gridlies ||||||| double dtic=(xmax-xmin)/ticNumber; double x1=xmin; for(int i=0;i<=ticNumber;i++) { drawLine(0,x1,ymin,x1,ymax); x1=x1+dtic; } } public void drawYGrid(int ticNumber) { //draw y gridlines ===== double dtic=(ymax-ymin)/ticNumber; double y1=ymin; for(int i=0;i<=ticNumber;i++) { drawLine(0,xmin,y1,xmax,y1); y1=y1+dtic; } } public static String timetoString(double x) { int h=(int)x; String h1=""; if(h<10) h1="0"+h; else h1=""+h; double x1=(x-h)*60;

Page 43: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

int m=(int)(x1); String m1=""; if(m<10) m1="0"+m; else m1=""+m; int s=(int)((x1-m)*60); String s1; if(s<10) s1="0"+s; else s1=""+s; String s2=h1+":"+m1+":"+s1; return s2; } public void drawXString(int ticNumber) { //draw x numbers Locale en=new Locale("US"); double dtic=(xmax-xmin)/ticNumber; double x1=xmin; double y1=ymin; int xx1,yy1; String s; s=" "; for(int i=0;i<=ticNumber;i++) { if(xlog!=0) {xx1=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth-abswidth/40.0));} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth-abswidth/40.0);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight)+absheight/20.0);} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight+absheight/20.0);} s=timetoString(x1); //String.format(en,"%7.5g",x1); g.drawString(s,xx1,yy1); x1=x1+dtic; } } public void drawXNumbers(int ticNumber) { //draw x numbers Locale en=new Locale("US"); double dtic=(xmax-xmin)/ticNumber; double x1=xmin; double y1=ymin; int xx1,yy1; String s; s=" "; for(int i=0;i<=ticNumber;i++) { if(xlog!=0) {xx1=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth-abswidth/40.0));} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth-abswidth/40.0);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight)+absheight/20.0);} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight+absheight/20.0);} s=String.format(en,"%7.5g",x1); g.drawString(s,xx1,yy1); x1=x1+dtic; } } public void drawYNumbers(int ticNumber) { // draw y numbers Locale en=new Locale("US"); double dtic=(ymax-ymin)/ticNumber; double x1=xmin; double y1=ymin;

Page 44: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

int xx1,yy1; String s; s=" "; for(int i=0;i<=ticNumber;i++) { if(xlog!=0) {xx1=(int)(xabsmin+((Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth-abswidth/200.0)-abswidth/10.0);} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth/200.0-abswidth/10.0);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight));} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight)+5;} s=String.format(en,"%6.4g",y1); g.drawString(s,xx1,yy1); y1=y1+dtic; } } public void drawXLabel(String xLabel) { // draw x labels double x1=xmin+(xmax-xmin)/2.0; double y1=ymin; int xx1,yy1; if(xlog!=0) {xx1=(int)(xabsmin+(Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth);} else {xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-(Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight+abswidth/12.0);} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight+abswidth/12.0);} g.drawString(xLabel,xx1,yy1); } public void drawYLabel(String yLabel) { // draw y labels AffineTransform origTransform = g.getTransform(); double x1; double y1=ymax-(ymax-ymin)/2.0; int xx1,yy1; if(xlog!=0) {x1=xmin-2.7;xx1=(int)(xabsmin+(Math.log10(x1-xmin+10.0)-1.0)/xminmaxlog*abswidth);} else {x1=xmin-(xmax-xmin)/6.0;xx1=(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth);} if(ylog!=0) {yy1=(int)(yabsmin+absheight-((Math.log10(y1-ymin+10.0)-1.0)/yminmaxlog*absheight));} else {yy1=(int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight);} g.translate(xx1,yy1); g.rotate(3.0*Math.PI/2.0); g.drawString(yLabel,0,0); g.setTransform(origTransform); } public void drawLabel(String Label) { //draw graphic label double x1=xmin+(xmax-xmin)/2.0; double y1=ymax; g.drawString(Label,(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth), (int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight)-(int)(abswidth/40.0)); } public void drawAdditionalLabel(String s,double x1,double y1) { //draw Additional graphic label drawString(s,x1,y1);

Page 45: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

} public void drawMouseTic(double xi[],double yi[],int xn) { for(int i=0;i<xn;i++) { if((xi[i]>=xmin && xi[i]<=xmax) && (yi[i]>=ymin && yi[i]<=ymax)) { drawStar(xi[i],yi[i],(int)(abswidth/80.0),5); } } } public void drawPlotLine(int plottypei,double xi[],double yi[],char ch[]) { int i=0; int plottype[]=new int[1]; plottype[0]=plottypei; int ni=xi.length; int n[]=new int[1]; n[0]=ni; double x[][]=new double[1][ni]; double y[][]=new double[1][ni]; for(int j=0;j<ni;j++) {x[0][j]=xi[j];y[0][j]=yi[j];} drawPlotLines(i,plottype,x,y,n,ch); } public void drawPlotLine(int plottypei,double xi[],double yi[]) { char ch[]=new char[1]; ch[0]='+'; int i=0; int plottype[]=new int[1]; plottype[0]=plottypei; int ni=xi.length; int n[]=new int[1]; n[0]=ni; double x[][]=new double[1][ni]; double y[][]=new double[1][ni]; for(int j=0;j<ni;j++) {x[0][j]=xi[j];y[0][j]=yi[j];} drawPlotLines(i,plottype,x,y,n,ch); } public void drawPlotLines(int i,int plottype[],double x[][],double y[][],int n[],char ch[]) { int j; //draw lines if((plottype[i] >= 0) && (plottype[i] < 10) ) { switch ( plottype[i] ) { case 0 : g.setStroke(new BasicStroke(1.0f));break; case 1 : g.setStroke(d1);break; case 2 : g.setStroke(d2);break; case 3 : g.setStroke(d3);break; case 4 : g.setStroke(d4);break; case 5 : g.setStroke(new BasicStroke(2.0f));break; case 6 : g.setStroke(d5);break; case 7 : g.setStroke(d6);break; case 8 : g.setStroke(d7);break; case 9 : g.setStroke(d8);break; }; for(j=0;j<n[i]-1;j++) { if((x[i][j]>=xmin && x[i][j]<=xmax ) && (y[i][j]>=ymin && y[i][j]<=ymax)) { if((x[i][j+1]>=xmin && x[i][j+1]<=xmax) && (y[i][j+1]>=ymin && y[i][j+1]<=ymax)) { drawLine(0,x[i][j],y[i][j],x[i][j+1],y[i][j+1]); } else if(x[i][j+1]>xmax)

Page 46: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

{ double b=(y[i][j+1]-y[i][j])/(x[i][j+1]-x[i][j]); double a=y[i][j]-b*x[i][j]; drawLine(0,x[i][j],y[i][j],xmax,(a+b*xmax)); } else if(y[i][j+1]>ymax) { double b=(y[i][j+1]-y[i][j])/(x[i][j+1]-x[i][j]); double a=y[i][j]-b*x[i][j]; drawLine(0,x[i][j],y[i][j],(ymax-a)/b,ymax); } else if(x[i][j+1]>xmax && y[i][j+1]>ymax) { double b=(y[i][j+1]-y[i][j])/(x[i][j+1]-x[i][j]); double a=y[i][j]-b*x[i][j]; drawLine(0,x[i][j],y[i][j],(ymax-a)/b,(a+b*xmax)); } } else if((x[i][j+1]>=xmin && x[i][j+1]<=xmax ) && (y[i][j+1]>=ymin && y[i][j+1]<=ymax)) { if(x[i][j]<xmin) { double b=(y[i][j+1]-y[i][j])/(x[i][j+1]-x[i][j]); double a=y[i][j+1]-b*x[i][j+1]; drawLine(0,xmin,(a+b*xmin),x[i][j+1],y[i][j+1]); } if(y[i][j]<ymin) { double b=(y[i][j+1]-y[i][j])/(x[i][j+1]-x[i][j]); double a=y[i][j+1]-b*x[i][j+1]; drawLine(0,(ymin-a)/b,ymin,x[i][j+1],y[i][j+1]); } } }//end of for(j=0 g.setStroke(new BasicStroke(1.0f)); }//end of if(plottype //draw characters else if(plottype[i]>=10 && plottype[i]<=19) { for(j=0;j<n[i];j++) { if((x[i][j]>=xmin && x[i][j]<=xmax ) && (y[i][j]>=ymin && y[i][j]<=ymax)) { drawChar(ch[i],x[i][j],y[i][j]); } }//end of for(j=0; }//end else if(plottype[i]==10..19) //draw rectangles else if(plottype[i]==20) { for(j=0;j<n[i];j++) { if((x[i][j]>=xmin && x[i][j]<=xmax ) && (y[i][j]>=ymin && y[i][j]<=ymax)) { drawRect(x[i][j],y[i][j],abswidth/100,absheight/80); } }//end of for(j=0; }//end else if(plottype[i]==20) else if(plottype[i]==21) { for(j=0;j<n[i];j++) { if((x[i][j]>=xmin && x[i][j]<=xmax ) && (y[i][j]>=ymin && y[i][j]<=ymax)) { fillRect(x[i][j],y[i][j],abswidth/100,abswidth/80); } }//end of for(j=0; }//end else if(plottype[i]==20) //draw circle else if(plottype[i]==22) { for(j=0;j<n[i];j++) {

Page 47: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

if((x[i][j]>=xmin && x[i][j]<=xmax ) && (y[i][j]>=ymin && y[i][j]<=ymax)) { drawEllipse(x[i][j],y[i][j],abswidth/100,absheight/80); } }//end of for(j=0; }//end else if(plottype[i]==22) else if(plottype[i]==23) { for(j=0;j<n[i];j++) { if((x[i][j]>=xmin && x[i][j]<=xmax ) && (y[i][j]>=ymin && y[i][j]<=ymax)) { fillEllipse(x[i][j],y[i][j],abswidth/100,absheight/80); } }//end of for(j=0; }//end else if(plottype[i]==21) else if(plottype[i]>=24 && plottype[i]<=27) { for(j=0;j<n[i];j++) { if((x[i][j]>=xmin && x[i][j]<=xmax ) && (y[i][j]>=ymin && y[i][j]<=ymax)) { drawPolygon(x[i][j],y[i][j],abswidth/100,(plottype[i]-21)); } }//end of for(j=0; }//end else if(plottype[i]==24..27) else if(plottype[i]>=28 && plottype[i]<=31) { for(j=0;j<n[i];j++) { if((x[i][j]>=xmin && x[i][j]<=xmax ) && (y[i][j]>=ymin && y[i][j]<=ymax)) { fillPolygon(x[i][j],y[i][j],abswidth/100,(plottype[i]-25)); } }//end of for(j=0; }//end else if(plottype[i]==24..27) else if(plottype[i]>=32 && plottype[i]<=35) { for(j=0;j<n[i];j++) { if((x[i][j]>=xmin && x[i][j]<=xmax ) && (y[i][j]>=ymin && y[i][j]<=ymax)) { drawStar(x[i][j],y[i][j],abswidth/100,(plottype[i]-29)); } }//end of for(j=0; } else if(plottype[i]>=36 && plottype[i]<=39) { for(j=0;j<n[i];j++) { if((x[i][j]>=xmin && x[i][j]<=xmax ) && (y[i][j]>=ymin && y[i][j]<=ymax)) { fillStar(x[i][j],y[i][j],abswidth/100,(plottype[i]-33)); } }//end of for(j=0; } else if(plottype[i]==40) { for(j=0;j<n[i];j++) { if((x[i][j]>=xmin && x[i][j]<=xmax ) && (y[i][j]>=ymin && y[i][j]<=ymax)) { drawBar(x[i][j],y[i][j]); } }//end of for(j=0; } else if(plottype[i]==41) {

Page 48: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

for(j=0;j<n[i];j++) { if((x[i][j]>=xmin && x[i][j]<=xmax ) && (y[i][j]>=ymin && y[i][j]<=ymax)) { fillBar(x[i][j],y[i][j]); } }//end of for(j=0; } } }

Page 49: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Bir sonraki programımızda bir ışık sensörü tanımlayacağız. Bu program için aşağıdaki altyapının bulunması

gerekiyor:

1: Uno R3 mikroprosesör

2: 1x5516LDR ışık algılayıcı

3: 330 ohm direnç

4:10 kohm direnç

5: 1 LED(Light emitted diode-ışık saçan diyod)

6: bağlantı tablası

7: teller

LDR ışığa hassa bir dirençtir, dış ışık kuvvetlendiğinde LDRın direnci düşer. Burada GM5516 isimli LDR’ı

kullanacağız. Devre şeması

Page 50: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

ARDUINO programı:

void setup() { Serial.begin(9600); pinMode(2,OUTPUT); } void loop() { int sensorValue=analogRead(A3); Serial.println(sensorValue); delay(100); if(sensorValue>500) {digitalWrite(2,HIGH);}

Page 51: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

else digitalWrite(2,LOW); }

Java programı lampP is bir lamba simülasyon GUI programıdır.

import java.awt.Graphics; import java.util.*; import java.text.*; import java.util.Locale; import java.awt.image.*; import java.awt.*; import java.awt.geom.*; import java.awt.font.*; import javax.swing.*; // ============ public class lampP extends JPanel { private static final long serialVersionUID = 756764376L; Color c; public lampP(Color ci) {c=ci;} public void setPaint(Color ci) {c=ci;repaint();} public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2=(Graphics2D)g; g2.setFont(new Font("Serif",Font.BOLD,24)); g2.setColor(Color.black); this.setBackground(new Color(0,0,255)); g2.setStroke(new BasicStroke(5.0f)); Ellipse2D x1=new Ellipse2D.Double(10,10,200,200); g2.draw(x1); g2.setColor(c); Ellipse2D x2=new Ellipse2D.Double(15,15,190,190); g2.fill(x2); repaint(); } }

Monitor5RXTX lamba programını lampP kullanarak simule eder (ekranda ışık yakar)

import java.io.*; import java.util.*; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.awt.*; public class Monitor5RXTX implements Runnable { String s2="[\\x00-\\x20]*[+-]?(((((\\p{Digit}+)(\\.)?((\\p{Digit}+)?)([eE][+-]?(\\p{Digit}+))?)|(\\.((\\p{Digit}+))([eE][+-]?(\\p{Digit}+))?)|(((0[xX](\\p{XDigit}+)(\\.)?)|(0[xX](\\p{XDigit}+)?(\\.)(\\p{XDigit}+)))[pP][+-]?(\\p{Digit}+)))[fFdD]?))[\\x00-\\x20]*"; private static final long serialVersionUID = 8257386587L; public Thread readThread; // zaman içinde çal??ma de?i?keni public CommPortIdentifier portId; // seri ba?lant? kanal? numaras? public SerialPort serialPort; // seri kanal public OutputStream outputStream; // ç?kt? kanal?

Page 52: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

public InputStream inputStream; // girdi kanal? public int sleep1; // readThread bekleme zaman? milisaniye public lampP d1; double T1,T1old; //kontrol parametresi public Monitor5RXTX(String s) { portId=portId(s); System.out.println("portID is read"); try { serialPort = (SerialPort) portId.open(s, 2000); } catch (gnu.io.PortInUseException e) {} try { outputStream = serialPort.getOutputStream(); } catch (IOException e) {} try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (gnu.io.UnsupportedCommOperationException e) {} T1old=0; lamp(); } //seri ileti?im kanal? aç?lmas? public CommPortIdentifier portId(String s) { portId = PortChooser.select_port(null); try { serialPort = (SerialPort) portId.open(s, 2000); } catch (gnu.io.PortInUseException e) {} return portId; } public void start() {readThread = new Thread(this); readThread.start(); } public void run() { int k=0; while(true) { try{ k++; Thread.sleep(100); try { inputStream = serialPort.getInputStream(); byte[] readBuffer = new byte[30]; long[] readBuffer1 = new long[30]; byte numBytes = (byte)inputStream.read(readBuffer); //System.out.println("numBytes="+numBytes); //String s= new String(readBuffer, "US-ASCII"); String s= new String(readBuffer); int i=0; for(i=0;i<numBytes;i++) { readBuffer1[i]=readBuffer[i]&0xFF; //readBuffer1[i]=readBuffer[i]; //System.out.print("i = "+i+"*"); //System.out.printf("%x ",readBuffer[i]); } if(s.matches(s2)) { T1=Double.parseDouble(s);} else {T1=T1old;} double T2[]={T1}; if(T1>500) d1.setPaint(Color.yellow); else d1.setPaint(Color.blue); T1old=T1; System.out.print("sensorValue ="+T1);

Page 53: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

} catch (IOException e) {} } catch (InterruptedException e) {System.out.println("InterruptedException 1");} } } public void lamp() {d1=new lampP(Color.yellow); FrameGraphic.plot("ARDUINO ligth sensor",d1); } public static void main(String arg[]) { Monitor5RXTX m=new Monitor5RXTX("ARDUNIO"); m.start(); } }

Bir sonraki programda bir termometreden okuma yapacağız: DS18B20

Page 54: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

ARDUINO programı: Bu programı çalıştırmak için 2 kütüphaneye gereksinmemiz var: OneWire.h ve

DallasTemperature.h

#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS_1 2 OneWire oneWire_in(ONE_WIRE_BUS_1); DallasTemperature sensor_inhouse(&oneWire_in); void setup(void) { Serial.begin(9600); sensor_inhouse.begin(); } void loop(void) { sensor_inhouse.requestTemperatures(); Serial.println(sensor_inhouse.getTempCByIndex(0)); delay(100); }

Java programı.

import java.io.*; import java.util.*; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import java.io.FileDescriptor; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.awt.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Monitor6 implements Runnable { String s2="[\\x00-\\x20]*[+-]?(((((\\p{Digit}+)(\\.)?((\\p{Digit}+)?)([eE][+-]?(\\p{Digit}+))?)|(\\.((\\p{Digit}+))([eE][+-]?(\\p{Digit}+))?)|(((0[xX](\\p{XDigit}+)(\\.)?)|(0[xX](\\p{XDigit}+)?(\\.)(\\p{XDigit}+)))[pP][+-]?(\\p{Digit}+)))[fFdD]?))[\\x00-\\x20]*"; private static final long serialVersionUID = 8257386587L; public Thread readThread; // zaman içinde çalışma değişkeni

Page 55: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

public CommPortIdentifier portId; // seri bağlantı kanalı numarası public SerialPort serialPort; // seri kanal public OutputStream outputStream; // çıktı kanalı public InputStream inputStream; // girdi kanalı public int sleep1; // readThread bekleme zamanı milisaniye public tplot2D d3; public dials1 d1; double T1,T1old; double ymin,ymax; //kontrol parametresi public String veritabani; public String veritablosu[]; public Connection connection = null; public Statement statement; String zamanold,zamannew; SQLite_Table tt; public String veri[][]; // String formunda ç?kt? de?i?kenleri public Monitor6(String s,String veritabanii,String veritablosui[],double ymini,double ymaxi) { ymin=ymini; ymax=ymaxi; veritabani=veritabanii; veritablosu=veritablosui; portId=portId(s); System.out.println("portID is read"); try { serialPort = (SerialPort) portId.open(s, 2000); } catch ( gnu.io.PortInUseException e) {} try { outputStream = serialPort.getOutputStream(); } catch (IOException e) {} try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch ( gnu.io.UnsupportedCommOperationException e) {} T1old=0; dials(); listTable(0); timeplot(); } //seri ileti?im kanal? aç?lmas? public CommPortIdentifier portId(String s) { portId = PortChooser.select_port(null); try { serialPort = (SerialPort) portId.open(s, 2000); } catch ( gnu.io.PortInUseException e) {} return portId; } public void start() {readThread = new Thread(this); readThread.start(); } public void run() { int ix=0; int n=1; int k=0; while(true) { try{ k++; Thread.sleep(100); try { inputStream = serialPort.getInputStream(); byte[] readBuffer = new byte[30]; long[] readBuffer1 = new long[30]; byte numBytes = (byte)inputStream.read(readBuffer); //System.out.println("numBytes="+numBytes);

Page 56: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

//String s= new String(readBuffer, "US-ASCII"); String s= new String(readBuffer); int i=0; for(i=0;i<numBytes;i++) { readBuffer1[i]=readBuffer[i]&0xFF; //readBuffer1[i]=readBuffer[i]; //System.out.print("i = "+i+"*"); //System.out.printf("%x ",readBuffer[i]); } if(s.matches(s2)) { T1=Double.parseDouble(s);} else {T1=T1old;} double T2[]={T1}; d1.setData(T2); T1old=T1; veri=new String[n][T2.length+4]; veri[ix][0]=""+k; String zaman[]=zaman(); veri[ix][1]=zaman[0]; veri[ix][2]=zaman[1]; double tt=zaman1(zaman[1]); zamannew=zaman[1]; int cihaz_adresi[]={0}; veri[ix][3]=""+cihaz_adresi[ix]; veri[ix][4]=""+T2[0]; //System.out.print("k= "+k+" "+zaman[0]+" "+zaman[1]+"cihaz = "+cihaz_adresi[ix]+" "); //for(int ii=0;i<T2.length;ii++) // {System.out.print(" T["+ix+"]["+ii+"] ="+T2[ii]+" ");veri[ix][ii+4]=""+T2[ii];} d1.setData(T2); String ss1=""; ss1+="insert into "+veritablosu[ix]+" values("; int ii=0; for(ii=0;ii<veri[ix].length-1;ii++) {ss1+="'"+veri[ix][ii]+"',";} ss1+="'"+veri[ix][ii]+"');"; System.out.println(ss1); try{ writeTable(ss1); } catch(ClassNotFoundException e4) {System.out.println("Class not found");} zamanold=zamannew; d3.setXY(tt,T2,ymin,ymax); //System.out.print("T1="+T1); } catch (IOException e) {} } catch (InterruptedException e) {System.out.println("InterruptedException 1");} } } public double zaman1(String ss) { StringTokenizer token=new StringTokenizer(ss,":"); int m=token.countTokens(); String s1[]=new String[m]; int j=0; while(token.hasMoreTokens()) { s1[j]=token.nextToken();j++;} double tt=Double.parseDouble(s1[0])*3600+Double.parseDouble(s1[1])*60+Double.parseDouble(s1[2]); return tt; } public String[] zaman() { GregorianCalendar calendar; Date date=new Date(); String[] ids = TimeZone.getAvailableIDs(+3 * 60 * 60 * 1000); SimpleTimeZone pdt = new SimpleTimeZone(+3 * 60 * 60 * 1000, ids[0]); calendar=new GregorianCalendar(pdt); calendar.setTime(date); String dt=""+calendar.get(Calendar.DATE); if (dt.length()==1) dt="0"+dt; String mo=""+(calendar.get(Calendar.MONTH)+1); if (mo.length()==1) mo="0"+mo;

Page 57: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

String Sdate=dt+"/"+mo+"/"+calendar.get(Calendar.YEAR); String ho=""+(calendar.get(Calendar.AM_PM)*12+calendar.get(Calendar.HOUR)); if (ho.length()==1) ho="0"+ho; String min=""+calendar.get(Calendar.MINUTE); if (min.length()==1) min="0"+min; String sec=""+calendar.get(Calendar.SECOND); if (sec.length()==1) sec="0"+sec; String Stime=ho+":"+min+":"+sec+" "; String z[]={Sdate,Stime}; return z; } //Database programs public void createTable(int ix) throws ClassNotFoundException { // sqlite-JDBC sürücüsünü yükle Class.forName("org.sqlite.JDBC"); Connection connection = null; int kanalsayisi=1; //just one channel reading try { // veritaban? ile ba?lant? kur. connection = DriverManager.getConnection("jdbc:sqlite:"+veritabani+".db"); statement = connection.createStatement(); statement.setQueryTimeout(30); // set timeout to 30 sec. statement.executeUpdate("drop table if exists "+veritablosu[ix]+";"); String ss="create table "+veritablosu[ix]+"(no String,tarih String,saat String,kanal String,"; int i; for(i=0;i<kanalsayisi-1;i++) ss+="ch"+i+" String, "; ss+="ch"+i+" String);"; statement.executeUpdate(ss); System.out.println("veritablosu = "+veritablosu[ix]); String ss1="select * from "+veritablosu[ix]; //tt.setQuerry(ss1); } catch(SQLException e) { // if the error message is "out of memory", // it probably means no database file is found System.err.println(e.getMessage()); } finally { try { if(connection != null) connection.close(); } catch(SQLException e) { // connection close failed. System.err.println(e); } } } public void writeTable(String querry) throws ClassNotFoundException { // sqlite-JDBC sürücüsünü yükle Class.forName("org.sqlite.JDBC"); Connection connection = null; try { // veritabanı ile bağlantı kur. connection = DriverManager.getConnection("jdbc:sqlite:"+veritabani+".db"); Statement statement = connection.createStatement(); statement.setQueryTimeout(30); // set timeout to 30 sec. statement.executeUpdate(querry); } catch(SQLException e) { // if the error message is "out of memory", // it probably means no database file is found System.err.println(e.getMessage()); }

Page 58: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

finally { try { if(connection != null) connection.close(); } catch(SQLException e) { // connection close failed. System.err.println(e); } } } public void listTable(int ix) { try { tt=new SQLite_Table(veritablosu[ix]);tt.setVisible(true); } catch(ClassNotFoundException e) { // "out of memory" mesajı veri tabanının bulunamadığı anlamına gelir System.err.println(e.getMessage()); }} public void dials() { double n1=Math.PI/2; double n2=3.0*n1; String st[]={" Temperature T "}; double td[]={0}; double tmin=0; double tmax=100.0; double tetamax=100; double teta1_rad=Math.PI/4; double teta2_rad=3.0*Math.PI/2.0+teta1_rad; d1=new dials1("Arduino analog read","Temperature T",st,td,tmin,tmax,teta1_rad,teta2_rad); FrameGraphic.plot("ARDUINO Temperature ",d1); } //zamana bağlı grafik public void timeplot() { int nyi=1; int nquei=30; String pl="ARDUINO Temperature plot"; String xl="time second"; String yl="Temperature T"; int xnt=10; int ynt=10; int xgr=1; int ygr=1; int ipti[]={5}; Color ibg=Color.cyan; Color ifg[]={Color.black,Color.blue,Color.red,Color.black,Color.green,Color.cyan,Color.yellow,Color.black}; d3=new tplot2D(nyi,nquei,pl,xl,yl,xnt,ynt,xgr,ygr,ipti,ibg,ifg); FrameGraphic.plot("Zaman Grafiği ",d3,1300,800); } public static void main(String arg[]) throws ClassNotFoundException { String veritabani="VT"; String veritablosu[]={"VT1"}; double ymin=0.0; double ymax=100.0; Monitor6 m=new Monitor6("ARDUNIO",veritabani,veritablosu,ymin,ymax); m.createTable(0); m.start(); } }

Page 59: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Bir sonraki programımızda 2 adet sıcaklık ve nem ölçer (sıcaklık ve nemi beraber ölçer o yüzden 3. Bir

sıcaklık ölçümü de mevcuttur.)

#include <OneWire.h> #include <DallasTemperature.h> #include <dht.h> #define DHT11_PIN 7 #define ONE_WIRE_BUS_1 2 dht DHT; OneWire oneWire_in(ONE_WIRE_BUS_1); float temperature; float sensorValue; float powervoltage=5; int chk; DallasTemperature sensor_inhouse(&oneWire_in); int incomingByte = 0;

Page 60: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

void setup(void) { Serial.begin(9600); sensor_inhouse.begin(); } void loop(void) { if (Serial.available() > 0) { incomingByte = Serial.read(); if(incomingByte==1) { sensor_inhouse.requestTemperatures(); Serial.println(sensor_inhouse.getTempCByIndex(0)); } else if(incomingByte==2) { sensorValue = analogRead(A0); temperature=(sensorValue/1023)*powervoltage*100; Serial.println(temperature); } else if(incomingByte==3) {chk = DHT.read11(DHT11_PIN); Serial.println(DHT.temperature); } else if(incomingByte==4) {chk = DHT.read11(DHT11_PIN); Serial.println(DHT.humidity); } delay(50); } }

Page 61: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Java programı:

Page 62: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

import java.io.*; import java.util.*; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import java.io.FileDescriptor; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.awt.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Monitor7 implements Runnable { String s2="[\\x00-\\x20]*[+-]?(((((\\p{Digit}+)(\\.)?((\\p{Digit}+)?)([eE][+-]?(\\p{Digit}+))?)|(\\.((\\p{Digit}+))([eE][+-]?(\\p{Digit}+))?)|(((0[xX](\\p{XDigit}+)(\\.)?)|(0[xX](\\p{XDigit}+)?(\\.)(\\p{XDigit}+)))[pP][+-]?(\\p{Digit}+)))[fFdD]?))[\\x00-\\x20]*"; private static final long serialVersionUID = 8257386587L; public Thread readThread; // zaman içinde çalışma değişkeni public CommPortIdentifier portId; // seri bağlantı kanalı numarası public SerialPort serialPort; // seri kanal public OutputStream outputStream; // çıktı kanalı public InputStream inputStream; // girdi kanalı public int sleep1; // readThread bekleme zamanı milisaniye public tplot2D d3; public dials1 d1; double T2[],T2old[]; double ymin,ymax; //kontrol parametresi public String veritabani; public String veritablosu[]; public Connection connection = null; public Statement statement; String zamanold,zamannew; public int ntable; SQLite_Table tt; public String veri[][]; // String formunda çıkt? de?i?kenleri public Monitor7(String s,String veritabanii,String veritablosui[],double ymini,double ymaxi,int nt) { ntable=nt; ymin=ymini; ymax=ymaxi; veritabani=veritabanii; veritablosu=veritablosui; portId=portId(s); T2=new double[nt]; System.out.println("portID is read"); try { serialPort = (SerialPort) portId.open(s, 2000); } catch ( gnu.io.PortInUseException e) {} try { outputStream = serialPort.getOutputStream(); } catch (IOException e) {} try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch ( gnu.io.UnsupportedCommOperationException e) {} dials(); listTable(0); timeplot(); } //seri ileti?im kanal? aç?lmas? public CommPortIdentifier portId(String s) { portId = PortChooser.select_port(null); try { serialPort = (SerialPort)

Page 63: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

portId.open(s, 2000); } catch ( gnu.io.PortInUseException e) {} return portId; } public void start() {readThread = new Thread(this); readThread.start(); } public void run() { int ix=0; int n=1; int k=0; while(true) { try{ k++; try { inputStream = serialPort.getInputStream(); outputStream = serialPort.getOutputStream(); int n3=ntable*6; byte[] readBuffer = new byte[8]; // int[] readBuffer1 = new int[40]; byte numBytes; String s=""; String ssx[]=new String[T2.length]; for(int i=1;i<=ntable;i++) { outputStream.write(i); Thread.sleep(800); numBytes = (byte)inputStream.read(readBuffer); s= new String(readBuffer); s=s.trim(); if(s.equals("")) s+=T2old[i]; {numBytes = (byte)inputStream.read(readBuffer); Thread.sleep(50); } if(s.matches(s2)) { T2[i-1]=Double.parseDouble(s);} else {T2[i-1]=T2old[i-1];} T2old[i-1]=T2[i-1]; } for(int i=0;i<ntable;i++) {//T2[i]=readBuffer[i]; System.out.println("T["+i+"] = "+T2[i] ); } d1.setData(T2); veri=new String[n][T2.length+4]; veri[ix][0]=""+k; String zaman[]=zaman(); veri[ix][1]=zaman[0]; veri[ix][2]=zaman[1]; double tt=zaman1(zaman[1]); zamannew=zaman[1]; int cihaz_adresi[]={0}; veri[ix][3]=""+cihaz_adresi[ix]; for(int ii=0;ii<T2.length;ii++) veri[ix][4+ii]=""+T2[ii]; String ss1=""; ss1+="insert into "+veritablosu[ix]+" values("; int ii=0; for(ii=0;ii<veri[ix].length-1;ii++) {ss1+="'"+veri[ix][ii]+"',";} ss1+="'"+veri[ix][ii]+"');"; System.out.println(ss1); try{ writeTable(ss1); } catch(ClassNotFoundException e4) {System.out.println("Class not found");} zamanold=zamannew; d3.setXY(tt,T2,ymin,ymax);

Page 64: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

//System.out.print("T1="+T1); } catch (IOException e) {} } catch (InterruptedException e) {System.out.println("InterruptedException 1");} } } public double zaman1(String ss) { StringTokenizer token=new StringTokenizer(ss,":"); int m=token.countTokens(); String s1[]=new String[m]; int j=0; while(token.hasMoreTokens()) { s1[j]=token.nextToken();j++;} double tt=Double.parseDouble(s1[0])*3600+Double.parseDouble(s1[1])*60+Double.parseDouble(s1[2]); return tt; } public String[] zaman() { GregorianCalendar calendar; Date date=new Date(); String[] ids = TimeZone.getAvailableIDs(+3 * 60 * 60 * 1000); SimpleTimeZone pdt = new SimpleTimeZone(+3 * 60 * 60 * 1000, ids[0]); calendar=new GregorianCalendar(pdt); calendar.setTime(date); String dt=""+calendar.get(Calendar.DATE); if (dt.length()==1) dt="0"+dt; String mo=""+(calendar.get(Calendar.MONTH)+1); if (mo.length()==1) mo="0"+mo; String Sdate=dt+"/"+mo+"/"+calendar.get(Calendar.YEAR); String ho=""+(calendar.get(Calendar.AM_PM)*12+calendar.get(Calendar.HOUR)); if (ho.length()==1) ho="0"+ho; String min=""+calendar.get(Calendar.MINUTE); if (min.length()==1) min="0"+min; String sec=""+calendar.get(Calendar.SECOND); if (sec.length()==1) sec="0"+sec; String Stime=ho+":"+min+":"+sec+" "; String z[]={Sdate,Stime}; return z; } //Database programs public void createTable(int ix) throws ClassNotFoundException { // sqlite-JDBC sürücüsünü yükle T2=new double[ntable]; T2old=new double[ntable]; Class.forName("org.sqlite.JDBC"); Connection connection = null; int kanalsayisi=ntable; try { // veritabanı ile bağlantı kur. connection = DriverManager.getConnection("jdbc:sqlite:"+veritabani+".db"); statement = connection.createStatement(); statement.setQueryTimeout(30); // set timeout to 30 sec. statement.executeUpdate("drop table if exists "+veritablosu[ix]+";"); String ss="create table "+veritablosu[ix]+"(no String,tarih String,saat String,kanal String,"; int i; for(i=0;i<kanalsayisi-1;i++) ss+="ch"+i+" String, "; ss+="ch"+i+" String);"; statement.executeUpdate(ss); System.out.println("veritablosu = "+veritablosu[ix]); String ss1="select * from "+veritablosu[ix]; //tt.setQuerry(ss1); } catch(SQLException e) { // if the error message is "out of memory", // it probably means no database file is found System.err.println(e.getMessage()); } finally

Page 65: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

{ try { if(connection != null) connection.close(); } catch(SQLException e) { // connection close failed. System.err.println(e); } } } public void writeTable(String querry) throws ClassNotFoundException { // sqlite-JDBC sürücüsünü yükle Class.forName("org.sqlite.JDBC"); Connection connection = null; try { // veritabanı ile bağlantı kur. connection = DriverManager.getConnection("jdbc:sqlite:"+veritabani+".db"); Statement statement = connection.createStatement(); statement.setQueryTimeout(30); // set timeout to 30 sec. statement.executeUpdate(querry); } catch(SQLException e) { // if the error message is "out of memory", // it probably means no database file is found System.err.println(e.getMessage()); } finally { try { if(connection != null) connection.close(); } catch(SQLException e) { // connection close failed. System.err.println(e); } } } public void listTable(int ix) { try { tt=new SQLite_Table(veritablosu[ix]);tt.setVisible(true); } catch(ClassNotFoundException e) { // "out of memory" mesajı veri tabanının bulunamadığı anlamına gelir System.err.println(e.getMessage()); }} public void dials() { double T[]=new double[ntable]; System.out.println("ntable="+ntable); for(int i=0;i<ntable;i++) {T[i]=0.0;} double n1=Math.PI/2; double n2=3.0*n1; String st[]={" Sıcaklık T1 "," Sıcaklık T2 "," Sıcaklık T3 ","Bağıl nem "+'\u03A6'+"3"}; String unit[]={" derece C ","derece C "," derece C "," %"}; double tmin=0; double tmax=100.0; double tetamax=100; double teta1_rad=Math.PI/4; double teta2_rad=3.0*Math.PI/2.0+teta1_rad; d1=new dials1("Arduino analog read",unit,st,T,tmin,tmax,teta1_rad,teta2_rad); FrameGraphic.plot("ARDUINO Temperature ",d1); } //zamana bağlı grafik

Page 66: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

public void timeplot() { int nyi=ntable; int nquei=30; String pl="ARDUINO Sıcaklık ve nem grafiği"; String xl="zaman saniye"; String yl="sıcaklık T"; int xnt=10; int ynt=10; int xgr=1; int ygr=1; int ipti[]={0,1,2,3}; Color ibg=Color.cyan; Color ifg[]={Color.black,Color.blue,Color.red,Color.black,Color.green,Color.cyan,Color.yellow,Color.black}; d3=new tplot2D(nyi,nquei,pl,xl,yl,xnt,ynt,xgr,ygr,ipti,ibg,ifg); FrameGraphic.plot("Zaman Grafiği ",d3,1300,800); } public static void main(String arg[]) throws ClassNotFoundException { String veritabani="VT"; String veritablosu[]={"VT1"}; double ymin=0.0; double ymax=100.0; int nt=4; Monitor7 m=new Monitor7("ARDUNIO",veritabani,veritablosu,ymin,ymax,nt); m.createTable(0); m.start(); } }

Dials1 programı (çok boyuta adapte edilmiş versiyon)

//==================================// // ARDUINO veri sistem entegrasyonu // // dials1 (çok boyutlu versiyon) // // M. Turhan Coban // //==================================// import java.io.*; import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; import java.awt.*; import java.awt.event.*; import javax.swing.event.*; import java.awt.geom.*; import java.awt.Graphics; public class dials1 extends JPanel { private static final long serialVersionUID = 7859657L; public analogDialP tp[]; JPanel jp; JPanel jp1; JTextArea output; public dials1(String s1,String unit,String s[],double td[],double tmin,double tmax,double teta1_rad,double teta2_rad) { int n=td.length; tp=new analogDialP[n]; jp=new JPanel(); jp1=new JPanel(); jp.setLayout(new GridLayout(1,1)); for(int i=0;i<n;i++) { tp[i]=new analogDialP(s[i],unit,tmin,tmax,teta1_rad,teta2_rad,5,10);tp[i].setx(td[i]);jp.add(tp[i]);} String ss="Arduino DS18S20 digital termometer"; Color c=this.getBackground(); output=new JTextArea(ss); output.setBackground(c); this.setLayout(new BorderLayout()); add(output,BorderLayout.NORTH);

Page 67: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

add(jp,BorderLayout.CENTER); } public dials1(String s1,String unit[],String s[],double td[],double tmin,double tmax,double teta1_rad,double teta2_rad) { int n=td.length; tp=new analogDialP[n]; jp=new JPanel(); jp1=new JPanel(); jp.setLayout(new GridLayout(1,1)); for(int i=0;i<n;i++) { tp[i]=new analogDialP(s[i],unit[i],tmin,tmax,teta1_rad,teta2_rad,5,10);tp[i].setx(td[i]);jp.add(tp[i]);} String ss="Arduino DS18S20 digital termometer"; Color c=this.getBackground(); output=new JTextArea(ss); output.setBackground(c); this.setLayout(new BorderLayout()); add(output,BorderLayout.NORTH); add(jp,BorderLayout.CENTER); } public void setData(double td[]) { int n=td.length; for(int i=0;i<n;i++) {tp[i].setx(td[i]);} repaint(); } }

AnalogdialP gösterge programı

//=======================================================// //JAVA-ARDUINO veri sistem entagrasyonu // // analog yuvarlak çıktı göstergesi // // analogDialP // // M. Turhan Coban // //=======================================================// // Girdi Değişken listesi // String name : gösterge ismi // String unit : gösterge birim // double minx: gösterge minimum rakam // double maxx: gösterge maksimum rakam // double minteta : gösterge minimum rakam açısı (radyan) // double maxtetai: gösterge maksimum rakam açısı (radyan) // int ni : rakamların da gösterildiği büyük skala bölüm sayısı // int n1i: küçük skala bölüm sayısı import javax.swing.*; import java.awt.Graphics; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import java.net.*; import java.io.*; import java.awt.Graphics; import java.util.*; import java.text.*; import java.util.Locale; import java.awt.image.*; import java.awt.Font; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.*; import java.awt.font.*; // ============

Page 68: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

public class analogDialP extends JPanel { private static final long serialVersionUID = 756764376L; double x,minx,maxx; double minteta,maxteta; int n; int n1; polar p; double angle1,angle2,angle3; String name; String unit; public analogDialP(String namei,String uniti,double minxi,double maxxi,double mintetai,double maxtetai,int ni,int n1i) { name=namei; unit=uniti; minx=minxi; maxx=maxxi; minteta=mintetai; maxteta=maxtetai; x=minx; n=ni; n1=n1i; angle1=minteta; angle2=maxteta; } public void setx(double xi) {x=xi;} public void drawPlotLabel(Graphics g2,String s, int xi,int yi,int R1i) {Graphics2D g=(Graphics2D)g2; int x1,y1; int R1=R1i; x1=xi+R1; y1=yi+R1; g.drawString(s,x1,y1); //AffineTransform origTransform = g.getTransform(); //g.translate(x1,y1); //g.rotate(90*Math.PI/180); //g.drawString(s,0,0); //g.setTransform(origTransform); //g.drawString("xxxxxxxxxxxxx",0,0); } public void drawLabel1(Graphics g2,int xi,int yi,int R1i) { double angle; Graphics2D g=(Graphics2D)g2; double R1=R1i; polar P1=new polar(); int x[]=new int[n]; int y[]=new int[n]; GeneralPath polygon=new GeneralPath(GeneralPath.WIND_EVEN_ODD, x.length); int x1,y1; double teta=(maxteta-minteta)/n; double dx=(maxx-minx)/n; for(double xx=minx;xx<=maxx;xx+=dx) { angle=(xx-minx)/(maxx-minx)*(maxteta-minteta)+minteta; double teta1=-angle+Math.PI*3.0/2.0; //System.out.println("xx="+xx+"angle="+angle+"teta1="+teta1); P1.polar_input(R1+20,teta1); x1=(xi+(int)P1.xi()); y1=(yi+(int)P1.xj()); if(teta1>Math.PI/2.0 && teta1<3.0*Math.PI/2.0) { x1=(xi+(int)P1.xi())-40; }

Page 69: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

else { x1=(xi+(int)P1.xi()); } if(teta1>Math.PI && teta1<2.0*Math.PI) { y1=(yi-(int)P1.xj())+10;} else { y1=(yi-(int)P1.xj());} g.setFont(new Font("Serif",Font.BOLD,18)); g.drawString(toString(xx,6,3),x1,y1); } } public void drawLabel(Graphics g2,int xi,int yi,int R1i) { double angle; Graphics2D g=(Graphics2D)g2; double R1=R1i; polar P1=new polar(); polar P2=new polar(); int x[]=new int[n]; int y[]=new int[n]; int x1,y1; double teta=(maxteta-minteta)/n; double teta2; double dx=(maxx-minx)/n; g.setFont(new Font("Serif",Font.BOLD,18)); AffineTransform at; AffineTransform origTransform = g.getTransform(); for(double xx=minx;xx<=maxx;xx+=dx) { angle=(xx-minx)/(maxx-minx)*(maxteta-minteta)+minteta; double teta1=-angle+Math.PI*3.0/2.0; teta2=angle+Math.PI/2.0-Math.PI/40.0; // dik yazı istersek // teta2=angle+Math.PI/2.0+Math.PI/80.0; P1.polar_input(R1,teta2); x1=(xi+(int)P1.xi()); y1=(yi+(int)P1.xj()); g.translate(x1,y1); g.rotate(teta2+Math.PI/2.0); // dik yazı istersek // g.rotate(teta2); g.drawString(toString(xx,4,1),0,0); g.setTransform(origTransform); //TextLayout t=new TextLayout(toString(xx,5,1),g.getFont(),g.getFontRenderContext()); //at=AffineTransform.getRotateInstance(teta1,x1,y1); //g.setTransform(at); //t.draw(g,x1,y1); //at=AffineTransform.getRotateInstance(0,0,0); //g.setTransform(at); //g.translate(x1,y1); //g.rotate(angle); //t.draw(g,x1,y1); //g.setTransform(origTransform); //g.drawText(toString(xx,5,1)); /* if(teta1>Math.PI/2.0 && teta1<3.0*Math.PI/2.0) { x1=(xi+(int)P1.xi())-40; } else { x1=(xi+(int)P1.xi()); } if(teta1>Math.PI && teta1<2.0*Math.PI) { y1=(yi-(int)P1.xj())+10;} else { y1=(yi-(int)P1.xj());} */ //g.drawString(toString(xx,5,1),x1,y1);

Page 70: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

} } //drawAkrep metodu sonu public static String toString(double left, int w, int d) // converts a double to a string with given width and decimals. { NumberFormat df=NumberFormat.getInstance(Locale.US); df.setMaximumFractionDigits(d); df.setMinimumFractionDigits(d); df.setGroupingUsed(false); String s = df.format(left); while (s.length() < w) s = " " + s; if (s.length() > w) { s = ""; for (int i=0; i<w; i++) s = s + "-"; } return s; } public void drawLine(Graphics g2,int xi,int yi,int R1i,int R2i,int ni) { double angle; Graphics2D g=(Graphics2D)g2; double R1=R1i; double R2=R2i; polar P1=new polar(); polar P2=new polar(); int x[]=new int[ni]; int y[]=new int[ni]; GeneralPath polygon=new GeneralPath(GeneralPath.WIND_EVEN_ODD, x.length); double teta=(maxteta-minteta)/ni; double dx=(maxx-minx)/ni; for(double xx=minx;xx<=maxx;xx+=dx) { angle=(xx-minx)/(maxx-minx)*(maxteta-minteta)+minteta; double teta1=-angle+Math.PI*3.0/2.0; P1.polar_input(R1,teta1); P2.polar_input(R2,teta1); polygon.moveTo((xi+(int)P1.xi()),(yi-(int)P1.xj())); polygon.lineTo((xi+(int)P2.xi()),(yi-(int)P2.xj())); } g.draw(polygon); } //drawAkrep metodu sonu public void drawAkrep(Graphics g2,int xi,int yi,int Ri) { double angle=(x-minx)/(maxx-minx)*(maxteta-minteta)+minteta; Graphics2D g=(Graphics2D)g2; double R=Ri; double r=Ri*0.3; polar P1=new polar(); polar P2=new polar(); polar P3=new polar(); int x[]=new int[5]; int y[]=new int[5]; GeneralPath polygon=new GeneralPath(GeneralPath.WIND_EVEN_ODD, x.length); x[0]=xi; y[0]=yi; x[4]=xi; y[4]=yi; double teta=Math.PI/10.0; double teta1=-angle+Math.PI*3.0/2.0; double teta2=teta1+teta/2.0; double teta3=teta1-teta/2+Math.PI*2; P1.polar_input(R,teta1);

Page 71: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

P2.polar_input(r,teta2); P3.polar_input(r,teta3); x[1]=xi+(int)P3.xi(); y[1]=yi-(int)P3.xj(); x[2]=xi+(int)P1.xi(); y[2]=yi-(int)P1.xj(); x[3]=xi+(int)P2.xi(); y[3]=yi-(int)P2.xj(); for(int i=0;i<5;i++) { if(i==0) { polygon.moveTo(x[0],y[0]); } else { polygon.lineTo(x[i],y[i]); } } g.draw(polygon); } //drawAkrep metodu sonu public void fillAkrep(Graphics g2,int xi,int yi,int Ri) { double angle=(x-minx)/(maxx-minx)*(maxteta-minteta)+minteta; Graphics2D g=(Graphics2D)g2; double R=Ri; double r=Ri*0.3; polar P1=new polar(); polar P2=new polar(); polar P3=new polar(); int x[]=new int[5]; int y[]=new int[5]; GeneralPath polygon=new GeneralPath(GeneralPath.WIND_EVEN_ODD, x.length); x[0]=xi; y[0]=yi; x[4]=xi; y[4]=yi; double teta=Math.PI/10.0; double teta1=-angle+Math.PI*3.0/2.0; double teta2=teta1+teta/2.0; double teta3=teta1-teta/2+Math.PI*2; P1.polar_input(R,teta1); P2.polar_input(r,teta2); P3.polar_input(r,teta3); x[1]=xi+(int)P3.xi(); y[1]=yi-(int)P3.xj(); x[2]=xi+(int)P1.xi(); y[2]=yi-(int)P1.xj(); x[3]=xi+(int)P2.xi(); y[3]=yi-(int)P2.xj(); for(int i=0;i<5;i++) { if(i==0) { polygon.moveTo(x[0],y[0]); } else { polygon.lineTo(x[i],y[i]); } } g.fill(polygon); } //drawAkrep metodu sonu public static void drawDaire(Graphics g2, int xi,int yi, int R) { Graphics2D g=(Graphics2D)g2;

Page 72: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

g.draw(new Ellipse2D.Double((xi-R),(yi-R),2*R,2*R)); } public static void fillDaire(Graphics g2, int xi,int yi, int R) { Graphics2D g=(Graphics2D)g2; g.fill(new Ellipse2D.Double((xi-R),(yi-R),2*R,2*R)); } public TexturePaint getImageTexture(String imageFile,int xi,int yi, int R) { URL url = getClass().getResource(imageFile); Image img = getToolkit().getImage(url); try { MediaTracker tracker = new MediaTracker(this); tracker.addImage(img, 0); tracker.waitForID(0); } catch (Exception e) {} int width = 2*R; int height = 2*R; BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics g = buffImg.getGraphics(); g.drawImage(img,-30,-20, this); Rectangle2D rect = new Rectangle((xi-R),(yi-R), width, height); return new TexturePaint(buffImg, rect); } public void paintComponent(Graphics g) { final Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); try{ final BasicStroke s1 = new BasicStroke(1); final BasicStroke s2 = new BasicStroke (2); final BasicStroke s10 = new BasicStroke (10); FontMetrics metrics=g.getFontMetrics(); //System.out.println(metrics.getAscent()); //System.out.println(metrics.getDescent()); //System.out.println(metrics.getHeight()); int xi=150; int yi=120; int R1=85; int R2=80; int R3=75; g2.setColor(Color.yellow); TexturePaint tp = getImageTexture("arduino.jpg",xi,yi,R1); g2.setPaint(tp); star.fillDaire(g2,xi,yi,R1); g2.setColor(Color.red); fillAkrep(g2,xi,yi,R2); g2.setColor(Color.black); g2.setStroke (s2); g2.setPaint (Color.black); drawDaire(g2,xi,yi,R1); drawDaire(g2,xi,yi,R2); drawDaire(g2,xi,yi,5); drawAkrep(g2,xi,yi,R2); drawLine(g2,xi,yi,R1,R2,n); g2.setStroke (s1); drawDaire(g2,xi,yi,R3); drawLine(g2,xi,yi,R2,R3,n1); g2.setStroke (s2); drawLabel(g2,xi,yi,R1+10); drawPlotLabel(g2,name,0,yi+20,R1); drawPlotLabel(g2,""+x+" "+unit,0,yi+40,R1); } catch(NullPointerException e){} } }

Page 73: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Bir relay bağlantı programı. Işık yakıp söndürmek veya bir motor açıp kapatmak için javadan gelen

sinyalleri relay denilen ünite üzerinden açıp kapatılacak anahtara gönderen bir program.

Page 74: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

ARDUINO Programı:

int incomingByte = 0; void setup() { Serial.begin(9600); pinMode(8,OUTPUT); pinMode(LED_BUILTIN, OUTPUT); } void loop() { if (Serial.available() > 0) {incomingByte = Serial.read(); if(incomingByte==1) { digitalWrite(8,HIGH); digitalWrite(LED_BUILTIN, HIGH); delay(1000); } else { digitalWrite(8,LOW); digitalWrite(LED_BUILTIN, LOW); } }

Page 75: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

}

Java programları: Java olarak iki sınıf yaratıldı, birinci sınıf bir GUI programı olan buttonP düğmeyi bir

grafik ortamında yaratıp düğmeye bastığımızda arduino kontrol değişkenimiz olan int signal; değişkeninin

değerini 1 ise 2, 2 ise 1 olarak değiştiriyor. Bu değişkenin değeri ARDUINO’ya gönderiliyor ve 1 ise lamba

yakılıyor, 2 ise söndürülüyor. İkinci program bağlantıyı sağlayan ve değişkeni gönderip alan üst

sınıfımızdır.

import java.awt.Graphics; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.awt.font.*; // ============ public class buttonP extends JPanel implements ActionListener { private static final long serialVersionUID =47897468764L; JButton jb; JTextField jtf; int signal; public buttonP() {setLayout(new BorderLayout()); jb=new JButton("ışığı yakıp kapatmak için düğmeye basınız"); jtf=new JTextField("ışık söndü"); signal=0; jb.addActionListener(this); add(jb,BorderLayout.NORTH); add(jtf,BorderLayout.SOUTH); } public void actionPerformed( ActionEvent e) { if(e.getSource()==jb) { if(signal==1) {signal=2;} else {signal=1;} } } }

import java.io.*; import java.util.*; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.awt.*;

Page 76: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

import javax.swing.*; import java.awt.Graphics; import java.awt.*; import java.awt.event.*; public class Monitor8 implements Runnable { String s2="[\\x00-\\x20]*[+-]?(((((\\p{Digit}+)(\\.)?((\\p{Digit}+)?)([eE][+-]?(\\p{Digit}+))?)|(\\.((\\p{Digit}+))([eE][+-]?(\\p{Digit}+))?)|(((0[xX](\\p{XDigit}+)(\\.)?)|(0[xX](\\p{XDigit}+)?(\\.)(\\p{XDigit}+)))[pP][+-]?(\\p{Digit}+)))[fFdD]?))[\\x00-\\x20]*"; private static final long serialVersionUID = 8257386587L; public Thread readThread; // zaman içinde çal??ma de?i?keni public CommPortIdentifier portId; // seri ba?lant? kanal? numaras? public SerialPort serialPort; // seri kanal public OutputStream outputStream; // ç?kt? kanal? public InputStream inputStream; // girdi kanal? public int sleep1; // readThread bekleme zaman? milisaniye public buttonP d1; public Monitor8(String s) { portId=portId(s); System.out.println("portID is read"); try { serialPort = (SerialPort) portId.open(s, 2000); } catch (gnu.io.PortInUseException e) {} try { outputStream = serialPort.getOutputStream(); } catch (IOException e) {} try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (gnu.io.UnsupportedCommOperationException e) {} button(); } //seri ileti?im kanal? aç?lmas? public CommPortIdentifier portId(String s) { portId = PortChooser.select_port(null); try { serialPort = (SerialPort) portId.open(s, 2000); } catch (gnu.io.PortInUseException e) {} return portId; } public void start() {readThread = new Thread(this); readThread.start(); } public void run() { int k=0; while(true)

Page 77: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

{ try{ k++; Thread.sleep(1000); try { if(d1.signal==1) {outputStream.write(d1.signal); d1.setBackground(Color.yellow);d1.jtf.setText("ışık yanıyor");} else {outputStream.write(d1.signal);d1.setBackground(Color.blue);d1.jtf.setText("ışık söndü"); } } catch (IOException e) {} } catch (InterruptedException e) {System.out.println("InterruptedException 1");} } } public void button() {d1=new buttonP(); FrameGraphic.plot("ARDUINO relay sensor",d1); } public static void main(String arg[]) { Monitor8 m=new Monitor8("ARDUNIO"); m.start(); } }

Bir sonraki programda servo kontrolla belli bir açı değerini java programında giriyoruz ve servo kontrolü

bu açıya göre açıyoruz.

Page 78: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Arduino programı:

int Servopin=5; int angle=0; void setup() { Serial.begin(9600); pinMode(Servopin,OUTPUT); } void loop() { if (Serial.available() > 0) { angle = Serial.read(); delay(100); Serial.println(angle); moveangle(Servopin,angle); } } void moveangle(int Servopin,int angle) { int pulsewidth=(angle*11)+500;//change the angle to 500-2480us pulsewidth digitalWrite(Servopin,HIGH); delayMicroseconds(pulsewidth); digitalWrite(Servopin,LOW); delay(20-pulsewidth/1000); }

Java programları: textP ve Monitor9

import java.awt.Graphics; import java.util.*; import java.text.*; import java.util.Locale; import java.awt.image.*; import javax.swing.*; import java.awt.Graphics; import java.awt.*; import java.awt.event.*;

Page 79: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

import java.awt.geom.*; import java.awt.font.*; import javax.swing.event.*; // ============ public class textP extends JPanel implements ActionListener,ChangeListener { private static final long serialVersionUID =47897468764L; JTextField jb; JTextField jtf; JSlider jsd; int signal; public textP() { signal=0; setLayout(new BorderLayout()); jb=new JTextField(""+signal); jtf=new JTextField(jb.getText()); jsd=new JSlider(SwingConstants.HORIZONTAL,0,180,10); jsd.setMajorTickSpacing(20); jsd.setPaintTicks(true); jsd.setPaintLabels(true); jsd.addChangeListener(this); jsd.setValue(signal); jb.addActionListener(this); add(jb,BorderLayout.NORTH); add(jsd,BorderLayout.CENTER); add(jtf,BorderLayout.SOUTH); } public void actionPerformed( ActionEvent e) { if(e.getSource()==jb) { signal=Integer.parseInt(jb.getText()); if(signal>180) { signal=180;} else if(signal<0) {signal=0;} jb.setText(""+signal); jsd.setValue(signal); } } public void stateChanged(ChangeEvent e) { if(e.getSource()==jsd) {signal=jsd.getValue();jb.setText(""+signal);} repaint(); } }

import java.io.*; import java.util.*; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.awt.*; import javax.swing.*; import java.awt.Graphics; import java.awt.*; import java.awt.event.*; public class Monitor9 implements Runnable { String s2="[\\x00-\\x20]*[+-]?(((((\\p{Digit}+)(\\.)?((\\p{Digit}+)?)([eE][+-]?(\\p{Digit}+))?)|(\\.((\\p{Digit}+))([eE][+-]?(\\p{Digit}+))?)|(((0[xX](\\p{XDigit}+)(\\.)?)|(0[xX](\\p{XDigit}+)?(\\.)(\\p{XDigit}+)))[pP][+-]?(\\p{Digit}+)))[fFdD]?))[\\x00-\\x20]*"; private static final long serialVersionUID = 8257386587L; public Thread readThread; // zaman içinde çalışma değişkeni public CommPortIdentifier portId; // seri bağlantı kanal numaraı public SerialPort serialPort; // seri kanal

Page 80: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

public OutputStream outputStream; // çıktı kanalı public InputStream inputStream; // girdi kanalı public int sleep1; // readThread bekleme zamanı milisaniye public textP d1; int angle; public Monitor9(String s) { portId=portId(s); System.out.println("portID is read"); angle=0; try { serialPort = (SerialPort) portId.open(s, 2000); } catch (gnu.io.PortInUseException e) {} try { outputStream = serialPort.getOutputStream(); } catch (IOException e) {} try { serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (gnu.io.UnsupportedCommOperationException e) {} text(); } //seri iletişim kanalı açılmas public CommPortIdentifier portId(String s) { portId = PortChooser.select_port(null); try { serialPort = (SerialPort) portId.open(s, 2000); } catch (gnu.io.PortInUseException e) {} return portId; } public void start() {readThread = new Thread(this); readThread.start(); } public void run() { int k=0; while(true) { try{ k++; Thread.sleep(200); byte[] readBuffer = new byte[8]; byte numBytes; String s=""; try { inputStream = serialPort.getInputStream(); outputStream = serialPort.getOutputStream(); outputStream.write(d1.signal);;d1.jtf.setText("Ardinuo'dan geri okunan açı = "+d1.signal); Thread.sleep(1000); numBytes = (byte)inputStream.read(readBuffer); s= new String(readBuffer); s=s.trim(); angle=Integer.parseInt(s); d1.jtf.setText("Ardinuo'dan geri okunan açı = "+angle); } catch (IOException e) {} } catch (InterruptedException e) {System.out.println("InterruptedException 1");} } } public void text() {d1=new textP(); FrameGraphic.plot("ARDUINO servo sensor",d1); } public static void main(String arg[]) { Monitor9 m=new Monitor9("ARDUNIO"); m.start(); } }

Page 81: ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBANturhancoban.com/dersler/arduino/ARDUINO JAVA ARAYÜZ PROGRAMLAMA.pdf · ARDUINO JAVA ARAYÜZ PROGRAMLAMA M. Turhan ÇOBAN Burada ARDUINI

Program çıktısı