Em alguns projetos, é desejável
aplicações que realizem comunicação com o Arduino para leitura e envio
de dados. Uma solução é o Processing, porém para desfrutar de vários
recursos desenvolveremos em Java! Nesse exemplo, enviaremos os dados
lidos pelo
sensor de umidade de solo. (O código utilizado no Arduino será o mesmo do tutorial).
Serão necessárias as seguintes bibliotecas:
-
RXTXcomm
-
Arduino by Panama Hitek (Uma biblioteca interessante que possui comandos que facilitam!)
Após a instalação da biblioteca RXTXcomm, importe-as para o seu projeto!
Abra um novo JFrame, adicione o Label e o campo de texto:
O código-fonte completo será:
import Arduino.Arduino;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Window extends javax.swing.JFrame {
Arduino myarduino = new Arduino();
SerialPortEventListener evento = new SerialPortEventListener() {
@Override
public void serialEvent(SerialPortEvent spe) {
//enquanto houver dados na porta serial
if(myarduino.MessageAvailable()==true){
String teste = myarduino.PrintMessage();
jTextField.setText(teste);
}
}
};
public Window() throws ClassNotFoundException {
initComponents();
try {
//configuraçao
myarduino.ArduinoRXTX("COM5", 2000, 9600, evento);
} catch (Exception ex) {
Logger.getLogger(Window.class.getName()).log(Level.SEVERE, null, ex);
}
}
@SuppressWarnings("unchecked")
//
private void initComponents() {
jTextField = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
});
jTextField.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
jTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextFieldActionPerformed(evt);
}
});
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel1.setText("UMIDADE:");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(31, 31, 31)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(25, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(34, 34, 34)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addContainerGap(23, Short.MAX_VALUE))
);
pack();
}//
private void jTextFieldActionPerformed(java.awt.event.ActionEvent evt) {
}
private void formWindowOpened(java.awt.event.WindowEvent evt) {
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
new Window().setVisible(true);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Window.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JTextField jTextField;
// End of variables declaration
}
by
Daniela Marques de Morais 29/11/2014
O dado lido na porta serial está na String "teste" e agora poderá ser manipulada!
Lembre-se de alterar as configurações como desejar, conecte o Arduino no PC e compile! Os dados serão atualizados em tempo real:
0 comentários:
Postar um comentário