|
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.
|