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);
        }
    }
}