TA的每日心情 | 开心 2016-3-7 12:25 |
---|
签到天数: 4 天 连续签到: 1 天 [LV.2]偶尔看看I
|
本帖最后由 糖悦之果飞 于 2016-3-23 14:07 编辑
这几天搞了一下,主要是安卓平台的东西,结合了官网的android.jar包,可以让安卓直接来控制硬件。可玩性将大大加强。拿来玩耍是最合适不过的了。
搭载的外围器件: HDMI显示器(三星) 华硕鼠标usb 3.3V草帽LED
实现的功能:人机交互 聊天 信息查询 通过指令对硬件进行控制 跑马灯 PWM呼吸灯
先看一下代码时间,具体的工程,jar布置官网都用。
主函数实现了聊天,硬件控制 有一些固定指令。需要网络。- /**
- * 展示消息的listview
- */
- private ListView mChatView;
- /**
- * 文本域
- */
- private EditText mMsg;
- /**
- *存储聊天消息
- */
- private List<ChatMessage> mDatas = new ArrayList<ChatMessage>();
- /**
- *适配器
- */
- private ChatMessageAdapter mAdapter;
- /**/
- int flagag = 1;
-
- private Handler mHandler = new Handler()
- {
- public void handleMessage(android.os.Message msg)
- {
- ChatMessage from = (ChatMessage) msg.obj;
- mDatas.add(from);
- mAdapter.notifyDataSetChanged();
- mChatView.setSelection(mDatas.size() - 1);
- };
- };
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.main_chatting);
- initView();
- mAdapter = new ChatMessageAdapter(this, mDatas);
- mChatView.setAdapter(mAdapter);
- }
- private void initView()
- {
- mChatView = (ListView) findViewById(R.id.id_chat_listView);
- mMsg = (EditText) findViewById(R.id.id_chat_msg);
- mDatas.add(new ChatMessage(Type.INPUT, "测试开始"));
- }
- public void sendMessage(View view)
- {
- final String msg = mMsg.getText().toString();
- if (TextUtils.isEmpty(msg))
- {
- Toast.makeText(this, "您还没有填写信息呢...", Toast.LENGTH_SHORT).show();
- return;
- }
- ChatMessage to = new ChatMessage(Type.OUTPUT, msg);
- to.setDate(new Date());
- mDatas.add(to);
- mAdapter.notifyDataSetChanged();
- mChatView.setSelection(mDatas.size() - 1);
- //mMsg.setText("");
- if(mMsg.getText().toString().contains("AG")){
- ChatMessage from = new ChatMessage(Type.INPUT, "包含G");
- mDatas.add(from);
- mAdapter.notifyDataSetChanged();
- mChatView.setSelection(mDatas.size() - 1);
- }
-
- if(mMsg.getText().toString().contains("oled")){
- startPWM();
- ChatMessage from = new ChatMessage(Type.INPUT, "oled开启");
- mDatas.add(from);
- mAdapter.notifyDataSetChanged();
- mChatView.setSelection(mDatas.size() - 1);
- }
-
- if(mMsg.getText().toString().contains("跑马灯")){
- ChatMessage from = new ChatMessage(Type.INPUT, "跑马灯开启");
- mDatas.add(from);
- mAdapter.notifyDataSetChanged();
- mChatView.setSelection(mDatas.size() - 1);
- Intent intent = new Intent(MainActivity.this, LhbForI2c.class);
- startService(intent);
- }
-
- if(mMsg.getText().toString().equals("GPIO")) {
- // 关闭软键盘
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- // 得到InputMethodManager的实例
- if (imm.isActive())
- {
- // 如果开启
- imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
- InputMethodManager.HIDE_NOT_ALWAYS);
- // 关闭软键盘,开启方法相同,这个方法是切换开启与关闭状态的
- }
-
- GPIO gpio = new GPIO();
- int [] gpioPort = { 84, 83, 82, 76, 78, 80, 81, 79 };
- gpio.setmode(GPIO.BCM);
- for(int i = 0; i < 8; i++)
- {
- gpio.setup(gpioPort[ i ], GPIO.OUTPUT);
- }
- if(flagag == 1) {
- flagag = 0;
- } else {
- flagag = 1;
- }
- for(int i = 0; i < 8; i++)
- {
- gpio.output(gpioPort[ i ], flagag);
- }
- ChatMessage from = new ChatMessage(Type.INPUT, "开启成功");
- mDatas.add(from);
- mAdapter.notifyDataSetChanged();
- mChatView.setSelection(mDatas.size() - 1);
- } else {
- // 关闭软键盘
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- // 得到InputMethodManager的实例
- if (imm.isActive())
- {
- // 如果开启
- imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
- InputMethodManager.HIDE_NOT_ALWAYS);
- // 关闭软键盘,开启方法相同,这个方法是切换开启与关闭状态的
- }
- new Thread()
- {
- public void run()
- {
- ChatMessage from = null;
- try
- {
- from = HttpUtils.sendMsg(msg);
- } catch (Exception e)
- {
- from = new ChatMessage(Type.INPUT, "有网络我才会变得聪明");
- }
- Message message = Message.obtain();
- message.obj = from;
- mHandler.sendMessage(message);
- };
- }.start();
-
- }
- }
-
- private static float dutyCycle = 500;
- private static float frequency = 500;
- private int dr = 0;
-
- private void startPWM(){
- new Thread(new Runnable() {
- @Override
- public void run() {
- int channel=10;
- int channelCompare=11;
- float f=1.0f;
- GPIO gpio=new GPIO();
- gpio.setmode(GPIO.BCM);
- gpio.setup(channel, GPIO.OUTPUT);
- gpio.setup(channelCompare,GPIO.OUTPUT);
- PWM pwm=gpio.PWM(channel,f);
- PWM pwmCom=gpio.PWM(channelCompare,f);
- pwm.start(30.0f);
- pwmCom.start(50.0f);
- pwm.ChangeDutyCycle(dutyCycle);
- pwm.ChangeFrequency(frequency);
- }
- }).start();
- }
复制代码 外接LED引脚 使用: 使用了PWM接口 分别是J3 的 26 和 33 脚
下面是Genymotion调试的截图:
Genymotion
在Genymotion只能调试聊天内容硬件驱动只能在板子上实现。
下面是部署到板子上的运行情况:
板子上运行情况
利用指令控制硬件功能
跑马等开启
开启pwm呼吸灯 指令:oled
下面是工程:
go_rebot.rar
(1.8 MB, 下载次数: 15)
|
|