|
Die 6 Analogwerte auf dem Computer als Balken ausgeben
Ziel:
Arduino sendet Informationen zu einem Java-Programm.

Ein Java-Programm (es ist ein sog. "Frontend") empfängt die 6
Analogwerte vom Arduino und gibt sie als Balken und Zahlenwerte
aus.
Die Werte werden über USB (also seriell) vom Arduino zum
Computer gesendet.
Du solltest vorher unbedingt dieses Experiment
erfolgreich durchgeführt haben.
Schaltung:
Um die Schaltung einfach zu halten, wollen wir erstmal nur einen
Analogeingang benutzen:

Der einstellbare Widerstand ist ein Poti oder ein Trimmer von 10
KiloOhm.
Grö฿ere Werte gehen auch problemlos.
Das Arduino-Programm:
int Wert0,
Wert1, Wert2, Wert3, Wert4, Wert5;
void setup() {
Serial.begin(9600);
}
void loop() {
Wert0 = analogRead(A0);
Wert1 = analogRead(A1);
Wert2 = analogRead(A2);
Wert3 = analogRead(A3);
Wert4 = analogRead(A4);
Wert5 = analogRead(A5);
String myString = "@" + String(Wert0)
+ ";"
+ String(Wert1) + ";"
+ String(Wert2) + ";"
+ String(Wert4) + ";"
+ String(Wert4) + ";"
+ String(Wert5) + "#";
Serial.println(myString);
Serial.flush();
delay(1000);
}
Die sechs Werte werden den 6 Analogeingängen entnommen und zu
einem String "myString" zusammengebaut,
der z. B. so aussehen könnte:
@317;299;300;314;320;250#
Es gibt vorn ein @ und hinten ein # sowie dazwischen die
mittels Semikolons getrennten Werte.
Dieser String wird dann gesendet mit:
Serial.println(myString);
Nachdem das Programm in den Arduino geschoben wurde, sendet
dieser nun im Abstand von 1000ms diesen String mit den aktuellen
Werten über die serielle Schnittstelle.
Das Java-Program:
In Deinem Java-Projekt legst Du ein neues Package
namens: "analog " an, wenn Du es
nicht schon im letzten Experiment getan hast.
In dem Package "analog "
legst Du eine neue Klasse namens "SechsAnalogwerteAlsBalkenDarstellen "
an.
Ist die geforderte Klasse bei Dir angelegt, steht schon
einwenig Code darin.
Den kannst Du komplett löschen und statt dessen dort den
folgenden Programmcode hineinkopieren:
package analog;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;
public class SechsAnalogwerteAlsBalkenDarstellen
extends JFrame implements
SerialPortEventListener {
//hier musst Du
Deinen Port angeben:
private SerialPort serialPort = new
SerialPort("/dev/tty.usbmodem24131");
private String sammler = "";
private JLabel[] lblNr = new
JLabel[6];
private JLabel[] lblWert = new
JLabel[6];
private JProgressBar[] bar = new
JProgressBar[6];
public SechsAnalogwerteAlsBalkenDarstellen()
{
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setBounds(20,
20, 640, 350);
this.setTitle("6
Analogwerte des Arduino als Balken ausgeben");
this.setLayout(null);
createComponents();
this.setVisible(true);
initSerialPort();
}
private void createComponents() {
for (int i = 0; i
< 6; i++) {
bar[i] = new JProgressBar(0, 1024); // Min, Max
bar[i].setBounds(50, 40 + i * 40, 512, 30);
this.add(bar[i]);
lblNr[i] = new JLabel("A" + String.valueOf(i));
lblNr[i].setBounds(20, 42 + i * 40, 50, 25);
this.add(lblNr[i]);
lblWert[i] = new JLabel("0");
lblWert[i].setBounds(580, 42 + i * 40, 50, 25);
this.add(lblWert[i]);
}
}
private void initSerialPort() {
try {
serialPort.openPort();
serialPort.setParams(9600, 8, 1, 0);
serialPort.addEventListener(this);
} catch
(SerialPortException ex) {
System.out.println(ex);
}
}
public static void main(String[]
args) {
new SechsAnalogwerteAlsBalkenDarstellen();
}
@Override
public void
serialEvent(SerialPortEvent arg0) {
try {
sammler += serialPort.readString();
sammler = sammler.replaceAll("null", "");
sammler = sammler.replaceAll("\n", "");
sammler = sammler.replaceAll("\r", "");
// Test auf Vorhandensein
von "@" und dahinter "#"
if ( sammler.indexOf("@") > -1 &&
sammler.indexOf("#") > sammler.indexOf("@") ) {
// String zwischen '@' und '#' herausholen
sammler = sammler.substring(1, sammler.indexOf("#"));
String[] wert = sammler.split(";");
for (int nummer = 0; nummer < 6;
nummer++) {
bar[nummer].setValue(Integer.parseInt(wert[nummer]));
lblWert[nummer].setText(wert[nummer]);
}
sammler = "";
}
} catch
(SerialPortException ex) {
System.out.println(ex);
}
}
}
|