庆科社区
直播中

agdhun

9年用户 470经验值
擅长:可编程逻辑 嵌入式技术 EDA/IC设计 处理器/DSP 接口/总线/驱动 RF/无线
私信 关注

【MiCOKit试用体验】APP端之电机添加

本帖最后由 agdhun 于 2015-9-28 15:38 编辑

       demo跑完后我就开始做电机的添加,期间遇到了复杂繁多的html代码,APP端数据发不出去等问题,好在现在已解决,现在发帖庆祝一下.
       先说说APP端的修改,一开始准备用总动员的源码,但是一来html代码太多,混杂了好多页面在一个文件,虽说我以前微看过Html语法,但这实属复杂;其二,我按照APICloud实例所讲的方法,云编译后再下载,始终返回不到设备列表页面,果断放弃,没有那么多时间去弄代码,选了第一个例子,ReadRGB进行修改了.
       首先找到html/rgbctrl.html文件,这个文件就是显示设备控制的页面,其他我们不用管,直接找到body标签,复制以下代码:

  1.         

    •                

    •                         
    •                         Motor
    •                         
    •                

    •         

复制04devicename-dinaji-120.png,smallicon-8kaiguan.png,smallicon-9kaiguan.png这几个文件到image目录下;接着在script标签添加以下代码:
  1. $("#motorbtn").click(function() {
  2.         var topic = device_id + '/in';
  3.         var command;
  4.         var mtbtn = $("#motorbtn");
  5.         if (mtbtn.attr("src") == "../image/smallicon-9kaiguan.png") {
  6.                 mtbtn.attr("src", "../image/smallicon-8kaiguan.png");
  7.                 command = '{"MOTOR_KEY":0}';
  8.         } else {
  9.                 mtbtn.attr("src", "../image/smallicon-9kaiguan.png");
  10.                 command = '{"MOTOR_KEY":4800}';
  11.         }
  12.         publishcmd(topic, command);
  13. });
代码稍微解释一下:mtbtn.attr就是获取mtbtn的src属性或者设置src属性,publishcmd就是通过topic和command变量,发布标题和信息,然后设备可以通过订阅标题,获取到云端信息,之后就可以提交云端了,添加三个模块,云编译,这样APP端就定制完成。
接下来就开始介绍固件端的修改,一些必备的步骤就不介绍了,庆科人员在wiki上写的很清楚了。
代码也是借一个人,再此表示感谢。
user_main.c的user_main函数改成如下
  1. OSStatus user_main( app_context_t * const app_context )
  2. {
  3.   user_log_trace();
  4.   OSStatus err = kUnknownErr;
  5.   fogcloud_msg_t *recv_msg = NULL;
  6.   json_object *recv_json_object = NULL;
  7.   
  8.   /* rgb led control variants, use h*** color.
  9.    * h -- hues
  10.    * s -- saturation
  11.    * b -- brightness
  12.    */
  13.   bool led_switch = false;
  14.   int led_hues = 0;
  15.   int led_saturation = 0;
  16.   int led_brightness = 0;
  17.   int motor_val = 0;
  18.    
  19.   require(app_context, exit);
  20.   
  21.   h***2rgb_led_init();  // rgb led init
  22.   
  23.   #if 0
  24.     //err = MicoPwmInitialize((mico_pwm_t)MICO_PWM_IR_SEND, 38000, 50);
  25.     err = MicoPwmInitialize(MICO_PWM_IR_SEND, 38000, 50);
  26.     ewh_log("MicoPwmInitialized err =%d..",err);
  27.     ewh_log("MicoPwmStart..");
  28. //  err =  MicoPwmStart((mico_pwm_t)MICO_PWM_IR_SEND);
  29.     err =  MicoPwmStart(MICO_PWM_IR_SEND);
  30.     ewh_log("MicoPwmStart  end err =%d..",err);
  31.     //dc_motor_init();
  32.   #else
  33.     dc_pwm_init();
  34.   #endif


  35.   while(1){
  36.     mico_thread_msleep(200);
  37.    
  38.     // check fogcloud connect status
  39.     if(!app_context->appStatus.fogcloudStatus.isCloudConnected){
  40.       continue;
  41.     }
  42.    
  43.     /* get a msg pointer, points to the memory of a msg:
  44.      * msg data format: recv_msg->data =
  45.      */
  46.     err = MiCOFogCloudMsgRecv(app_context, &recv_msg, 100);
  47.     if(kNoErr == err){
  48.       // debug log in MICO dubug uart
  49.       user_log("Cloud => Module: topic[%d]=[%.*s]tdata[%d]=[%.*s]",
  50.                recv_msg->topic_len, recv_msg->topic_len, recv_msg->data,
  51.                recv_msg->data_len, recv_msg->data_len, recv_msg->data + recv_msg->topic_len);
  52.       
  53.       // parse json data from the msg, get led control value
  54.       recv_json_object = json_tokener_parse((const char*)(recv_msg->data + recv_msg->topic_len));
  55.       if (NULL != recv_json_object){
  56.         json_object_object_foreach(recv_json_object, key, val) {
  57.           if(!strcmp(key, "rgbled_switch")){
  58.             led_switch = json_object_get_boolean(val);
  59.           }
  60.           else if(!strcmp(key, "rgbled_hues")){
  61.             led_hues = json_object_get_int(val);
  62.           }
  63.           else if(!strcmp(key, "rgbled_saturation")){
  64.             led_saturation = json_object_get_int(val);
  65.           }
  66.           else if(!strcmp(key, "rgbled_brightness")){
  67.             led_brightness = json_object_get_int(val);
  68.           }
  69.            else if(!strcmp(key, "MOTOR_KEY"))
  70.              motor_val = json_object_get_int(val);
  71.         }
  72.         
  73.         // control led
  74.         if(led_switch){
  75.           h***2rgb_led_open(led_hues, led_saturation, led_brightness);  // open rgb led
  76.           OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_3, "LED on          ");  // show cmd on LCD
  77.          
  78.         }else{
  79.           h***2rgb_led_close();  // close led
  80.           OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_3, "LED off         ");  // show cmd on LCD
  81.          
  82.         }
  83.         
  84.          
  85.         dc_pwm_set(motor_val);
  86.         // free memory of json object
  87.         json_object_put(recv_json_object);
  88.         recv_json_object = NULL;
  89.       }
  90.       
  91.       // NOTE: must free msg memory after been used.
  92.       if(NULL != recv_msg){
  93.         free(recv_msg);
  94.         recv_msg = NULL;
  95.       }
  96.     }
  97.     else{
  98.       // update info on LCD
  99.       OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_2, "Demo RGB LED    ");  // clean line2
  100.       OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_3, "LED control     ");  // show led cmd
  101.       OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_4, "                ");  // clean line4
  102.     }
  103.   }


  104. exit:
  105.   user_log("ERROR: user_main exit with err=%d", err);
  106.   return err;
  107. }



       dc_motor.c,dc_motor.h就以附件形式给吧,代码比较长;之后编译下载,复位就可以控制电机了。[qq]1417075248[/qq]

    dc_motor.zip (2015-9-23 13:54 上传)

    2.14 KB, 下载次数: 7

更多回帖

相关帖子

电机
发帖
登录/注册
×
20
完善资料,
赚取积分