Mit Java Text zum LCD senden



Ziel:   

Ein Java-Programm sendet Informationen zu Arduino.

Ein Java-Programm (es ist ein sog. "Frontend") nimmt zwei Zeilen Text entgegen und sendet diese zum LCD des Arduino.
Der Text wird über USB (also seriell) zum Arduino gesendet.

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



                      


       

              


Java-Program:


package lcdshield;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import jssc.SerialPort;
import jssc.SerialPortException;

@SuppressWarnings("serial")
public class TextZuArduino extends JFrame implements DocumentListener,
        ActionListener {

    private SerialPort sp;
    private JTextField txtObereZeile;
    private JTextField txtUntereZeile;
    private JButton btnSenden;
    private JButton btnLoeschen;
    private JLabel lblObereZeile;
    private JLabel lblUntereZeile;
    private String obererText, untererText;


    public TextZuArduino() throws SerialPortException {

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setBounds(200, 200, 330, 170);
        this.setTitle("Text zu Arduino LCD");
        this.setLayout(null);

        this.createComponents();

        this.setVisible(true);

        // hier mußt Du Deinen Port eintragen:
        sp = new SerialPort("/dev/tty.usbmodem24131");
        sp.openPort();
        sp.setParams(9600, 8, 1, 0);
    }

    private void createComponents() {

        txtObereZeile = new JTextField();
        txtObereZeile.setBounds(10, 10, 170, 25);
        txtObereZeile.getDocument().addDocumentListener(this);
        this.add(txtObereZeile);

        txtUntereZeile = new JTextField();
        txtUntereZeile.setBounds(10, 40, 170, 25);
        txtUntereZeile.getDocument().addDocumentListener(this);
        this.add(txtUntereZeile);

        lblObereZeile = new JLabel("noch 16 Zeichen");
        lblObereZeile.setBounds(185, 10, 200, 25);
        this.add(lblObereZeile);

        lblUntereZeile = new JLabel("noch 16 Zeichen");
        lblUntereZeile.setBounds(185, 40, 200, 25);
        this.add(lblUntereZeile);

        btnSenden = new JButton("senden");
        btnSenden.setBounds(10, 70, 170, 25);
        btnSenden.addActionListener(this);
        this.add(btnSenden);

        btnLoeschen = new JButton("clear");
        btnLoeschen.setBounds(10, 95, 170, 25);
        btnLoeschen.addActionListener(this);
        this.add(btnLoeschen);

    }

    @Override
    public void actionPerformed(ActionEvent ae) {

        if (ae.getSource() == btnLoeschen) {
            txtObereZeile.setText("");
            txtUntereZeile.setText("");
        }

        try {
            sp.writeString(obererText + "\n");
            sp.writeString(untererText + "\n");
        } catch (SerialPortException spe) {
            spe.printStackTrace();
        }
    }

    private void laengeMessen() {
        obererText = txtObereZeile.getText();
        lblObereZeile.setText("noch "
                + String.valueOf(16 - obererText.length()) + " Zeichen");
        if (obererText.length() > 16) {
            lblObereZeile.setText("zu lang!");
        }

        untererText = txtUntereZeile.getText();
        lblUntereZeile.setText("noch "
                + String.valueOf(16 - untererText.length()) + " Zeichen");
        if (untererText.length() > 16) {
            lblUntereZeile.setText("zu lang!");
        }
    }

    @Override
    public void changedUpdate(DocumentEvent e) {
        laengeMessen();
    }

    @Override
    public void insertUpdate(DocumentEvent dEvnt) {
        laengeMessen();
    }

    @Override
    public void removeUpdate(DocumentEvent dEvnt) {
        laengeMessen();
    }

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



Arduino-Program:


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

String str1, str2;

void setup()
{

  lcd.clear();     
  lcd.begin(16, 2);
  Serial.begin(9600);
}



void loop()
{
  if(Serial.available() > 0)
  {
    str1 = Serial.readStringUntil('\n');
    str2 = Serial.readStringUntil('\n');
    lcd.clear();
  }
       
  lcd.setCursor(0, 0);
  lcd.print(str1);
  lcd.setCursor(0, 1);
  lcd.print(str2);
 
  delay(50); //eine Pause kann nie schaden
}