package guiPilotoArduino;
import guiPilotoArduino.cmp.Compass;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import java.awt.BorderLayout;
import javax.swing.BorderFactory;
import javax.swing.JFormattedTextField;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.JTabbedPane;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.BoxLayout;
import javax.swing.SpringLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Color;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import javax.swing.text.DefaultCaret;
import javax.swing.SwingConstants;
import java.awt.SystemColor;
import javax.swing.ScrollPaneConstants;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Toolkit;
import javax.swing.JTextField;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.GridLayout;
import java.math.BigDecimal;
import javax.swing.JSeparator;
import javax.swing.border.EtchedBorder;
public class GuiPilotoArduino {
private JFrame frame;
private JTabbedPane tabbedPane;
private JLabel lblCompas;
private JTextPane textPane;
public JLabel getLblCompas() {
return lblCompas;
}
public JTabbedPane getTabbedPane() {
return tabbedPane;
}
public static Compass compass;
private JTextField textFieldPuertoArduino;
private JFormattedTextField textFieldRumbo;
public Compass getCompass() {
return compass;
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GuiPilotoArduino window = new GuiPilotoArduino();
window.frame.setVisible(true);
//Abriendo el listener de Arduino
ArduinoSerialControl arduinoSerialControl = new ArduinoSerialControl();
arduinoSerialControl.initialize();
arduinoSerialControl.setCompassData(compass.getCompassData());
Thread t=new Thread() {
public void run() {
//the following line will keep this app alive for 1000 seconds,
//waiting for events to occur and responding to them (printing incoming messages to console).
try {Thread.sleep(100000000);} catch (InterruptedException ie) {}
}
};
t.start();
System.out.println("Started");
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public GuiPilotoArduino() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setIconImage(Toolkit.getDefaultToolkit().getImage(GuiPilotoArduino.class.getResource("/guiPilotoArduino/arduino.jpg")));
frame.setBounds(100, 100, 800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Consola Piloto Automatico - Arduino");
JPanel panel = new JPanel();
frame.getContentPane().add(panel, BorderLayout.NORTH);
JLabel lblNewLabel = new JLabel("Consola Piloto Automatico - Arduino");
lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 15));
lblNewLabel.setHorizontalAlignment(SwingConstants.LEFT);
panel.add(lblNewLabel);
tabbedPane = new JTabbedPane(JTabbedPane.TOP);
frame.getContentPane().add(tabbedPane, BorderLayout.CENTER);
compass = new Compass();
tabbedPane.addTab("Brujula", compass);
JPanel panelLabelCompas = new JPanel();
panelLabelCompas.setBackground(Color.WHITE);
panelLabelCompas.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
compass.add(panelLabelCompas, BorderLayout.SOUTH);
panelLabelCompas.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
lblCompas = new JLabel("0\u00BA");
lblCompas.setBackground(new Color(255, 255, 255));
lblCompas.setForeground(Color.BLUE);
lblCompas.setOpaque(true);
lblCompas.setFont(new Font("Tahoma", Font.BOLD, 51));
lblCompas.setBorder(BorderFactory.createLineBorder(Color.WHITE,10));
panelLabelCompas.add(lblCompas);
JPanel parametros = new JPanel();
tabbedPane.addTab("Par\u00E1metros", null, parametros, null);
parametros.setLayout(new BorderLayout(0, 0));
JPanel pnlCabVariables = new JPanel();
pnlCabVariables.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
parametros.add(pnlCabVariables, BorderLayout.NORTH);
pnlCabVariables.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
JLabel lblPuertoArduino = new JLabel("Puerto Arduino:");
pnlCabVariables.add(lblPuertoArduino);
textFieldPuertoArduino = new JTextField();
textFieldPuertoArduino.setToolTipText("<html>\r\n<p>Puerto donde está conectado el Arduino.</p>\r\n<p>Ejemplo por Sistema Operativo</p>\r\n<ul>\r\n<li><strong>Windows: </strong>COM3</li>\r\n<li><strong>Linux: </strong>/dev/ttyACM0</li>\r\n<li><strong>MAC OSX:</strong> /dev/tty.usbserial-A9007UX1</li>\r\n</ul>\r\n</html>");
pnlCabVariables.add(textFieldPuertoArduino);
textFieldPuertoArduino.setColumns(35);
JButton btnConectar = new JButton("Conectar");
btnConectar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
pnlCabVariables.add(btnConectar);
JPanel pnlVariables = new JPanel();
parametros.add(pnlVariables, BorderLayout.CENTER);
GridBagLayout gbl_pnlVariables = new GridBagLayout();
gbl_pnlVariables.columnWidths = new int[]{105, 126, 47, 68, 126, 0};
gbl_pnlVariables.rowHeights = new int[]{20, 20, 0};
gbl_pnlVariables.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
gbl_pnlVariables.rowWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
pnlVariables.setLayout(gbl_pnlVariables);
JLabel lblNewLabel_1 = new JLabel("Rumbo deseado:");
GridBagConstraints gbc_lblNewLabel_1 = new GridBagConstraints();
gbc_lblNewLabel_1.anchor = GridBagConstraints.SOUTHWEST;
gbc_lblNewLabel_1.insets = new Insets(0, 0, 5, 5);
gbc_lblNewLabel_1.gridx = 0;
gbc_lblNewLabel_1.gridy = 0;
pnlVariables.add(lblNewLabel_1, gbc_lblNewLabel_1);
textFieldRumbo = new JFormattedTextField(new Integer(90));
textFieldRumbo.setToolTipText("Rumbo deseado a seguir, introduce un rumbo valido entre 0 y 360 grados.");
textFieldRumbo.setHorizontalAlignment(SwingConstants.RIGHT);
GridBagConstraints gbc_textFieldRumbo = new GridBagConstraints();
gbc_textFieldRumbo.anchor = GridBagConstraints.NORTHWEST;
gbc_textFieldRumbo.insets = new Insets(0, 0, 5, 5);
gbc_textFieldRumbo.gridx = 1;
gbc_textFieldRumbo.gridy = 0;
pnlVariables.add(textFieldRumbo, gbc_textFieldRumbo);
textFieldRumbo.setColumns(15);
JLabel lblDesvioRumbo = new JLabel("Desvio Rumbo");
GridBagConstraints gbc_lblDesvioRumbo = new GridBagConstraints();
gbc_lblDesvioRumbo.anchor = GridBagConstraints.SOUTHWEST;
gbc_lblDesvioRumbo.insets = new Insets(0, 0, 5, 5);
gbc_lblDesvioRumbo.gridx = 3;
gbc_lblDesvioRumbo.gridy = 0;
pnlVariables.add(lblDesvioRumbo, gbc_lblDesvioRumbo);
JFormattedTextField textFieldDesvioRumbo = new JFormattedTextField(new Integer(6));
textFieldDesvioRumbo.setHorizontalAlignment(SwingConstants.RIGHT);
textFieldDesvioRumbo.setToolTipText("<html><p>Desvió máximo permitido sobre el rumbo sin aplicar cambio de rumbo<br />si los márgenes están (+/-) el desvió permitido se hacen pequeñas correcciones <br />sobre el timón a Babor y Estribor para tener una tendencia de acuerdo al rumbo <br />requerido.</p></html>");
textFieldDesvioRumbo.setColumns(15);
GridBagConstraints gbc_textFieldDesvioRumbo = new GridBagConstraints();
gbc_textFieldDesvioRumbo.anchor = GridBagConstraints.NORTHWEST;
gbc_textFieldDesvioRumbo.insets = new Insets(0, 0, 5, 0);
gbc_textFieldDesvioRumbo.gridx = 4;
gbc_textFieldDesvioRumbo.gridy = 0;
pnlVariables.add(textFieldDesvioRumbo, gbc_textFieldDesvioRumbo);
JLabel lblDeclinacinMagnetica = new JLabel("Declinaci\u00F3n magnetica");
GridBagConstraints gbc_lblDeclinacinMagnetica = new GridBagConstraints();
gbc_lblDeclinacinMagnetica.anchor = GridBagConstraints.SOUTHWEST;
gbc_lblDeclinacinMagnetica.insets = new Insets(0, 0, 0, 5);
gbc_lblDeclinacinMagnetica.gridx = 0;
gbc_lblDeclinacinMagnetica.gridy = 1;
pnlVariables.add(lblDeclinacinMagnetica, gbc_lblDeclinacinMagnetica);
JFormattedTextField textFieldDeclinacionMagnetica = new JFormattedTextField(new BigDecimal(-0.333) );
textFieldDeclinacionMagnetica.setHorizontalAlignment(SwingConstants.RIGHT);
textFieldDeclinacionMagnetica.setColumns(15);
textFieldDeclinacionMagnetica.setToolTipText("Declinaci\u00F3n magnetica en grados UN grado igual a 60 minutos, Emplo para Alicante:-0.333 ");
GridBagConstraints gbc_textFieldDeclinacionMagnetica = new GridBagConstraints();
gbc_textFieldDeclinacionMagnetica.anchor = GridBagConstraints.NORTHWEST;
gbc_textFieldDeclinacionMagnetica.insets = new Insets(0, 0, 0, 5);
gbc_textFieldDeclinacionMagnetica.gridx = 1;
gbc_textFieldDeclinacionMagnetica.gridy = 1;
pnlVariables.add(textFieldDeclinacionMagnetica, gbc_textFieldDeclinacionMagnetica);
JLabel lblCorrecinCuadrantes = new JLabel("Correci\u00F3n Cuadrantes");
GridBagConstraints gbc_lblCorrecinCuadrantes = new GridBagConstraints();
gbc_lblCorrecinCuadrantes.anchor = GridBagConstraints.EAST;
gbc_lblCorrecinCuadrantes.insets = new Insets(0, 0, 0, 5);
gbc_lblCorrecinCuadrantes.gridx = 3;
gbc_lblCorrecinCuadrantes.gridy = 1;
pnlVariables.add(lblCorrecinCuadrantes, gbc_lblCorrecinCuadrantes);
JFormattedTextField textFieldCorrecionCuadrantes = new JFormattedTextField(new Integer(45));
textFieldCorrecionCuadrantes.setHorizontalAlignment(SwingConstants.RIGHT);
textFieldCorrecionCuadrantes.setColumns(15);
GridBagConstraints gbc_textFieldCorrecionCuadrantes = new GridBagConstraints();
gbc_textFieldCorrecionCuadrantes.anchor = GridBagConstraints.WEST;
gbc_textFieldCorrecionCuadrantes.gridx = 4;
gbc_textFieldCorrecionCuadrantes.gridy = 1;
pnlVariables.add(textFieldCorrecionCuadrantes, gbc_textFieldCorrecionCuadrantes);
JPanel pnlAplicarCambios = new JPanel();
pnlAplicarCambios.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
parametros.add(pnlAplicarCambios, BorderLayout.SOUTH);
JButton btnAplicarCambios = new JButton("Aplicar cambios");
btnAplicarCambios.setEnabled(false);
btnAplicarCambios.setToolTipText("Envia los cambios realizados al Arduino");
pnlAplicarCambios.add(btnAplicarCambios);
JButton btnLeerVariables = new JButton("Leer variables");
btnLeerVariables.setEnabled(false);
btnLeerVariables.setToolTipText("Recupera las variables del arduino y actualiza nuestros valres");
pnlAplicarCambios.add(btnLeerVariables);
JPanel logEventos = new JPanel();
tabbedPane.addTab("Log", null, logEventos, null);
logEventos.setLayout(new BorderLayout(0, 0));
JScrollPane scrollPane = new JScrollPane();
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
logEventos.add(scrollPane);
textPane = new JTextPane();
textPane.setBackground(SystemColor.text);
textPane.setEditable(false);
scrollPane.setViewportView(textPane);
JPanel pnlEvntLog = new JPanel();
logEventos.add(pnlEvntLog, BorderLayout.NORTH);
JButton btnClearLog = new JButton("Borrar Log");
btnClearLog.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
textPane.setText("");
}
});
pnlEvntLog.add(btnClearLog);
DefaultCaret caret = (DefaultCaret)textPane.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
}
}