极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19473|回复: 9

串口如何数据提取变量,请各位高手指点

[复制链接]
发表于 2012-5-2 11:54:03 | 显示全部楼层 |阅读模式
本帖最后由 八爪鱼 于 2012-5-2 14:31 编辑

遇到的问题是这样的:

条件:串口不定时传入变化的数值  如: a=451  b=874  c=656
要求:
收到数值后 将对应的数值赋予对应变量q、w、e中 如收到c=238   则变量q等于238





我是这样写的:没办法把传入的 a=451  b=874  c=656 赋予对应变量 q、w 、e   请各位前辈指教,需要什么样的指令才能完成以上功能

  1. int comtemp;   //串口传来的数据保存到了这个变量中
  2. int q;                //用于存储a=后面的数值变量
  3. int w;               //用于存储b=后面的数值变量
  4. int e;                //用于存储c=后面的数值变量


  5. void setup()     
  6. {Serial.begin(9600);}   //设置波特率

  7. void loop()   
  8. {
  9. if (Serial.available() > 0)          //当串口有数据传来时执行
  10. {
  11.     comtemp = Serial.read();     //把串口的数据存到变量comtemp中


  12. }
  13.      comtemp=0; //清理变量  使数据最新
  14. }
  15.       

复制代码
这样的方式写对吗?各位前辈帮帮忙 新手问的问题很傻  

回复

使用道具 举报

发表于 2012-5-2 13:28:59 | 显示全部楼层
什么叫字母什么叫数值?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-2 14:21:44 | 显示全部楼层
本帖最后由 八爪鱼 于 2012-5-2 14:23 编辑
珜羽 发表于 2012-5-2 13:28
什么叫字母什么叫数值?


就是把串口收到的 a=238  中的238提取出来作为变量q的数值

a=   就是字母
238 就是数值  


新手,叫的可能不准。。。。勿见怪   
回复 支持 反对

使用道具 举报

发表于 2012-5-2 14:55:14 | 显示全部楼层
八爪鱼 发表于 2012-5-2 14:21
就是把串口收到的 a=238  中的238提取出来作为变量q的数值

a=   就是字母

= =   a叫做变量名,数字就是变量的值。。。

你上位机按照abc发送数值,单片机就按照qwe接收就行了。
回复 支持 反对

使用道具 举报

发表于 2012-5-2 14:56:25 | 显示全部楼层
  1. int comtemp;   //串口传来的数据保存到了这个变量中
  2. int q;                //用于存储a=后面的数值变量
  3. int w;               //用于存储b=后面的数值变量
  4. int e;                //用于存储c=后面的数值变量

  5. void setup()     
  6. {Serial.begin(9600);}   //设置波特率

  7. void loop()   
  8. {
  9. if (Serial.available() > 0)          //当串口有数据传来时执行
  10. {
  11.     q = Serial.read();     //把串口的数据存到变量q中
  12. }
  13. if (Serial.available() > 0)          //当串口有数据传来时执行
  14. {
  15.     w = Serial.read();     //把串口的数据存到变量w中
  16. }
  17. if (Serial.available() > 0)          //当串口有数据传来时执行
  18. {
  19.     e = Serial.read();     //把串口的数据存到变量e中
  20. }

  21. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2012-5-2 15:00:49 | 显示全部楼层
还有个问题是你的数字大于255  超过一个字节所能表示的范围了。

单片机串口是一个字节一个字节的发送数据的。。这个地方不知道库里面怎么处理的。你自己研究研究。。

或者把数据拆分成六个字节传送吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-2 15:07:51 | 显示全部楼层
珜羽 发表于 2012-5-2 14:55
= =   a叫做变量名,数字就是变量的值。。。

你上位机按照abc发送数值,单片机就按照qwe接收就行了。

{:3_61:}原来是这样啊。。。

弱弱的问一句  是按照顺序发送值就可以了吗   比如发送了  222 333 444  就按顺序对应到了 q w e 中吗。。。。。。。我这就去实验下。           谢谢!   
回复 支持 反对

使用道具 举报

发表于 2012-5-2 15:11:17 | 显示全部楼层
八爪鱼 发表于 2012-5-2 15:07
原来是这样啊。。。

弱弱的问一句  是按照顺序发送值就可以了吗   比如发送了  222 333 444   ...

一个字节最大255,一个字节8bit  表示范围为0~255  或者-127~128.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-2 15:26:54 | 显示全部楼层
珜羽 发表于 2012-5-2 15:11
一个字节最大255,一个字节8bit  表示范围为0~255  或者-127~128.

那完了{:3_60:}我要传的数值大于这个数有什么办法吗? 如果限制在0~255之间的话, 直接发送  “222 223 224 ”   就能对应到 q w e 中吗,前辈。    我是菜鸟。。。问题可能有些傻
回复 支持 反对

使用道具 举报

发表于 2012-5-2 15:40:35 | 显示全部楼层
八爪鱼 发表于 2012-5-2 15:26
那完了我要传的数值大于这个数有什么办法吗? 如果限制在0~255之间的话, 直接发送  “222 223 2 ...

对的。。。太大的话你分两次传嘛。。。
qh = Serial.read();
ql = Serial.read();

q=qh<<8 &ql;等价于 q=qh*256+ql;

评分

参与人数 1 +1 收起 理由
幻生幻灭 + 1 赞一个!

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-2 18:35 , Processed in 0.040284 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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