私は JavaFX とコントローラ クラス、FXML および Jssc を使用して arduino を制御する単純なアプリケーションに取り組んでいます。arduino は、sg90 サーボ モーターと LED に接続されています。
サーボモーターを制御するスライダーに問題があります。スライダーを使用してサーボモーターの角度を制御したいのですが、スライダーのつまみをドラッグするたびに、サーボは常にその角度を更新します。
ここにコードが機能するコントローラークラスがありますが、問題は、スライダーとサーボのコントロールを実装する方法がわからないことです。
public class ServoCtrl は Initializable を実装します {
@FXML
private Button IncrBtn = new Button();
@FXML
private Button DecrBtn = new Button();
@FXML
private ToggleButton toggleConnectSerial = new ToggleButton();
@FXML
private ToggleButton lightSwitcH = new ToggleButton();
@FXML
private Slider AngleSlider = new Slider(0, 180, 90);
@FXML
private TextField tfAngle = new TextField();
@FXML
private TextField tfSteps = new TextField();
SerialPort ServoSerialPort;
private int tempstr = 0;
@Override
public void initialize(URL location, ResourceBundle resources) {
// TODO Auto-generated method stub
tfAngle.textProperty().bindBidirectional(AngleSlider.valueProperty(), NumberFormat.getIntegerInstance());
//disable all port when starting the application
AngleSlider.setDisable(true);
lightSwitcH.setDisable(true);
IncrBtn.setDisable(true);
DecrBtn.setDisable(true);
tfAngle.setDisable(true);
tfSteps.setDisable(true);
}
/*--------- increase or decrease slider value using buttons---------------------------------*/
public void IncrBtnPress(ActionEvent btnIncr) {
tempstr = Integer.parseInt(tfSteps.getText());
AngleSlider.setValue(Integer.parseInt(tfAngle.getText()) + tempstr);
tfAngle.setText(Integer.toString((int) AngleSlider.getValue()));
}
public void DecrBtnPress(ActionEvent btnDecr) {
tempstr = Integer.parseInt(tfSteps.getText());
AngleSlider.setValue(Integer.parseInt(tfAngle.getText()) - tempstr);
tfAngle.setText(Integer.toString((int) AngleSlider.getValue()));
}
/*-----------toggle Switch on light-----------------------------------*/
public void lightSwitch(ActionEvent eve) {
try {
if (lightSwitcH.isSelected() == true) {
lightSwitcH.setText("OFF");
/*
* send the following string commands 3 = led number 1 = On, 0 =
* Off / = seperator - = wait for next command
*
*/
// turn on led
ServoSerialPort.writeString("3/1-");
} else {
// turn off led
lightSwitcH.setText("ON");
ServoSerialPort.writeString("3/0-");
}
}
catch (SerialPortException e) {
e.printStackTrace();
}
}
/*-------------------- connect or disconnect port-------------------------*/
public void toggleConnect(ActionEvent tgle) {
if (toggleConnectSerial.isSelected() == true) {
// enable control when serial port is connected
AngleSlider.setDisable(false);
lightSwitcH.setDisable(false);
IncrBtn.setDisable(false);
DecrBtn.setDisable(false);
tfAngle.setDisable(false);
tfSteps.setDisable(false);
// set the port name
ServoSerialPort = new SerialPort("COM8");
try {
// set the toggle button text to disconnect
toggleConnectSerial.setText("Disconnect");
// open the serial port
ServoSerialPort.openPort();
// set the port parameters
ServoSerialPort.setParams(SerialPort.BAUDRATE_115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (SerialPortException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
// disable all control when port is disconnected
AngleSlider.setDisable(true);
lightSwitcH.setDisable(true);
IncrBtn.setDisable(true);
DecrBtn.setDisable(true);
tfAngle.setDisable(true);
tfSteps.setDisable(true);
toggleConnectSerial.setText("Connect");
try {
ServoSerialPort.closePort();
} catch (SerialPortException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}