极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14303|回复: 2

arduino串口通信直接输入数值的方法及代码

[复制链接]
发表于 2015-6-2 17:48:03 | 显示全部楼层 |阅读模式
首先不知道有没有这样的库函数,总之下面的代码是有效的。
有限繁琐,等待大神来瘦身呵呵。


我们知道Serial.read()读出来的是字符的ascii码,这样输入多位字符的时候便成了一个个分离开的单个字符。
我们只需要将这些带个字符按规律乘以10的乘方即可还原成需要的数值了。

这里以回车符 即'\r'为结束标志 可以根据需要修改
回复

使用道具 举报

 楼主| 发表于 2015-6-2 17:48:20 | 显示全部楼层
代码转自 uer8.com 大学生电子爱好者哈 分享给大家。
  1. char mes,i=0;
  2. int real,zero=0;
  3. int number; //number储存实际输入数值

  4. int change(int);
  5. int pow(int,int);

  6. void setup(){
  7. Serial.begin(9600);
  8. }


  9. void loop(){
  10. while(Serial.available()>0){
  11. mes=Serial.read();

  12. //该部分代码用于记录末尾0的个数,然后最后添上
  13. if(mes=='0') zero++;
  14. else if(mes!='\r') zero=0;

  15. //若需修改结束标志,可以更改'\r'
  16. if(mes=='\r') {
  17. i=0;
  18. number=change(real);
  19. for(;zero>0;zero--) number=number*10; //该循环用于将末尾丢失的0添上
  20. Serial.println(real);
  21. Serial.println(number); //number中储存实际输入数值,real是反过来的数值可以无视
  22. real=0;
  23. break;
  24. }
  25. real+=(mes-'0')*pow(10,i);
  26. i++;
  27. }

  28. }

  29. int pow(int n,int x){ //自制简易乘方函数,返回n^x。也可以试试调用math.h中的pow()
  30. int val=1;
  31. for(;x>0;x--) val=val*n;
  32. return val;
  33. }

  34. int change(int a){ //读到的数值首末倒过来
  35. int p,real;
  36. int i=0,n=0;
  37. for(p=a;p!=0;n++) p=p/10; //n记录数值的位数
  38. for(;a!=0;i++){
  39. p=a%10; //取余,一次取出个位
  40. real+=p*pow(10,n-i-1);
  41. a=a/10;
  42. }
  43. return real;
  44. }
复制代码
其实还有一个思路可以试试:
将读到的字符按顺序存储到字符数组里,然后一个个取出来乘以10的乘方即可。
这样可以免去将数的头尾倒过来。

不过既然写出来了就懒得改了
回复 支持 反对

使用道具 举报

发表于 2015-6-3 16:06:37 | 显示全部楼层
            谢谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 22:15 , Processed in 0.055613 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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