查看: 4356|回复: 6

基于图灵的聊天控制机器人

[复制链接]
  • TA的每日心情
    开心
    2016-3-7 12:25
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2016-3-7 12:39:42 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 糖悦之果飞 于 2016-3-23 14:07 编辑

    这几天搞了一下,主要是安卓平台的东西,结合了官网的android.jar包,可以让安卓直接来控制硬件。可玩性将大大加强。拿来玩耍是最合适不过的了。
    搭载的外围器件: HDMI显示器(三星) 华硕鼠标usb 3.3V草帽LED
    实现的功能:人机交互 聊天 信息查询 通过指令对硬件进行控制 跑马灯 PWM呼吸灯
    先看一下代码时间,具体的工程,jar布置官网都用。
    主函数实现了聊天,硬件控制 有一些固定指令。需要网络。
    1. /**
    2.          * 展示消息的listview
    3.          */
    4.         private ListView mChatView;
    5.         /**
    6.          * 文本域
    7.          */
    8.         private EditText mMsg;
    9.         /**
    10.          *存储聊天消息
    11.          */
    12.         private List<ChatMessage> mDatas = new ArrayList<ChatMessage>();
    13.         /**
    14.          *适配器
    15.          */
    16.         private ChatMessageAdapter mAdapter;
    17.         /**/
    18.         int flagag = 1;
    19.         
    20.         private Handler mHandler = new Handler()
    21.         {
    22.                 public void handleMessage(android.os.Message msg)
    23.                 {
    24.                         ChatMessage from = (ChatMessage) msg.obj;
    25.                         mDatas.add(from);
    26.                         mAdapter.notifyDataSetChanged();
    27.                         mChatView.setSelection(mDatas.size() - 1);
    28.                 };
    29.         };

    30.         @Override
    31.         protected void onCreate(Bundle savedInstanceState)
    32.         {
    33.                 super.onCreate(savedInstanceState);
    34.                 requestWindowFeature(Window.FEATURE_NO_TITLE);
    35.                 setContentView(R.layout.main_chatting);
    36.                 initView();
    37.                 mAdapter = new ChatMessageAdapter(this, mDatas);
    38.                 mChatView.setAdapter(mAdapter);

    39.         }

    40.         private void initView()
    41.         {
    42.                 mChatView = (ListView) findViewById(R.id.id_chat_listView);
    43.                 mMsg = (EditText) findViewById(R.id.id_chat_msg);
    44.                 mDatas.add(new ChatMessage(Type.INPUT, "测试开始"));
    45.         }

    46.         public void sendMessage(View view)
    47.         {
    48.                 final String msg = mMsg.getText().toString();
    49.                 if (TextUtils.isEmpty(msg))
    50.                 {
    51.                         Toast.makeText(this, "您还没有填写信息呢...", Toast.LENGTH_SHORT).show();
    52.                         return;
    53.                 }

    54.                 ChatMessage to = new ChatMessage(Type.OUTPUT, msg);
    55.                 to.setDate(new Date());
    56.                 mDatas.add(to);

    57.                 mAdapter.notifyDataSetChanged();
    58.                 mChatView.setSelection(mDatas.size() - 1);
    59.                 //mMsg.setText("");
    60.                 if(mMsg.getText().toString().contains("AG")){
    61.                         ChatMessage from = new ChatMessage(Type.INPUT, "包含G");
    62.             mDatas.add(from);
    63.                         mAdapter.notifyDataSetChanged();
    64.                         mChatView.setSelection(mDatas.size() - 1);
    65.                 }
    66.                
    67.                 if(mMsg.getText().toString().contains("oled")){
    68.                         startPWM();
    69.                         ChatMessage from = new ChatMessage(Type.INPUT, "oled开启");
    70.             mDatas.add(from);
    71.                         mAdapter.notifyDataSetChanged();
    72.                         mChatView.setSelection(mDatas.size() - 1);
    73.                 }
    74.                
    75.                 if(mMsg.getText().toString().contains("跑马灯")){
    76.                         ChatMessage from = new ChatMessage(Type.INPUT, "跑马灯开启");
    77.             mDatas.add(from);
    78.                         mAdapter.notifyDataSetChanged();
    79.                         mChatView.setSelection(mDatas.size() - 1);
    80.                         Intent intent = new Intent(MainActivity.this, LhbForI2c.class);
    81.                 startService(intent);
    82.                 }
    83.                
    84.                 if(mMsg.getText().toString().equals("GPIO")) {
    85.                         // 关闭软键盘
    86.                         InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    87.                         // 得到InputMethodManager的实例
    88.                         if (imm.isActive())
    89.                         {
    90.                                 // 如果开启
    91.                                 imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
    92.                                                 InputMethodManager.HIDE_NOT_ALWAYS);
    93.                                 // 关闭软键盘,开启方法相同,这个方法是切换开启与关闭状态的
    94.                         }
    95.                         
    96.                         GPIO gpio = new GPIO();
    97.                         int [] gpioPort = { 84, 83, 82, 76, 78, 80, 81, 79 };
    98.             gpio.setmode(GPIO.BCM);
    99.             for(int i = 0; i < 8; i++)
    100.             {
    101.                 gpio.setup(gpioPort[ i ], GPIO.OUTPUT);
    102.             }
    103.             if(flagag == 1) {
    104.                         flagag = 0;
    105.                 } else {
    106.                         flagag = 1;
    107.                 }
    108.             for(int i = 0; i < 8; i++)
    109.             {
    110.                 gpio.output(gpioPort[ i ], flagag);
    111.             }
    112.             ChatMessage from = new ChatMessage(Type.INPUT, "开启成功");
    113.             mDatas.add(from);
    114.                         mAdapter.notifyDataSetChanged();
    115.                         mChatView.setSelection(mDatas.size() - 1);
    116.                 } else {
    117.                         // 关闭软键盘
    118.                         InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    119.                         // 得到InputMethodManager的实例
    120.                         if (imm.isActive())
    121.                         {
    122.                                 // 如果开启
    123.                                 imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
    124.                                                 InputMethodManager.HIDE_NOT_ALWAYS);
    125.                                 // 关闭软键盘,开启方法相同,这个方法是切换开启与关闭状态的
    126.                         }
    127.                         new Thread()
    128.                         {
    129.                                 public void run()
    130.                                 {
    131.                                         ChatMessage from = null;
    132.                                         try
    133.                                         {
    134.                                                 from = HttpUtils.sendMsg(msg);
    135.                                         } catch (Exception e)
    136.                                         {
    137.                                                 from = new ChatMessage(Type.INPUT, "有网络我才会变得聪明");
    138.                                         }
    139.                                         Message message = Message.obtain();
    140.                                         message.obj = from;
    141.                                         mHandler.sendMessage(message);
    142.                                 };
    143.                         }.start();
    144.                         
    145.                 }
    146.         }
    147.         
    148.         private  static float dutyCycle = 500;
    149.     private  static float frequency = 500;
    150.     private  int dr = 0;
    151.    
    152.         private void startPWM(){
    153.         new Thread(new Runnable() {
    154.             @Override
    155.             public void run() {
    156.                 int channel=10;
    157.                 int channelCompare=11;
    158.                 float f=1.0f;
    159.                 GPIO gpio=new GPIO();
    160.                 gpio.setmode(GPIO.BCM);
    161.                 gpio.setup(channel, GPIO.OUTPUT);
    162.                 gpio.setup(channelCompare,GPIO.OUTPUT);
    163.                 PWM pwm=gpio.PWM(channel,f);
    164.                 PWM pwmCom=gpio.PWM(channelCompare,f);
    165.                 pwm.start(30.0f);
    166.                 pwmCom.start(50.0f);
    167.                 pwm.ChangeDutyCycle(dutyCycle);
    168.                 pwm.ChangeFrequency(frequency);
    169.             }
    170.         }).start();
    171.     }
    复制代码
    外接LED引脚 使用: 使用了PWM接口   分别是J3 的 26 和 33 脚

    下面是Genymotion调试的截图:

    Genymotion

    Genymotion

    在Genymotion只能调试聊天内容硬件驱动只能在板子上实现。
    下面是部署到板子上的运行情况:

    板子上运行情况

    板子上运行情况

    利用指令控制硬件功能

    跑马等开启

    跑马等开启

    开启pwm呼吸灯 指令:oled
    IMG_1220.JPG

    下面是工程: go_rebot.rar (1.8 MB, 下载次数: 15)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-2-14 12:16
  • 签到天数: 827 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2016-3-7 23:35:04 | 显示全部楼层
    谢谢分享学习一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-18 12:34
  • 签到天数: 1673 天

    连续签到: 2 天

    [LV.Master]伴坛终老

    发表于 2016-3-8 07:53:05 | 显示全部楼层
    需要连接网络使用,那他连接到哪个网了?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-3-13 10:11
  • 签到天数: 1088 天

    连续签到: 2 天

    [LV.10]以坛为家III

    发表于 2016-3-8 08:42:40 | 显示全部楼层
    感谢分享。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-19 16:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-3-9 13:28:47 | 显示全部楼层
    文章不错,记得一并发到我们的经验频道哟http://jingyan.eeboard.com/
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-5-1 13:16
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2018-6-30 17:56:33 | 显示全部楼层
    Very good! Thanks a lot!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-9-19 11:01
  • 签到天数: 30 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2018-8-13 10:44:02 | 显示全部楼层
    谢谢LZ分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-19 01:38 , Processed in 0.183502 second(s), 28 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.