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