PWM Demo

PWMActivity.java

  1. packagecom.mini6410.PWM;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.text.Editable;
  5. importandroid.text.TextWatcher;
  6. importandroid.util.Log;
  7. importandroid.view.View;
  8. importandroid.widget.Button;
  9. importandroid.widget.CompoundButton;
  10. importandroid.widget.EditText;
  11. importandroid.widget.ToggleButton;
  12. importcom.friendlyarm.AndroidSDK.HardwareControler;
  13. importcom.mini6410.R;
  14. /**
  15. *
  16. *ClassName:PWMActivity
  17. *Reason:PWMDemo
  18. *
  19. *@authorsnowdream
  20. *@version
  21. *@sinceVer1.1
  22. *@Date20112012-03-1117:21
  23. *
  24. *@see
  25. */
  26. publicclassPWMActivityextendsActivityimplementsButton.OnClickListener,ToggleButton.OnCheckedChangeListener{
  27. publicstaticfinalStringTAG="PWMActivity";
  28. /*PWM频率*/
  29. publicstaticfinalintPWM_FREQUENCY_1=1;
  30. publicstaticfinalintPWM_FREQUENCY_100=100;
  31. publicstaticfinalintPWM_FREQUENCY_200=200;
  32. publicstaticfinalintPWM_FREQUENCY_500=500;
  33. publicstaticfinalintPWM_FREQUENCY_1000=1000;
  34. publicstaticfinalintPWM_FREQUENCY_2000=2000;
  35. publicstaticfinalintPWM_FREQUENCY_5000=5000;
  36. publicstaticfinalintPWM_FREQUENCY_10000=10000;
  37. /*PWM播放时长*/
  38. publicstaticfinalintPWM_PLAY_PERIOD_FOR_EVER=-1;
  39. publicstaticfinalintPWM_PLAY_PERIOD_100=100;
  40. publicstaticfinalintPWM_PLAY_PERIOD_200=200;
  41. publicstaticfinalintPWM_PLAY_PERIOD_300=300;
  42. publicstaticfinalintPWM_PLAY_PERIOD_500=500;
  43. publicstaticfinalintPWM_PLAY_PERIOD_1000=1000;
  44. /*PWM播放间隔*/
  45. publicstaticfinalintPWM_WAIT_PERIOD_100=100;
  46. publicstaticfinalintPWM_WAIT_PERIOD_200=200;
  47. publicstaticfinalintPWM_WAIT_PERIOD_300=300;
  48. publicstaticfinalintPWM_WAIT_PERIOD_500=500;
  49. publicstaticfinalintPWM_WAIT_PERIOD_1000=1000;
  50. /*播放频率*/
  51. publicintmfrequency=PWM_FREQUENCY_1000;
  52. /*频率改变步长Step*/
  53. publicintmfrequencystep=100;
  54. /*播放时长*/
  55. publicintmplayperiod=PWM_PLAY_PERIOD_1000;
  56. /*播放间隔*/
  57. publicintmwaitperiod=PWM_WAIT_PERIOD_1000;
  58. /*播放次数*/
  59. publicintmplaynum=20;
  60. privatebooleanmStop=false;
  61. privateButtonmButtonSub=null;
  62. privateButtonmButtonAdd=null;
  63. privateToggleButtonmToggleButtonStartForEver=null;
  64. privateToggleButtonmToggleButtonStartForTimes=null;
  65. privateEditTextmEditTextFrequency=null;
  66. privateEditTextmEditTextPlayPeriod=null;
  67. privateEditTextmTextViewWaitPeriod=null;
  68. privateEditTextmEditTextPlayNum=null;
  69. @Override
  70. protectedvoidonCreate(BundlesavedInstanceState){
  71. super.onCreate(savedInstanceState);
  72. setContentView(R.layout.pwmdemo);
  73. initUI();
  74. initData();
  75. }
  76. @Override
  77. protectedvoidonDestroy(){
  78. mStop=true;
  79. super.onDestroy();
  80. }
  81. /**
  82. *
  83. *initUI:初始化UI
  84. *
  85. *@param
  86. *@return
  87. *@throws
  88. */
  89. publicvoidinitUI(){
  90. mButtonSub=(Button)findViewById(R.id.ButtonSUB);
  91. mButtonAdd=(Button)findViewById(R.id.ButtonADD);
  92. /*按钮监听器,具体实现参考下面的函数:onClick*/
  93. mButtonSub.setOnClickListener(this);
  94. mButtonAdd.setOnClickListener(this);
  95. mToggleButtonStartForEver=(ToggleButton)findViewById(R.id.ToggleButtonStartForEver);
  96. mToggleButtonStartForTimes=(ToggleButton)findViewById(R.id.ToggleButtonStartForTimes);
  97. /*开关按钮监听器,具体实现参考下面的函数:onCheckedChanged*/
  98. mToggleButtonStartForEver.setOnCheckedChangeListener(this);
  99. mToggleButtonStartForTimes.setOnCheckedChangeListener(this);
  100. mEditTextFrequency=(EditText)findViewById(R.id.EditTextFrequency);
  101. mEditTextPlayPeriod=(EditText)findViewById(R.id.EditTextPlayPeriod);
  102. mTextViewWaitPeriod=(EditText)findViewById(R.id.EditTextWaitPeriod);
  103. mEditTextPlayNum=(EditText)findViewById(R.id.EditTextPlayNum);
  104. /*EditText监听器,具体实现参考下面的函数:onTextChanged
  105. *主要用于获取更改后最新的数值,下同。
  106. **/
  107. mEditTextFrequency.addTextChangedListener(newTextWatcher(){
  108. publicvoidonTextChanged(CharSequences,intstart,intbefore,intcount){
  109. //TODOAuto-generatedmethodstub
  110. try{
  111. mfrequency=Integer.parseInt(mEditTextFrequency.getText().toString());
  112. }catch(NumberFormatExceptione){
  113. //TODOAuto-generatedcatchblock
  114. e.printStackTrace();
  115. }
  116. }
  117. publicvoidbeforeTextChanged(CharSequences,intstart,intcount,
  118. intafter){
  119. //TODOAuto-generatedmethodstub
  120. }
  121. publicvoidafterTextChanged(Editables){
  122. //TODOAuto-generatedmethodstub
  123. }
  124. });
  125. mEditTextPlayPeriod.addTextChangedListener(newTextWatcher(){
  126. publicvoidonTextChanged(CharSequences,intstart,intbefore,intcount){
  127. //TODOAuto-generatedmethodstub
  128. try{
  129. mplayperiod=Integer.parseInt(mEditTextPlayPeriod.getText().toString());
  130. }catch(NumberFormatExceptione){
  131. //TODOAuto-generatedcatchblock
  132. e.printStackTrace();
  133. }
  134. }
  135. publicvoidbeforeTextChanged(CharSequences,intstart,intcount,
  136. intafter){
  137. //TODOAuto-generatedmethodstub
  138. }
  139. publicvoidafterTextChanged(Editables){
  140. //TODOAuto-generatedmethodstub
  141. }
  142. });
  143. mTextViewWaitPeriod.addTextChangedListener(newTextWatcher(){
  144. publicvoidonTextChanged(CharSequences,intstart,intbefore,intcount){
  145. //TODOAuto-generatedmethodstub
  146. try{
  147. mwaitperiod=Integer.parseInt(mTextViewWaitPeriod.getText().toString());
  148. }catch(NumberFormatExceptione){
  149. //TODOAuto-generatedcatchblock
  150. e.printStackTrace();
  151. }
  152. }
  153. publicvoidbeforeTextChanged(CharSequences,intstart,intcount,
  154. intafter){
  155. //TODOAuto-generatedmethodstub
  156. }
  157. publicvoidafterTextChanged(Editables){
  158. //TODOAuto-generatedmethodstub
  159. }
  160. });
  161. mEditTextPlayNum.addTextChangedListener(newTextWatcher(){
  162. publicvoidonTextChanged(CharSequences,intstart,intbefore,intcount){
  163. //TODOAuto-generatedmethodstub
  164. try{
  165. mplaynum=Integer.parseInt(mEditTextPlayNum.getText().toString());
  166. }catch(NumberFormatExceptione){
  167. //TODOAuto-generatedcatchblock
  168. e.printStackTrace();
  169. }
  170. }
  171. publicvoidbeforeTextChanged(CharSequences,intstart,intcount,
  172. intafter){
  173. //TODOAuto-generatedmethodstub
  174. }
  175. publicvoidafterTextChanged(Editables){
  176. //TODOAuto-generatedmethodstub
  177. }
  178. });
  179. }
  180. /**
  181. *
  182. *initData:初始化各个控件的数值
  183. *
  184. *@param
  185. *@return
  186. *@throws
  187. */
  188. publicvoidinitData(){
  189. mEditTextFrequency.setText(String.valueOf(mfrequency));
  190. mEditTextPlayPeriod.setText(String.valueOf(mplayperiod));
  191. mTextViewWaitPeriod.setText(String.valueOf(mwaitperiod));
  192. mEditTextPlayNum.setText(String.valueOf(mplaynum));
  193. }
  194. /**
  195. *
  196. *onCheckedChanged:开关按钮监听器。当有开关按钮的状态改变时,响应点击。
  197. *
  198. *@parambuttonView改变状态的开关按钮对象;
  199. *@paramisChecked该开关按钮是否被选中;
  200. *@return
  201. *@throws
  202. */
  203. publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){
  204. ToggleButtonmToggleButton=(ToggleButton)buttonView;
  205. switch(mToggleButton.getId()){
  206. caseR.id.ToggleButtonStartForEver:
  207. if(isChecked){
  208. PWMPlay(mfrequency);
  209. }else{
  210. mStop=true;
  211. PWMStop();
  212. }
  213. break;
  214. caseR.id.ToggleButtonStartForTimes:
  215. if(isChecked){
  216. mStop=false;
  217. PWMThreadmPWMThread=newPWMThread();
  218. mPWMThread.start();
  219. }else{
  220. mStop=true;
  221. }
  222. break;
  223. default:
  224. break;
  225. }
  226. }
  227. /**
  228. *
  229. *onClick:按钮监听器。当有按钮被点击时,响应点击。
  230. *
  231. *@paramv被点击的按钮对象;
  232. *@return
  233. *@throws
  234. */
  235. publicvoidonClick(Viewv){
  236. ButtonmButton=(Button)v;
  237. switch(mButton.getId()){
  238. caseR.id.ButtonSUB:
  239. if(mfrequency<=1)
  240. mfrequency=PWM_FREQUENCY_1;
  241. elseif(mfrequency==PWM_FREQUENCY_100)
  242. mfrequency=PWM_FREQUENCY_1;
  243. else
  244. mfrequency-=mfrequencystep;
  245. mEditTextFrequency.setText(String.valueOf(mfrequency));
  246. break;
  247. caseR.id.ButtonADD:
  248. if(mfrequency<=1)
  249. mfrequency=PWM_FREQUENCY_100;
  250. else
  251. mfrequency+=mfrequencystep;
  252. mEditTextFrequency.setText(String.valueOf(mfrequency));
  253. break;
  254. default:
  255. break;
  256. }
  257. }
  258. /**
  259. *
  260. *PWMPlay:启动蜂鸣器,并播放。
  261. *
  262. *@paramfrequency播放频率
  263. *@returntrue表示播放成功;否则,表示播放失败。
  264. *@throws
  265. */
  266. publicbooleanPWMPlay(intfrequency)
  267. {
  268. booleanret=false;
  269. intresult=-1;
  270. result=HardwareControler.PWMPlay(frequency);
  271. if(result==0)
  272. ret=true;
  273. else
  274. ret=false;
  275. returnret;
  276. }
  277. /**
  278. *
  279. *PWMStop:停止并关闭蜂鸣器。
  280. *
  281. *@param
  282. *@returntrue表示停止成功;否则,表示停止失败。
  283. *@throws
  284. */
  285. publicbooleanPWMStop(){
  286. booleanret=false;
  287. intresult=-1;
  288. result=HardwareControler.PWMStop();
  289. if(result==0)
  290. ret=true;
  291. else
  292. ret=false;
  293. returnret;
  294. }
  295. /**
  296. *
  297. *PWMThread:PWM播放线程
  298. *
  299. *@param
  300. *@return
  301. *@throws
  302. */
  303. publicclassPWMThreadextendsThread{
  304. @Override
  305. publicvoidrun(){
  306. Log.i(TAG,"PWMThreadStart");
  307. for(inti=0;i<mplaynum;i++)
  308. {
  309. Log.i(TAG,String.valueOf(i));
  310. if(mStop)
  311. {
  312. PWMStop();
  313. break;
  314. }
  315. /*启动蜂鸣器,并使用频率mfrequency进行播放*/
  316. PWMPlay(mfrequency);
  317. /*等待播放时长mplayperiod结束*/
  318. try{
  319. sleep(mplayperiod);
  320. }catch(InterruptedExceptione){
  321. e.printStackTrace();
  322. }
  323. /*停止蜂鸣器*/
  324. PWMStop();
  325. if(mStop)
  326. break;
  327. /*等待播放间隔mwaitperiod结束*/
  328. try{
  329. sleep(mwaitperiod);
  330. }catch(InterruptedExceptione){
  331. e.printStackTrace();
  332. }
  333. }
  334. Log.i(TAG,"PWMThreadStop");
  335. }
  336. }
  337. }

pwmdemo.xml

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <LinearLayout
  7. android:layout_width="match_parent"
  8. android:layout_height="wrap_content"
  9. android:orientation="horizontal">
  10. <TextView
  11. android:id="@+id/TextViewFrequency"
  12. android:layout_width="80dip"
  13. android:layout_height="40dip"
  14. android:gravity="center"
  15. android:text="@string/frequency"/>
  16. <Button
  17. android:id="@+id/ButtonSUB"
  18. android:layout_width="40dip"
  19. android:layout_height="40dip"
  20. android:gravity="center"
  21. android:text="@string/sub"/>
  22. <EditText
  23. android:id="@+id/EditTextFrequency"
  24. android:layout_width="120dip"
  25. android:layout_height="40dip"
  26. android:gravity="center"
  27. android:inputType="number"/>
  28. <Button
  29. android:id="@+id/ButtonADD"
  30. android:layout_width="40dip"
  31. android:layout_height="40dip"
  32. android:gravity="center"
  33. android:text="@string/add"/>
  34. </LinearLayout>
  35. <LinearLayout
  36. android:layout_width="match_parent"
  37. android:layout_height="wrap_content"
  38. android:orientation="horizontal">
  39. <TextView
  40. android:id="@+id/TextViewPlayPeriod"
  41. android:layout_width="80dip"
  42. android:layout_height="40dip"
  43. android:gravity="center"
  44. android:text="@string/playperiod"/>
  45. <EditText
  46. android:id="@+id/EditTextPlayPeriod"
  47. android:layout_width="200dip"
  48. android:layout_height="40dip"
  49. android:gravity="center"
  50. android:inputType="number"/>
  51. </LinearLayout>
  52. <LinearLayout
  53. android:layout_width="match_parent"
  54. android:layout_height="wrap_content"
  55. android:orientation="horizontal">
  56. <TextView
  57. android:id="@+id/TextViewWaitPeriod"
  58. android:layout_width="80dip"
  59. android:layout_height="40dip"
  60. android:gravity="center"
  61. android:text="@string/waitperiod"/>
  62. <EditText
  63. android:id="@+id/EditTextWaitPeriod"
  64. android:layout_width="200dip"
  65. android:layout_height="40dip"
  66. android:layout_gravity="center"
  67. android:gravity="center"
  68. android:inputType="number"/>
  69. </LinearLayout>
  70. <LinearLayout
  71. android:layout_width="match_parent"
  72. android:layout_height="wrap_content"
  73. android:orientation="horizontal">
  74. <TextView
  75. android:id="@+id/TextViewPlayNum"
  76. android:layout_width="80dip"
  77. android:layout_height="40dip"
  78. android:gravity="center"
  79. android:text="@string/playnum"/>
  80. <EditText
  81. android:id="@+id/EditTextPlayNum"
  82. android:layout_width="200dip"
  83. android:layout_height="40dip"
  84. android:layout_gravity="center"
  85. android:gravity="center"
  86. android:inputType="number"/>
  87. </LinearLayout>
  88. <LinearLayout
  89. android:layout_width="match_parent"
  90. android:layout_height="wrap_content"
  91. android:orientation="horizontal">
  92. <TextView
  93. android:id="@+id/TextViewStartForEver"
  94. android:layout_width="80dip"
  95. android:layout_height="40dip"
  96. android:gravity="center"
  97. android:text="@string/playforever"/>
  98. <ToggleButton
  99. android:id="@+id/ToggleButtonStartForEver"
  100. android:layout_width="wrap_content"
  101. android:layout_height="wrap_content"
  102. android:gravity="center"/>
  103. <LinearLayout
  104. android:layout_width="10dip"
  105. android:layout_height="wrap_content"
  106. android:orientation="horizontal">
  107. </LinearLayout>
  108. <TextView
  109. android:id="@+id/TextViewStartForTimes"
  110. android:layout_width="80dip"
  111. android:layout_height="40dip"
  112. android:gravity="center"
  113. android:text="@string/playfortimes"/>
  114. <ToggleButton
  115. android:id="@+id/ToggleButtonStartForTimes"
  116. android:layout_width="wrap_content"
  117. android:layout_height="wrap_content"
  118. android:gravity="center"/>
  119. </LinearLayout>
  120. </LinearLayout>

预览效果


PWM Demo