您的位置:首页 > 移动开发 > Android开发

友善之臂Mini6410之Android开发学习笔记(2)-PWM Demo

2012-03-12 10:48 615 查看
友善之臂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>

预览效果:



欢迎大家关注我的微信公众号:

微信公众号:sn0wdr1am

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息