我想使用Pi4J通过Raspberry PI的GPIO引脚控制MG90S Servo

我已经创建了一个带有hz和一个占空比(“ High in ms:”)键盘输入的Java应用程序。

import java.util.Scanner;

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;

public class Main {
    public static void main(String[] args) throws InterruptedException {
        GpioController gpioFactory = GpioFactory.getInstance();
        GpioPinDigitalOutput myServo =  gpioFactory.provisionDigitalOutputPin(
                    RaspiPin.GPIO_07, PinState.LOW);

        //Input of hz and duty cycle
        System.out.println("Hz:");
        Scanner scanner = new Scanner(System.in);
        float hz = scanner.nextFloat();
        System.out.println("High in ms:");
        float highTime = scanner.nextFloat();
        scanner.close();

        //Calculate GPIO low time: hz period time - duty time
        float lowTime = 1000 / hz - highTime;

        while (true) {
            myServo.high();
            long upMs = new Float(highTime).longValue(); // Up time miliseconds
            int upNanos = new Float(highTime * 1000000 % 1000000).intValue(); // Up time nanoseconds
            java.lang.Thread.sleep(upMs, upNanos);

            myServo.low();
            long lowMs = new Float(lowTime).longValue();
            int lowNanos = new Float(lowTime * 1000000 % 1000000).intValue();

            java.lang.Thread.sleep(lowMs, lowNanos);

        }
    }
}


范例1:
使用以下输入,我希望伺服器处于0°
回转。

hz:50
高毫秒:1

结果:伺服器的角度为预期的0°。

范例2:
通过以下输入,我希望伺服器旋转180°。

hz:50
ms高:2

结果:伺服器旋转约80°。

有谁知道我在做什么错?

最佳答案

我在另一个伺服器上也遇到了类似的问题(我认为这是arduino的东西)。

我只是校准给定值,以使结果正确。我不知道它来自哪里,但伺服器做了我想要的。

关于java - 在Raspberry PI 2上使用Java和Pi4J控制伺服器的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31057123/

10-09 15:42