|
Die 6 Analogwerte auf dem Computer als Zahlen ausgeben
Ziel:
Ein Java-Programm empfängt die 6 Analogwerte vom Arduino und
gibt sie 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:
Du hast sicher bei der Grundübung ein Projekt (z. B. "Arduino")
angelegt - der Name des Projektes ist egal.
Aber die folgenden Namen solltest Du wie gefordert vergeben,
damit Du später den untenstehenden Java-Programmcode exakt so
bei Dir einfügen kannst.
In Deinem Java-Projekt legst Du ein neues Package namens:
"analog" an.
In dem Package "analog" legst Du eine neue Klasse namens
"SechsAnalogWerteInFrameAlsZahlenAusgeben" 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.* ;
import jssc.* ;
@SuppressWarnings("serial")
public class
SechsAnalogWerteInFrameAlsZahlenAusgeben extends JFrame
implements SerialPortEventListener
{
//hier
musst Du Deinen Port angeben:
private
SerialPort serialPort = new SerialPort("COM3");
private
JLabel[] lbl = new JLabel[6];
private
String sammler = "";
public
SechsAnalogWerteInFrameAlsZahlenAusgeben() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setBounds(20, 20, 750, 150);
this.setTitle("6 Analogwerte des Arduino ausgeben");
this.setLayout(null);
createLabels();
this.setVisible(true);
initSerialPort();
}
private
void initSerialPort() {
try {
serialPort.openPort();
serialPort.setParams(9600, 8, 1, 0);
serialPort.addEventListener(this);
} catch (SerialPortException ex) {
System.out.println(ex);
}
}
private
void createLabels() {
for (int i = 0; i < 6; i++) {
lbl[i] = new JLabel("lbl_" + String.valueOf(i));
lbl[i].setBounds(70 + i * 100, 40, 100, 50);
lbl[i].setFont(new Font("Arial", Font.PLAIN, 30));
this.add(lbl[i]);
}
}
public
static void main(String[] args) {
new SechsAnalogWerteInFrameAlsZahlenAusgeben();
}
@Override
public
void serialEvent(SerialPortEvent e) {
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++) {
lbl[nummer].setText(wert[nummer]);
}
sammler = "";
}
} catch (SerialPortException ex) {
System.out.println(ex);
}
}
}
|