极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12554|回复: 3

【教程】如何取出从PC 的串口监视器送到Arduino的多个数值

[复制链接]
发表于 2015-4-7 23:56:49 | 显示全部楼层 |阅读模式

常常有人问到要一次传许多个整数给 Arduino,
我来写一个简单函数给大家用:



  1. // 首先弄个全局便量 Global Variable 存放答案:

  2. long iAns[13]; // 最多 12 个, 是 Global variable
  3. // iAns[0] 第 0 个故意不用, 浪费一个 :-)
  4. ///
  5. // 用法:
  6. ///// int howMany = getNums( );
  7. ////// 如果 howMany 是 0 表示没 data
  8. /// 函数如下
  9. int getNums( ) {
  10.    if( ! Serial.available( ) ) return 0;
  11.    String gg = "";
  12.    while(Serial.available( ) ) {
  13.      gg += (char)Serial.read( );
  14.      delay(2);
  15.    }
  16.    String tmps = "      ";
  17.    int p, t, len;
  18.    len = gg.length( );
  19.    p = t = 0;
  20.    for(int i=1; i < 13; ++i){
  21.      t = gg.indexOf(",", p); // 找下一个 ","
  22.      if(t < 0) t = len; // 没找到 ! 已经最后一个 !
  23.      tmps = gg.substring(p, t);
  24.      tmps.trim( ); // 去掉头尾空白
  25.      iAns[i] = tmps.toInt( );
  26.      p = t + 1;
  27.      if(t == len) return i;
  28.    } // for(
  29.    return 12; // 最多支援 12
  30. } // getNums(
  31. /////////
  32. void setup( ) {
  33.    Serial.begin(9600);
  34.    //...
  35. }
  36. void loop( ) {
  37.    int ans = getNums( );
  38.    if(ans > 0) {
  39.      Serial.print(iAns[1]);
  40.      for(int i=2; i <=ans; ++i)
  41.         Serial.print(String(", ") + iAns[i]);
  42.      Serial.println("\r\n========");
  43.      for(int i = 1; i <= ans; ++i) {
  44.         Serial.println(String("") + i + ": " + iAns[i]);
  45.      }
  46.    } // if(
  47. }// loop(

  48. ///
  49. /************
  50. 好啦, 你可以测试看看从 Serial Monitor 串口监视器
  51. 输入 123, 5566, 33888, 432, 55555, 999999
  52. 然后按 ENTER 或点 Send

  53. ******
  54. 如果要输入友小数点的 float 也可以呢 ?
  55. 很简单,
  56. 把前面 long iAns[13];
  57. 的 long 改为 float 即可
  58. 当然
  59. for Loop 內那句
  60. kk[ i ] = tmps.toInt( );
  61. 要改为
  62. kk[ i ] = tmps.toFloat( );
  63. 这样就可以了 !
  64. **************************************************/
复制代码


好啦, 你可以测试看看从 Serial Monitor 串口监视器
输入 123, 5566, 33888, 432, 55555, 999999
然后按 ENTER 或点 Send


******
Q: 如果要输入友小数点的 float 也可以呢 ?
A:  很简单,
     把前面 long iAns[13];
     的 long 改为 float 即可
当然
   for Loop 內那句
       kk[ i ] = tmps.toInt( );
要改为
       kk[ i ] = tmps.toFloat( );
这样就可以了 !
回复

使用道具 举报

发表于 2015-4-8 10:44:06 | 显示全部楼层
谢谢分享学习一下
回复 支持 反对

使用道具 举报

发表于 2015-5-15 17:13:22 | 显示全部楼层
你好,我想问下怎么通过串口调试助手向stm32f411re单片机发数据,主要是它的设置程序怎么写啊,谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-16 00:52:09 | 显示全部楼层
songboliu 发表于 2015-5-15 17:13
你好,我想问下怎么通过串口调试助手向stm32f411re单片机发数据,主要是它的设置程序怎么写啊,谢谢

沒用過通过串口调试助手向stm32f411re单片机发数据
Sorry
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 03:03 , Processed in 0.037226 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表