为了打开一个到PWM端口的连接,你需要知道那个唯一的PWM名称。在开发的初始阶段,或者移植app到一个新硬件,使用PeripheralManagerService 的getPwmList()方法获取所有可用PWM的端口名称是很帮助的:
PeripheralManagerService manager = new PeripheralManagerService(); List<String> portList = manager.getPwmList(); if (portList.isEmpty()) { Log.i(TAG, "No PWM port available on this device."); } else { Log.i(TAG, "List of available ports: " + portList); }一旦你知道了目标端口的名称,使用PeripheralManagerService 来连接到该端口。当你完成与PWM端口的交互后,要关闭连接来释放资源。另外,直到当前连接关闭之前你不能在此端口上重新打开一个连接。使用端口的close()方法来关闭连接。
public class HomeActivity extends Activity { // PWM Name private static final String PWM_NAME = ...; private Pwm mPwm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Attempt to access the PWM port try { mPwm = mPeripheralManager.openPwm(PWM_NAME); } catch (IOException e) { Log.w(TAG, "Unable to access PWM", e); } } @Override protected void onDestroy() { super.onDestroy(); if (mPwm != null) { try { mPwm.close(); mPwm = null; } catch (IOException e) { Log.w(TAG, "Unable to close PWM", e); } } } }在获取到连接之后,为PWM信号配置时序参数。你在第一次激活信号之前必须设置这些参数。调用setEnabled(true)来激活PWM信号,如果你需要暂时禁用信号,你可以调用setEnabled(false)。
下面的例子配置了PWM的频率为120HZ(周期为8.33ms),并且占空比为25%(每个周期的高电平时间是2.08ms):
public void initializePwm(Pwm pwm) throws IOException { pwm.setPwmFrequencyHz(120); pwm.setPwmDutyCycle(25); // Enable the PWM signal pwm.setEnabled(true); }原文地址: https://developer.android.com/things/sdk/pio/pwm.html
