八爪鱼 发表于 2012-5-2 11:54:03

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

本帖最后由 八爪鱼 于 2012-5-2 14:31 编辑

遇到的问题是这样的:

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




我是这样写的:没办法把传入的 a=451b=874c=656 赋予对应变量 q、w 、e   请各位前辈指教,需要什么样的指令才能完成以上功能
int comtemp;   //串口传来的数据保存到了这个变量中
int q;                //用于存储a=后面的数值变量
int w;               //用于存储b=后面的数值变量
int e;                //用于存储c=后面的数值变量


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

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


}
   comtemp=0; //清理变量使数据最新
}
      

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

珜羽 发表于 2012-5-2 13:28:59

什么叫字母什么叫数值?

八爪鱼 发表于 2012-5-2 14:21:44

本帖最后由 八爪鱼 于 2012-5-2 14:23 编辑

珜羽 发表于 2012-5-2 13:28 static/image/common/back.gif
什么叫字母什么叫数值?

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

a=   就是字母
238 就是数值


新手,叫的可能不准。。。。勿见怪   

珜羽 发表于 2012-5-2 14:55:14

八爪鱼 发表于 2012-5-2 14:21 static/image/common/back.gif
就是把串口收到的 a=238中的238提取出来作为变量q的数值

a=   就是字母


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

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

珜羽 发表于 2012-5-2 14:56:25

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

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

void loop()   
{
if (Serial.available() > 0)          //当串口有数据传来时执行
{
    q = Serial.read();   //把串口的数据存到变量q中
}
if (Serial.available() > 0)          //当串口有数据传来时执行
{
    w = Serial.read();   //把串口的数据存到变量w中
}
if (Serial.available() > 0)          //当串口有数据传来时执行
{
    e = Serial.read();   //把串口的数据存到变量e中
}

}

珜羽 发表于 2012-5-2 15:00:49

还有个问题是你的数字大于255超过一个字节所能表示的范围了。

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

或者把数据拆分成六个字节传送吧。

八爪鱼 发表于 2012-5-2 15:07:51

珜羽 发表于 2012-5-2 14:55 static/image/common/back.gif
= =   a叫做变量名,数字就是变量的值。。。

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

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

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

珜羽 发表于 2012-5-2 15:11:17

八爪鱼 发表于 2012-5-2 15:07 static/image/common/back.gif
原来是这样啊。。。

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

一个字节最大255,一个字节8bit表示范围为0~255或者-127~128.

八爪鱼 发表于 2012-5-2 15:26:54

珜羽 发表于 2012-5-2 15:11 static/image/common/back.gif
一个字节最大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 static/image/common/back.gif
那完了我要传的数值大于这个数有什么办法吗? 如果限制在0~255之间的话, 直接发送“222 223 2 ...

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

q=qh<<8 &ql;等价于 q=qh*256+ql;
页: [1]
查看完整版本: 串口如何数据提取变量,请各位高手指点