|
|
Ein Slider steuert einen Servo
Ziel:
Den Winkel eines Servomotors steuern.
Ein Java-Programm sendet Informationen zu Arduino.
Das Java Programm (es ist ein sog. "Frontend") enthält einen
Slider (Schieberegler), der die Werte 0 bis 180 liefert.
Diese Werte werden über USB an den Arduino gesendet.
Arduino benutzt diese Werte zum Steuern des Winkels (0 ... 180
Grad) eines Servomotors, der an Pin 9 angeschlossen ist.
Du solltest vorher unbedingt die Experimente Servo und Datenübertragung mit Java
erfolgreich durchgeführt haben.

Java-Programm:
Du legst eine neue Klasse namens "EinServoMotor"
an.
Ist die geforderte Klasse bei Dir angelegt, steht schon
einwenig Code darin. Diesen vorhandenen Code kannst Du
komplett löschen und statt dessen dort den folgenden
Programmcode hineinkopieren:
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import jssc.SerialPort;
import jssc.SerialPortException;
@SuppressWarnings("serial")
public class EinServoMotor extends JFrame implements
ChangeListener {
JPanel panelEinServo;
JSlider sli;
JLabel lbl;
int gradZahl;
SerialPort sp;
public static void main(String[]
args) {
new
EinServoMotor();
}
public EinServoMotor() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setTitle("Servo");
this.setBounds(400, 120, 160, 600);
this.setResizable(false);
this.setLayout(null);
this.createPanels();
this.setVisible(true);
// Hier DEINEN Port eintragen!
this.sp = new
SerialPort("COM3");
try {
sp.openPort();
sp.setParams(9600, 8, 1, 0);
} catch
(SerialPortException e) {
e.printStackTrace();
}
}
private void createPanels() {
panelEinServo =
new JPanel();
panelEinServo.setBounds(30, 10, 100, 550);
panelEinServo.setLayout(null);
panelEinServo.setBorder(BorderFactory.createTitledBorder("Gradzahl"));
this.add(panelEinServo);
sli = new
JSlider(JSlider.VERTICAL, 0, 180, 0);
sli.setBounds(25,
60, 50, 445);
sli.setMajorTickSpacing(20); // grosse Striche
sli.setPaintTicks(true); // Striche sichtbar
sli.setPaintLabels(true); // Zahlen sichtbar
panelEinServo.add(sli);
sli.addChangeListener(this);
sli.addChangeListener(this);
lbl = new
JLabel("90 Grad");
lbl.setBounds(20,
510, 60, 25);
lbl.setHorizontalAlignment(JLabel.CENTER);
panelEinServo.add(lbl);
}
@Override
public void stateChanged(ChangeEvent
e) {
gradZahl =
sli.getValue();
lbl.setText(String.valueOf(gradZahl) + " Grad");
try
{
sp.writeInt(gradZahl);
} catch
(SerialPortException spe) {
spe.printStackTrace();
}
}
}
Arduino-Programm:
#include <Servo.h>
Servo meinServomotor;
int gradZahl;
void setup() {
Serial.begin(9600);
meinServomotor.attach(9); //Servo an Pin 9
}
void loop() {
if (Serial.available() > 0) {
gradZahl=Serial.read();
}
meinServomotor.write(gradZahl);
delay(10);
}
Eine Erweiterung dieses Programmes mit 6 Sliders findest Du hier.
|