Die 6 Analogwerte auf dem Computer als Zeiger 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 Zeiger (eigentlich sind es Sliders) 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:


           

Der einstellbare Widerstand ist ein Poti oder ein Trimmer von 10 KiloOhm. Grö฿ere Werte gehen auch problemlos.
Im Bild wird der Analogwert lediglich an A0 gelegt, was Du später ändern kannst.



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:

package analog;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;

import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;

public class SechsAnalogwerteAlsZeigerDarstellen 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    JSlider[] sli = new JSlider[6];

    public SechsAnalogwerteAlsZeigerDarstellen() {
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setBounds(20, 20, 640, 470);
        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++) {
            sli[i] = new JSlider(0, 1024); // Min, Max
            sli[i].setBounds(50, 40 + i * 60, 512, 50);
            sli[i].setMajorTickSpacing(100);  // grosse Striche
            sli[i].setMinorTickSpacing(10);   // kleine Striche
            sli[i].setPaintTicks(true);      // Striche sichtbar
            sli[i].setPaintLabels(true);     // Zahlen sichtbar

            this.add(sli[i]);
           
            lblNr[i] = new JLabel("A" + String.valueOf(i));
            lblNr[i].setBounds(20, 42 + i * 60, 50, 25);
            this.add(lblNr[i]);
           
            lblWert[i] = new JLabel("0");
            lblWert[i].setBounds(580, 42 + i * 60, 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 SechsAnalogwerteAlsZeigerDarstellen();
    }

    @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++) {
                    sli[nummer].setValue(Integer.parseInt(wert[nummer]));
                    lblWert[nummer].setText(wert[nummer]);
                }

                sammler = "";
            }

        } catch (SerialPortException ex) {
            System.out.println(ex);
        }
    }
}