|
Sechs Slider steuern sechs LEDs
Ziel:
Mit einem Java-Programm die Helligkeit von 6 LEDs
steuern.
Ein Java-Programm (es ist ein sog. "Frontend") mit sechs Sliders
(Schieberegler) liefert sechs Zahlenwerte, die über USB zum
Arduino gesendet werden.
Arduino steuert mit diesen 6 Werten 6 LEDs, die an den
PWM-fähigen Ausgängen hängen.
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:
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 SixSlidersToArduino extends JFrame
implements ChangeListener {
JSlider[] sli = new JSlider[6];
JLabel[] lbl = new JLabel[6];
int nummer, wert;
int[] pwmOutput = { 3, 5, 6, 9, 10,
11 }; // Arduino-PWM-Pin-Nummern
// hier DEINEN
Port eintragen:
private SerialPort sp = new
SerialPort("COM8");
public SixSlidersToArduino() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setBounds(20, 20, 690, 400);
this.setTitle("6
Slider steuern die Helligkeit von 6 LEDs");
this.setLayout(null);
this.createComponents();
this.setVisible(true);
}
private void createComponents() {
// Sliders and
Labels
for (int i = 0;
i < 6; i++) {
sli[i] = new
JSlider(JSlider.VERTICAL, 0, 255, 0);
sli[i].setBounds(50 + 100 * i, 20,
70, 300);
sli[i].setMajorTickSpacing(50); //
Große Skalenstriche
sli[i].setMinorTickSpacing(5); //
Kleine Skalenstriche
sli[i].setPaintTicks(true);
sli[i].setPaintLabels(true);
sli[i].addChangeListener(this);
this.add(sli[i]);
lbl[i] = new JLabel("0");
lbl[i].setBounds(44 + 100 * i, 315,
50, 25);
lbl[i].setHorizontalAlignment(JLabel.CENTER);
this.add(lbl[i]);
}
// Serial Port:
try {
sp.openPort();
sp.setParams(9600, 8, 1, 0);
} catch
(SerialPortException e) { }
}
@Override
public void
stateChanged(ChangeEvent e) {
for (int i = 0;
i < 6; i++) {
if (e.getSource() == sli[i]) {
lbl[i].setText(String.valueOf(sli[i].getValue()));
nummer = i;
}
}
wert =
sli[nummer].getValue();
int[] value =
new int[] { pwmOutput[nummer], wert };
try {
sp.writeIntArray(value);
} catch
(SerialPortException e1) { }
}
public static void main(String
args[]) throws SerialPortException {
new
SixSlidersToArduino();
}
}
Arduino-Program:
int pinNummer, pwmWert;
void setup() {
Serial.begin(9600);
}
void loop() {
while ( Serial.available() > 1 ) {
// zwei Werte aus dem Puffer lesen
pinNummer = Serial.read();
pwmWert = Serial.read();
analogWrite(pinNummer, pwmWert);
delay(5);
}
}
|