PWM Demo
PWMActivity.java
- packagecom.mini6410.PWM;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.text.Editable;
- importandroid.text.TextWatcher;
- importandroid.util.Log;
- importandroid.view.View;
- importandroid.widget.Button;
- importandroid.widget.CompoundButton;
- importandroid.widget.EditText;
- importandroid.widget.ToggleButton;
- importcom.friendlyarm.AndroidSDK.HardwareControler;
- importcom.mini6410.R;
- /**
- *
- *ClassName:PWMActivity
- *Reason:PWMDemo
- *
- *@authorsnowdream
- *@version
- *@sinceVer1.1
- *@Date20112012-03-1117:21
- *
- *@see
- */
- publicclassPWMActivityextendsActivityimplementsButton.OnClickListener,ToggleButton.OnCheckedChangeListener{
- publicstaticfinalStringTAG="PWMActivity";
- /*PWM频率*/
- publicstaticfinalintPWM_FREQUENCY_1=1;
- publicstaticfinalintPWM_FREQUENCY_100=100;
- publicstaticfinalintPWM_FREQUENCY_200=200;
- publicstaticfinalintPWM_FREQUENCY_500=500;
- publicstaticfinalintPWM_FREQUENCY_1000=1000;
- publicstaticfinalintPWM_FREQUENCY_2000=2000;
- publicstaticfinalintPWM_FREQUENCY_5000=5000;
- publicstaticfinalintPWM_FREQUENCY_10000=10000;
- /*PWM播放时长*/
- publicstaticfinalintPWM_PLAY_PERIOD_FOR_EVER=-1;
- publicstaticfinalintPWM_PLAY_PERIOD_100=100;
- publicstaticfinalintPWM_PLAY_PERIOD_200=200;
- publicstaticfinalintPWM_PLAY_PERIOD_300=300;
- publicstaticfinalintPWM_PLAY_PERIOD_500=500;
- publicstaticfinalintPWM_PLAY_PERIOD_1000=1000;
- /*PWM播放间隔*/
- publicstaticfinalintPWM_WAIT_PERIOD_100=100;
- publicstaticfinalintPWM_WAIT_PERIOD_200=200;
- publicstaticfinalintPWM_WAIT_PERIOD_300=300;
- publicstaticfinalintPWM_WAIT_PERIOD_500=500;
- publicstaticfinalintPWM_WAIT_PERIOD_1000=1000;
- /*播放频率*/
- publicintmfrequency=PWM_FREQUENCY_1000;
- /*频率改变步长Step*/
- publicintmfrequencystep=100;
- /*播放时长*/
- publicintmplayperiod=PWM_PLAY_PERIOD_1000;
- /*播放间隔*/
- publicintmwaitperiod=PWM_WAIT_PERIOD_1000;
- /*播放次数*/
- publicintmplaynum=20;
- privatebooleanmStop=false;
- privateButtonmButtonSub=null;
- privateButtonmButtonAdd=null;
- privateToggleButtonmToggleButtonStartForEver=null;
- privateToggleButtonmToggleButtonStartForTimes=null;
- privateEditTextmEditTextFrequency=null;
- privateEditTextmEditTextPlayPeriod=null;
- privateEditTextmTextViewWaitPeriod=null;
- privateEditTextmEditTextPlayNum=null;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.pwmdemo);
- initUI();
- initData();
- }
- @Override
- protectedvoidonDestroy(){
- mStop=true;
- super.onDestroy();
- }
- /**
- *
- *initUI:初始化UI
- *
- *@param
- *@return
- *@throws
- */
- publicvoidinitUI(){
- 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(newTextWatcher(){
- publicvoidonTextChanged(CharSequences,intstart,intbefore,intcount){
- //TODOAuto-generatedmethodstub
- try{
- mfrequency=Integer.parseInt(mEditTextFrequency.getText().toString());
- }catch(NumberFormatExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- publicvoidbeforeTextChanged(CharSequences,intstart,intcount,
- intafter){
- //TODOAuto-generatedmethodstub
- }
- publicvoidafterTextChanged(Editables){
- //TODOAuto-generatedmethodstub
- }
- });
- mEditTextPlayPeriod.addTextChangedListener(newTextWatcher(){
- publicvoidonTextChanged(CharSequences,intstart,intbefore,intcount){
- //TODOAuto-generatedmethodstub
- try{
- mplayperiod=Integer.parseInt(mEditTextPlayPeriod.getText().toString());
- }catch(NumberFormatExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- publicvoidbeforeTextChanged(CharSequences,intstart,intcount,
- intafter){
- //TODOAuto-generatedmethodstub
- }
- publicvoidafterTextChanged(Editables){
- //TODOAuto-generatedmethodstub
- }
- });
- mTextViewWaitPeriod.addTextChangedListener(newTextWatcher(){
- publicvoidonTextChanged(CharSequences,intstart,intbefore,intcount){
- //TODOAuto-generatedmethodstub
- try{
- mwaitperiod=Integer.parseInt(mTextViewWaitPeriod.getText().toString());
- }catch(NumberFormatExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- publicvoidbeforeTextChanged(CharSequences,intstart,intcount,
- intafter){
- //TODOAuto-generatedmethodstub
- }
- publicvoidafterTextChanged(Editables){
- //TODOAuto-generatedmethodstub
- }
- });
- mEditTextPlayNum.addTextChangedListener(newTextWatcher(){
- publicvoidonTextChanged(CharSequences,intstart,intbefore,intcount){
- //TODOAuto-generatedmethodstub
- try{
- mplaynum=Integer.parseInt(mEditTextPlayNum.getText().toString());
- }catch(NumberFormatExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- publicvoidbeforeTextChanged(CharSequences,intstart,intcount,
- intafter){
- //TODOAuto-generatedmethodstub
- }
- publicvoidafterTextChanged(Editables){
- //TODOAuto-generatedmethodstub
- }
- });
- }
- /**
- *
- *initData:初始化各个控件的数值
- *
- *@param
- *@return
- *@throws
- */
- publicvoidinitData(){
- mEditTextFrequency.setText(String.valueOf(mfrequency));
- mEditTextPlayPeriod.setText(String.valueOf(mplayperiod));
- mTextViewWaitPeriod.setText(String.valueOf(mwaitperiod));
- mEditTextPlayNum.setText(String.valueOf(mplaynum));
- }
- /**
- *
- *onCheckedChanged:开关按钮监听器。当有开关按钮的状态改变时,响应点击。
- *
- *@parambuttonView改变状态的开关按钮对象;
- *@paramisChecked该开关按钮是否被选中;
- *@return
- *@throws
- */
- publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){
- ToggleButtonmToggleButton=(ToggleButton)buttonView;
- switch(mToggleButton.getId()){
- caseR.id.ToggleButtonStartForEver:
- if(isChecked){
- PWMPlay(mfrequency);
- }else{
- mStop=true;
- PWMStop();
- }
- break;
- caseR.id.ToggleButtonStartForTimes:
- if(isChecked){
- mStop=false;
- PWMThreadmPWMThread=newPWMThread();
- mPWMThread.start();
- }else{
- mStop=true;
- }
- break;
- default:
- break;
- }
- }
- /**
- *
- *onClick:按钮监听器。当有按钮被点击时,响应点击。
- *
- *@paramv被点击的按钮对象;
- *@return
- *@throws
- */
- publicvoidonClick(Viewv){
- ButtonmButton=(Button)v;
- switch(mButton.getId()){
- caseR.id.ButtonSUB:
- if(mfrequency<=1)
- mfrequency=PWM_FREQUENCY_1;
- elseif(mfrequency==PWM_FREQUENCY_100)
- mfrequency=PWM_FREQUENCY_1;
- else
- mfrequency-=mfrequencystep;
- mEditTextFrequency.setText(String.valueOf(mfrequency));
- break;
- caseR.id.ButtonADD:
- if(mfrequency<=1)
- mfrequency=PWM_FREQUENCY_100;
- else
- mfrequency+=mfrequencystep;
- mEditTextFrequency.setText(String.valueOf(mfrequency));
- break;
- default:
- break;
- }
- }
- /**
- *
- *PWMPlay:启动蜂鸣器,并播放。
- *
- *@paramfrequency播放频率
- *@returntrue表示播放成功;否则,表示播放失败。
- *@throws
- */
- publicbooleanPWMPlay(intfrequency)
- {
- booleanret=false;
- intresult=-1;
- result=HardwareControler.PWMPlay(frequency);
- if(result==0)
- ret=true;
- else
- ret=false;
- returnret;
- }
- /**
- *
- *PWMStop:停止并关闭蜂鸣器。
- *
- *@param
- *@returntrue表示停止成功;否则,表示停止失败。
- *@throws
- */
- publicbooleanPWMStop(){
- booleanret=false;
- intresult=-1;
- result=HardwareControler.PWMStop();
- if(result==0)
- ret=true;
- else
- ret=false;
- returnret;
- }
- /**
- *
- *PWMThread:PWM播放线程
- *
- *@param
- *@return
- *@throws
- */
- publicclassPWMThreadextendsThread{
- @Override
- publicvoidrun(){
- Log.i(TAG,"PWMThreadStart");
- for(inti=0;i<mplaynum;i++)
- {
- Log.i(TAG,String.valueOf(i));
- if(mStop)
- {
- PWMStop();
- break;
- }
- /*启动蜂鸣器,并使用频率mfrequency进行播放*/
- PWMPlay(mfrequency);
- /*等待播放时长mplayperiod结束*/
- try{
- sleep(mplayperiod);
- }catch(InterruptedExceptione){
- e.printStackTrace();
- }
- /*停止蜂鸣器*/
- PWMStop();
- if(mStop)
- break;
- /*等待播放间隔mwaitperiod结束*/
- try{
- sleep(mwaitperiod);
- }catch(InterruptedExceptione){
- e.printStackTrace();
- }
- }
- Log.i(TAG,"PWMThreadStop");
- }
- }
- }
pwmdemo.xml
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns: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>
预览效果: