友善之臂Mini6410之Android开发学习笔记源码同步更新,请使用git工具进行同步。关于Git工具更多信息,请参考:http://progit.org/book/zh/
git clone https://code.google.com/p/androiddemoformini6410/
PWMActivity.java
package com.mini6410.PWM; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ToggleButton; import com.friendlyarm.AndroidSDK.HardwareControler; import com.mini6410.R; /** * * ClassName:PWMActivity * Reason: PWM Demo * * @author snowdream * @version * @since Ver 1.1 * @Date 2011 2012-03-11 17:21 * * @see */ public class PWMActivity extends Activity implements Button.OnClickListener,ToggleButton.OnCheckedChangeListener{ public static final String TAG = "PWMActivity"; /*PWM频率*/ public static final int PWM_FREQUENCY_1 = 1; public static final int PWM_FREQUENCY_100 = 100; public static final int PWM_FREQUENCY_200 = 200; public static final int PWM_FREQUENCY_500 = 500; public static final int PWM_FREQUENCY_1000 = 1000; public static final int PWM_FREQUENCY_2000 = 2000; public static final int PWM_FREQUENCY_5000 = 5000; public static final int PWM_FREQUENCY_10000 = 10000; /*PWM播放时长*/ public static final int PWM_PLAY_PERIOD_FOR_EVER = -1; public static final int PWM_PLAY_PERIOD_100 = 100; public static final int PWM_PLAY_PERIOD_200 = 200; public static final int PWM_PLAY_PERIOD_300 = 300; public static final int PWM_PLAY_PERIOD_500 = 500; public static final int PWM_PLAY_PERIOD_1000 = 1000; /*PWM播放间隔*/ public static final int PWM_WAIT_PERIOD_100 = 100; public static final int PWM_WAIT_PERIOD_200 = 200; public static final int PWM_WAIT_PERIOD_300 = 300; public static final int PWM_WAIT_PERIOD_500 = 500; public static final int PWM_WAIT_PERIOD_1000 = 1000; /*播放频率*/ public int mfrequency = PWM_FREQUENCY_1000; /*频率改变步长Step*/ public int mfrequencystep = 100; /*播放时长*/ public int mplayperiod = PWM_PLAY_PERIOD_1000; /*播放间隔*/ public int mwaitperiod = PWM_WAIT_PERIOD_1000; /*播放次数*/ public int mplaynum = 20; private boolean mStop = false; private Button mButtonSub = null; private Button mButtonAdd = null; private ToggleButton mToggleButtonStartForEver= null; private ToggleButton mToggleButtonStartForTimes = null; private EditText mEditTextFrequency = null; private EditText mEditTextPlayPeriod = null; private EditText mTextViewWaitPeriod = null; private EditText mEditTextPlayNum = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pwmdemo); initUI(); initData(); } @Override protected void onDestroy() { mStop = true; super.onDestroy(); } /** * * initUI: 初始化UI * * @param * @return * @throws */ public void initUI(){ mButtonSub = (Button)findViewById(R.id.ButtonSUB); mButtonAdd = (Button)findViewById(R.id.ButtonADD); /*按钮监听器,具体实现参考下面的函数:onClick*/ mButtonSub.setOnClickListener(this); mButtonAdd.setOnClickListener(this); mToggleButtonStartForEver= (ToggleButton)findViewById(R.id.ToggleButtonStartForEver); mToggleButtonStartForTimes = (ToggleButton)findViewById(R.id.ToggleButtonStartForTimes); /*开关按钮监听器,具体实现参考下面的函数:onCheckedChanged*/ mToggleButtonStartForEver.setOnCheckedChangeListener(this); mToggleButtonStartForTimes.setOnCheckedChangeListener(this); mEditTextFrequency = (EditText)findViewById(R.id.EditTextFrequency); mEditTextPlayPeriod = (EditText)findViewById(R.id.EditTextPlayPeriod); mTextViewWaitPeriod = (EditText)findViewById(R.id.EditTextWaitPeriod); mEditTextPlayNum = (EditText)findViewById(R.id.EditTextPlayNum); /*EditText监听器,具体实现参考下面的函数:onTextChanged * 主要用于获取更改后最新的数值,下同。 * */ mEditTextFrequency.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub try { mfrequency = Integer.parseInt(mEditTextFrequency.getText().toString()); } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); mEditTextPlayPeriod.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub try { mplayperiod = Integer.parseInt(mEditTextPlayPeriod.getText().toString()); } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); mTextViewWaitPeriod.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub try { mwaitperiod = Integer.parseInt(mTextViewWaitPeriod.getText().toString()); } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); mEditTextPlayNum.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub try { mplaynum = Integer.parseInt(mEditTextPlayNum.getText().toString()); } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); } /** * * initData: 初始化各个控件的数值 * * @param * @return * @throws */ public void initData(){ mEditTextFrequency.setText(String.valueOf(mfrequency)); mEditTextPlayPeriod.setText(String.valueOf(mplayperiod)); mTextViewWaitPeriod.setText(String.valueOf(mwaitperiod)); mEditTextPlayNum.setText(String.valueOf(mplaynum)); } /** * * onCheckedChanged: 开关按钮监听器。当有开关按钮的状态改变时,响应点击。 * * @param buttonView 改变状态的开关按钮对象; * @param isChecked 该开关按钮是否被选中; * @return * @throws */ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { ToggleButton mToggleButton = (ToggleButton)buttonView; switch (mToggleButton.getId()) { case R.id.ToggleButtonStartForEver: if(isChecked){ PWMPlay(mfrequency); }else{ mStop = true; PWMStop(); } break; case R.id.ToggleButtonStartForTimes: if(isChecked){ mStop = false; PWMThread mPWMThread = new PWMThread(); mPWMThread.start(); }else{ mStop = true; } break; default: break; } } /** * * onClick: 按钮监听器。当有按钮被点击时,响应点击。 * * @param v 被点击的按钮对象; * @return * @throws */ public void onClick(View v) { Button mButton = (Button)v; switch (mButton.getId()) { case R.id.ButtonSUB: if(mfrequency <= 1) mfrequency = PWM_FREQUENCY_1; else if(mfrequency == PWM_FREQUENCY_100) mfrequency = PWM_FREQUENCY_1; else mfrequency -= mfrequencystep; mEditTextFrequency.setText(String.valueOf(mfrequency)); break; case R.id.ButtonADD: if(mfrequency <= 1) mfrequency = PWM_FREQUENCY_100; else mfrequency += mfrequencystep; mEditTextFrequency.setText(String.valueOf(mfrequency)); break; default: break; } } /** * * PWMPlay: 启动蜂鸣器 ,并播放。 * * @param frequency 播放频率 * @return true 表示播放成功;否则,表示播放失败。 * @throws */ public boolean PWMPlay(int frequency) { boolean ret = false; int result = -1; result = HardwareControler.PWMPlay(frequency); if(result == 0) ret = true; else ret = false; return ret; } /** * * PWMStop: 停止并关闭蜂鸣器。 * * @param * @return true 表示停止成功;否则,表示停止失败。 * @throws */ public boolean PWMStop(){ boolean ret = false; int result = -1; result = HardwareControler.PWMStop(); if(result == 0) ret = true; else ret = false; return ret; } /** * * PWMThread: PWM播放线程 * * @param * @return * @throws */ public class PWMThread extends Thread{ @Override public void run() { Log.i(TAG, "PWMThread Start"); for(int i = 0 ; i < mplaynum; i++ ) { Log.i(TAG, String.valueOf(i)); if(mStop) { PWMStop(); break; } /*启动蜂鸣器,并使用频率 mfrequency 进行播放*/ PWMPlay(mfrequency); /*等待播放时长 mplayperiod 结束*/ try { sleep(mplayperiod); } catch (InterruptedException e) { e.printStackTrace(); } /*停止蜂鸣器*/ PWMStop(); if(mStop) break; /*等待播放间隔 mwaitperiod 结束*/ try { sleep(mwaitperiod); } catch (InterruptedException e) { e.printStackTrace(); } } Log.i(TAG, "PWMThread Stop"); } } }
pwmdemo.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/TextViewFrequency" android:layout_width="80dip" android:layout_height="40dip" android:gravity="center" android:text="@string/frequency" /> <Button android:id="@+id/ButtonSUB" android:layout_width="40dip" android:layout_height="40dip" android:gravity="center" android:text="@string/sub" /> <EditText android:id="@+id/EditTextFrequency" android:layout_width="120dip" android:layout_height="40dip" android:gravity="center" android:inputType="number" /> <Button android:id="@+id/ButtonADD" android:layout_width="40dip" android:layout_height="40dip" android:gravity="center" android:text="@string/add" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/TextViewPlayPeriod" android:layout_width="80dip" android:layout_height="40dip" android:gravity="center" android:text="@string/playperiod" /> <EditText android:id="@+id/EditTextPlayPeriod" android:layout_width="200dip" android:layout_height="40dip" android:gravity="center" android:inputType="number" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/TextViewWaitPeriod" android:layout_width="80dip" android:layout_height="40dip" android:gravity="center" android:text="@string/waitperiod" /> <EditText android:id="@+id/EditTextWaitPeriod" android:layout_width="200dip" android:layout_height="40dip" android:layout_gravity="center" android:gravity="center" android:inputType="number" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/TextViewPlayNum" android:layout_width="80dip" android:layout_height="40dip" android:gravity="center" android:text="@string/playnum" /> <EditText android:id="@+id/EditTextPlayNum" android:layout_width="200dip" android:layout_height="40dip" android:layout_gravity="center" android:gravity="center" android:inputType="number" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/TextViewStartForEver" android:layout_width="80dip" android:layout_height="40dip" android:gravity="center" android:text="@string/playforever" /> <ToggleButton android:id="@+id/ToggleButtonStartForEver" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" /> <LinearLayout android:layout_width="10dip" android:layout_height="wrap_content" android:orientation="horizontal" > </LinearLayout> <TextView android:id="@+id/TextViewStartForTimes" android:layout_width="80dip" android:layout_height="40dip" android:gravity="center" android:text="@string/playfortimes" /> <ToggleButton android:id="@+id/ToggleButtonStartForTimes" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" /> </LinearLayout> </LinearLayout>
预览效果: