/
Thermometer2.java
155 lines (141 loc) · 6.8 KB
/
Thermometer2.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package Java_Arduino.Thermometer;
import com.panamahitek.ArduinoException;
import com.panamahitek.PanamaHitek_Arduino;
import com.panamahitek.PanamaHitek_MultiMessage;
import com.panamahitek.liveinterfaces.PanamaHitek_ThermometerChart;
import java.util.logging.Level;
import java.util.logging.Logger;
import jssc.SerialPortEvent;
import jssc.SerialPortException;
import org.jfree.chart.plot.ThermometerPlot;
/**
* Ejemplo sobre gráficos en tiempo real con Arduino y Java
*
* @author Antony García González, de Proyecto Panama Hitek. Visita
* http://panamahitek.com
*/
public class Thermometer2 extends javax.swing.JFrame {
public Thermometer2() {
try {
initComponents();
//Se crea una instancia de la clase para la gestion de graficos
PanamaHitek_ThermometerChart chart
= new PanamaHitek_ThermometerChart("Temperatura - Sensor DHT22"); //Título de la gráfica
//Se establece la unidad en Celsius
chart.setThermometerUnit(ThermometerPlot.UNITS_CELCIUS);
//Límite inferior y superior de la grafica
chart.setChartLimitValues(0, 50);
//Distribucion porcentual de los colores verde, amarillo y rojo
chart.setColorDistribuition(70, 20, 10);
//Se inserta el grafico en el panel
chart.insertToPanel(jPanel1);
//Se crea un objeto para la gestion de la conexion con Arduino
PanamaHitek_Arduino ino = new PanamaHitek_Arduino();
//Se crea un buffer de clasificacion de mensajes recibidos
PanamaHitek_MultiMessage multi = new PanamaHitek_MultiMessage(2, ino);
/**
* Se inicia la conexion con Arduino, especificando las acciones a
* tomar cada vez que se reciben datos a través del Puerto Serie
*
* Para simplificar esta declaración de ha utilizado una expresión
* Lambda
*/
ino.arduinoRX("COM16", 9600, (SerialPortEvent serialPortEvent) -> {
try {
//Se recibe la informacion y se inserta en la grafica
if (multi.dataReceptionCompleted()) {
/**
* Se reciben los datos de los sensores 0 y 1 y se
* insertan la temperatura en la grafica.
*/
chart.setValue(Double.parseDouble(multi.getMessage(0)));
//Se limpia el buffer
multi.flushBuffer();
}
} catch (ArduinoException | SerialPortException ex) {
Logger.getLogger(Thermometer2.class.getName()).log(Level.SEVERE, null, ex);
}
});
} catch (Exception ex) {
Logger.getLogger(Thermometer2.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 376, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 474, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Thermometer2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Thermometer2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Thermometer2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Thermometer2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
//</editor-fold>
//</editor-fold>
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Thermometer2().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel jPanel1;
// End of variables declaration//GEN-END:variables
}