JAVA Arduino GPS-bee

Цель проекта получить приложение которое будет отображать текущее местоположение (ноутбук Windows с подключенным arduino)

Закупившись всем необходимым обнаружил досадную вещь отстутствие проводов мама-папа, так что Вам я думаю удастся соденить более удачно.

Подключение - Мануал по GPS bee Подключение как на фото VCC - 3.3V, TX - 3, RX - 4, GND - GND.

arduino uno gps bee gps bee arduino uno gps bee arduino uno gps bee

Далее если не стоит: драйвер Arduino, java Development Kit, NetBeans 7.3 бибилиотека для java RXTXcomm

Подключаем Arduino UNO R3. Создаем новый проект в NetBeans, бросаем кнопки, текстовое поле, подключаем библиотеку с последнем могут возникнуть сложности.

Я в папке с проектом создал подпапку lib, туда бросил rxtxcomm.jar и добавил его в библиотеку. А папку lib в исходные файла проекты (в свойствах проекта). dll бросил в папку с Java C:\Program Files\Java\jre7\bin код: package GPSinfo; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import gnu.io.CommPort; import gnu.io.NoSuchPortException; import gnu.io.PortInUseException; import gnu.io.UnsupportedCommOperationException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.text.DateFormat; import java.util.logging.Level; import java.util.logging.Logger; import java.util.Date; import java.text.SimpleDateFormat; import java.util.Enumeration; import java.util.TimeZone; public class GUI_gps extends javax.swing.JFrame { public GUI_gps() { initComponents(); } private void initComponents() { jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); choice1 = new java.awt.Choice(); jScrollPane1 = new javax.swing.JScrollPane(); jTextPane1 = new javax.swing.JTextPane(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); addWindowListener(new java.awt.event.WindowAdapter() { public void windowOpened(java.awt.event.WindowEvent evt) { formWindowOpened(evt); } }); jButton1.setText("выход"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jButton2.setText("старт"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); Enumeration CommID = CommPortIdentifier.getPortIdentifiers(); while(CommID.hasMoreElements()){ CommPortIdentifier CurrComm = (CommPortIdentifier)CommID.nextElement(); if(CurrComm.getPortType() == CommPortIdentifier.PORT_SERIAL){ choice1.add(CurrComm.getName()); } } jTextPane1.setText("Выберете COM порт к которму подключено устройство"); jScrollPane1.setViewportView(jTextPane1); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap(38, Short.MAX_VALUE) .add(choice1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(22, 22, 22) .add(jButton2) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jButton1) .addContainerGap()) .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(jButton1) .add(jButton2)) .add(choice1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); pack(); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); } private void formWindowOpened(java.awt.event.WindowEvent evt) { } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { try { jTextPane1.setText("загружаем"); String portName=choice1.getSelectedItem(); jTextPane1.setText("Подключение к порту "+portName); CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); jTextPane1.setText("подключено"); if ( portIdentifier.isCurrentlyOwned() ) { jTextPane1.setText("Ошибка: порт занят."); } else { jTextPane1.setText("ожидаем ответа от устройства."); CommPort commPort = null; try { commPort = portIdentifier.open(this.getClass().getName(),2000); } catch (PortInUseException ex) { jTextPane1.setText("Ошибка: порт не найден [PortInUseException]."); Logger.getLogger(GUI_gps.class.getName()).log(Level.SEVERE, null, ex); } if ( commPort instanceof SerialPort ) { SerialPort serialPort = (SerialPort) commPort; try { serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException ex) { jTextPane1.setText("Ошибка: порт не найден [UnsupportedCommOperationException]."); Logger.getLogger(GUI_gps.class.getName()).log(Level.SEVERE, null, ex); } InputStream in = null; try { in = serialPort.getInputStream(); } catch (IOException ex) { jTextPane1.setText("Ошибка: порт не найден [IOException]."); Logger.getLogger(GUI_gps.class.getName()).log(Level.SEVERE, null, ex); } (new Thread(new SerialReader(in))).start(); } else { System.out.println("Ошибка: Порт не является COM."); } } } catch (NoSuchPortException ex) { jTextPane1.setText("Ошибка: порт не найден."); Logger.getLogger(GUI_gps.class.getName()).log(Level.SEVERE, null, ex); } } public class SerialReader implements Runnable { InputStream in; public SerialReader ( InputStream in ) { this.in = in; } @Override public void run () { byte[] buffer = new byte[1024]; int len; String GPSstr=""; String tmpstr; int status = 0; // 0 - ожидание $ 1 - ожидание $GPRMC 2 - ожидание конца строки try { Date d = new Date(); DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); df.setTimeZone(TimeZone.getTimeZone("EAT")); String customerDate = df.format(d); FileOutputStream output; output = new FileOutputStream("log"+customerDate+".txt"); jTextPane1.setText("Создан лог файл: \r\n log"+customerDate+".txt"); while (( len = this.in.read(buffer)) > -1 ) { tmpstr = new String(buffer,0,len); if (status==0) { if (tmpstr.indexOf("$")>0) { status=1; } } if (status==1) { // если есть $ начинаем сохранять строку GPSstr = GPSstr + tmpstr; if (GPSstr.length() > 5000){status = 0; GPSstr=""; continue;} if (GPSstr.indexOf("$GPRMC")>0) { // если строка начинается с $GPRMC или содержит обрубаем ее GPSstr = GPSstr.substring(GPSstr.indexOf("$GPRMC"),GPSstr.length()); status = 2; tmpstr = ""; } } if (status==2) { GPSstr = GPSstr + tmpstr; // продолжаем набирать строку из СОМ порта if (GPSstr.length() > 5000){status = 0; GPSstr=""; continue;} if (GPSstr.indexOf("\r\n")>0) { GPSstr = GPSstr.substring(0,GPSstr.indexOf("\r\n")-1); String[] arrGPS = GPSstr.split(","); String time; time = arrGPS[1]; if (time.length()>0){ String hh = time.substring(0,2); String mm = time.substring(2,4); String ss = time.substring(4,6); String Ncoord = arrGPS[3]; String Ecoord = arrGPS[5]; String InfoGPS = "Время: "+ hh +":"+ mm +":"+ ss + " \r\n координаты \r\n " + Ncoord + " N, " + Ecoord + " E"; String logGPS = "Время: "+ hh +":"+ mm +":"+ ss + " координаты " + Ncoord + " N, " + Ecoord + " E \r\n"; jTextPane1.setText(InfoGPS); output.write(logGPS.getBytes()); GPSstr=""; status=0; }else{ jTextPane1.setText("Нет соединения со спутниками."); GPSstr=""; status=0; } } } } output.close(); } catch (Exception ex) { jTextPane1.setText("Ошибка: не удается создать лог файл."); Logger.getLogger(GUI_gps.class.getName()).log(Level.SEVERE, null, ex); } } private void String(byte[] buffer, int i, int len) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } } /** */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { GUI_gps gui = new GUI_gps(); gui.setVisible(true); } }); } // Variables declaration - do not modify private java.awt.Choice choice1; private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextPane jTextPane1; // End of variables declaration }

Компилируем собираем, получаем следущий результат:
programma

П.С. Крайне понравились статьи на сайте Трезвого практика.