Sechs Slider liefern Werte für das LCD



Ziel:   

Ein Java-Programm sendet Informationen zu Arduino.

Ein Java-Programm (es ist ein sog. "Frontend") mit sechs Sliders (Schieberegler) liefern sechs Zahlenwerte, die auf dem LCD angezeigt werden.
Der Wert wird über USB (also seriell) zum Arduino gesendet.

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


Dies ist eine Erweiterung von dem vorherigen Projekt, in dem nur ein Slider benutzt wird.
Falls also etwas nicht klar für Dich ist, dann lies unbedingt erst jenes Projekt durch!

Die Erweiterung besteht in der Beantwortung der Frage, wie man denn nun mehrere Werte seriell zum Arduino senden kann.



                       


           




Java-Program:

package lcdshield;

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

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import jssc.SerialPort;
import jssc.SerialPortException;

@SuppressWarnings("serial")
public class SechsSliderToLcdAsNumber extends JFrame implements ChangeListener,
        MouseListener {

    private JSlider[] sli = new JSlider[6];
    private JLabel[] lbl = new JLabel[6];

    // hier Deinen Port eintragen:
    private SerialPort sp = new SerialPort("/dev/tty.usbmodem24131");

    private int wert, nummer;

    public SechsSliderToLcdAsNumber() throws SerialPortException {

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setBounds(20, 20, 350, 300);
        this.setTitle("6 Slider zu LCD");
        this.setLayout(null);

        this.createComponents();

        this.setVisible(true);

        sp.openPort();
        sp.setParams(9600, 8, 1, 0);
    }

    private void createComponents() {

        for (int i = 0; i < 6; i++) {

            sli[i] = new JSlider(JSlider.VERTICAL, 0, 255, 0);
            sli[i].setBounds(50 + 40 * i, 20, 25, 200);
            this.add(sli[i]);
            sli[i].addMouseListener(this);
            sli[i].addChangeListener(this);

            lbl[i] = new JLabel("0");
            lbl[i].setBounds(44 + 40 * i, 215, 39, 25);
            lbl[i].setHorizontalAlignment(JLabel.CENTER);
            this.add(lbl[i]);
        }

    }

    private void writeToArduino(int nr, int value) {

        try {
            sp.writeInt(nr);
            sp.writeInt(value);

        } catch (SerialPortException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void stateChanged(ChangeEvent e) {
        for (int i = 0; i < 6; i++) {
            if (e.getSource() == sli[i]) {
                lbl[i].setEnabled(false);
                lbl[i].setText(String.valueOf(sli[i].getValue()));
                nummer = i;
            }
        }
    }

    @Override
    public void mouseReleased(MouseEvent e) {
       
        lbl[nummer].setEnabled(true);
        wert = sli[nummer].getValue();
        writeToArduino(nummer, wert);
    }

    @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 SechsSliderToLcdAsNumber();

    }
}



Arduino-Program:

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

int nummer, wert;
int myArray[] = { 0, 0, 0, 0, 0, 0};

void setup() {

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


void loop() {

  if (Serial.available() > 0) {
  
    nummer=Serial.read();
    wert=Serial.read();
  
    myArray[nummer] = wert;

    ausgeben();
  }
 
  delay(50);

}


void ausgeben(){

  lcd.setCursor(0, 0); lcd.print("                ");
  lcd.setCursor(0, 1); lcd.print("                ");
  
  lcd.setCursor(0, 0); lcd.print(myArray[0]);
  lcd.setCursor(6, 0); lcd.print(myArray[1]);
  lcd.setCursor(12,0); lcd.print(myArray[2]);
 
  lcd.setCursor(0, 1); lcd.print(myArray[3]);
  lcd.setCursor(6, 1); lcd.print(myArray[4]);
  lcd.setCursor(12,1); lcd.print(myArray[5]);
 
}