Java源码示例:com.pi4j.io.gpio.GpioPinPwmOutput
示例1
private static GpioPinPwmOutput[] provisionPwmOutputs(final PCA9685GpioProvider gpioProvider) {
GpioController gpio = GpioFactory.getInstance();
GpioPinPwmOutput myOutputs[] = {
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_00, "Pulse 00"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_01, "Pulse 01"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_02, "Pulse 02"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_03, "Pulse 03"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_04, "Pulse 04"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_05, "Pulse 05"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_06, "Pulse 06"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_07, "Pulse 07"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_08, "Pulse 08"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_09, "Pulse 09"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_10, "Always ON"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_11, "Always OFF"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_12, "Servo pulse MIN"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_13, "Servo pulse NEUTRAL"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_14, "Servo pulse MAX"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_15, "not used")};
return myOutputs;
}
示例2
private GpioPinPwmOutput[] provisionPwmOutputs(final PCA9685GpioProvider gpioProvider) {
GpioController gpio = GpioFactory.getInstance();
GpioPinPwmOutput myOutputs[] = {
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_00, "Servo 00"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_01, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_02, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_03, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_04, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_05, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_06, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_07, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_08, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_09, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_10, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_11, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_12, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_13, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_14, "not used"),
gpio.provisionPwmOutputPin(gpioProvider, PCA9685Pin.PWM_15, "not used")};
return myOutputs;
}
示例3
@Override
public long switchAnalogPin(AnalogPin analogPin, int value)
throws IOException {
GpioPinPwmOutput pin = (GpioPinPwmOutput) getOrCreate(
analogPin.pinNum(), DIGITAL_OUTPUT);
pin.setMode(PWM_OUTPUT);
pin.setPwm(value);
return MessageIdHolders.NO_ID.getId();
}
示例4
private boolean sendPowerPinIntensity(MessageParsedInfo messageParsedInfo) {
int pinNum = (Integer)messageParsedInfo.getParsedValues()[0];
int intensity = (Integer)messageParsedInfo.getParsedValues()[1];
GpioPinPwmOutput pin = (GpioPinPwmOutput )getPin(pinNum);
pin.setMode(PinMode.PWM_OUTPUT);
pin.setPwm(intensity);
return true;
}
示例5
@SuppressWarnings("resource")
public static void main(String args[]) throws Exception {
System.out.println("<--Pi4J--> PCA9685 PWM Example ... started.");
// This would theoretically lead into a resolution of 5 microseconds per step:
// 4096 Steps (12 Bit)
// T = 4096 * 0.000005s = 0.02048s
// f = 1 / T = 48.828125
BigDecimal frequency = new BigDecimal("48.828");
// Correction factor: actualFreq / targetFreq
// e.g. measured actual frequency is: 51.69 Hz
// Calculate correction factor: 51.65 / 48.828 = 1.0578
// --> To measure actual frequency set frequency without correction factor(or set to 1)
BigDecimal frequencyCorrectionFactor = new BigDecimal("1.0578");
// Create custom PCA9685 GPIO provider
I2CBus bus = I2CFactory.getInstance(I2CBus.BUS_1);
final PCA9685GpioProvider gpioProvider = new PCA9685GpioProvider(bus, 0x40, frequency, frequencyCorrectionFactor);
// Define outputs in use for this example
GpioPinPwmOutput[] myOutputs = provisionPwmOutputs(gpioProvider);
// Reset outputs
gpioProvider.reset();
//
// Set various PWM patterns for outputs 0..9
final int offset = 400;
final int pulseDuration = 600;
for (int i = 0; i < 10; i++) {
Pin pin = PCA9685Pin.ALL[i];
int onPosition = checkForOverflow(offset * i);
int offPosition = checkForOverflow(pulseDuration * (i + 1));
gpioProvider.setPwm(pin, onPosition, offPosition);
}
// Set full ON
gpioProvider.setAlwaysOn(PCA9685Pin.PWM_10);
// Set full OFF
gpioProvider.setAlwaysOff(PCA9685Pin.PWM_11);
// Set 0.9ms pulse (R/C Servo minimum position)
gpioProvider.setPwm(PCA9685Pin.PWM_12, SERVO_DURATION_MIN);
// Set 1.5ms pulse (R/C Servo neutral position)
gpioProvider.setPwm(PCA9685Pin.PWM_13, SERVO_DURATION_NEUTRAL);
// Set 2.1ms pulse (R/C Servo maximum position)
gpioProvider.setPwm(PCA9685Pin.PWM_14, SERVO_DURATION_MAX);
//
// Show PWM values for outputs 0..14
for (GpioPinPwmOutput output : myOutputs) {
int[] onOffValues = gpioProvider.getPwmOnOffValues(output.getPin());
System.out.println(output.getPin().getName() + " (" + output.getName() + "): ON value [" + onOffValues[0] + "], OFF value [" + onOffValues[1] + "]");
}
System.out.println("Press <Enter> to terminate...");
new Scanner(System.in).nextLine();
}