Ein Slider liefert einen Wert für das LCD



Ziel:   

Ein Java-Programm sendet Informationen zu Arduino.


Ein Java-Programm (es ist ein sog. "Frontend") mit einem Slider (Schieberegler) liefert einen Zahlenwert, der auf dem LCD angezeigt wird.
Der Wert wird über USB (also seriell) zum Arduino gesendet.




                       


           



Du solltest vorher unbedingt dieses Experiment erfolgreich durchgeführt haben.





Java-Programm:

In Deinem Java-Projekt legst Du ein neues Package namens: "lcdshield" an.

In dem Package "lcdshield" legst Du eine neue Klasse namens "EinSliderLiefertWertZuArduino" 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 lcdshield;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

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

import jssc.SerialPort;
import jssc.SerialPortException;

@SuppressWarnings("serial")
public class EinSliderLiefertWertZuArduino extends JFrame implements MouseListener {

    private JSlider sli;
    private SerialPort sp;
   

    public EinSliderLiefertWertZuArduino() throws SerialPortException {
       
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setBounds(20, 20, 380, 100); // Fenster: x, y, breite, hoehe
        this.setTitle("Ein Slider liefert seriell Wert zu Arduino");
        this.setLayout(null);

        this.createComponents();

        this.setVisible(true);
     

        //hier musst Du Deinen seriellen Port eintragen:

        sp = new SerialPort("/dev/tty.usbmodem24131");
       
        sp.openPort();
       
        sp.setParams(9600, 8, 1, 0);

    }


    private void createComponents() {
       
        sli = new JSlider( 0, 255, 0);  // min, max, startwert
        sli.setBounds(10, 20, 330, 45); // x, y, breite, hoehe
        sli.setMajorTickSpacing(50);    // Große Skalenstriche
        sli.setMinorTickSpacing(5);     // Kleine Skalenstriche
        sli.setPaintTicks(true);
        sli.setPaintLabels(true);
        sli.addMouseListener(this);
        this.add(sli);
    }

   

    @Override
    public void mouseReleased(MouseEvent arg0) {
   
        try {
            sp.writeInt(sli.getValue());
        } catch (SerialPortException e) {
            e.printStackTrace();
        }
       
    }


    @Override
    public void mouseClicked(MouseEvent arg0) {
    }

    @Override
    public void mouseEntered(MouseEvent arg0) {
    }

    @Override
    public void mouseExited(MouseEvent arg0) {
    }

    @Override
    public void mousePressed(MouseEvent arg0) {
    }


    public static void main(String args[]) throws SerialPortException {
        new EinSliderLiefertWertZuArduino();

    }
}



Arduino-Programm:

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

int wert;


void setup() {

  lcd.clear();  lcd.begin(16, 2);

  Serial.begin(9600);

}


void loop() {

  if (Serial.available() > 0) {

    wert = Serial.read();
   
    //alten Wert löschen
    lcd.setCursor(7, 0); lcd.print("    ");
   
    //neuen Wert schreiben
    lcd.setCursor(7, 0); lcd.print(wert);

  }

  delay(50); //eine kleine Pause kann nie schaden

}

Eine Erweiterung dieses Programmes mit 6 Sliders findest Du hier.


Erläuterungen zum Java-Programm:

Zunächst wurde versucht, bei jedem Slider-Value-Change den Wert seriell zu schreiben.
Dies misslang, da die übertragung so schnell nicht vom Arduino entgegengenommen wurde.
Daher wird hier im Programm der serielle Schreibvorgang erst beim Mouse-Released-Ereignis aufgerufen.