极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10177|回复: 5

刚开始学习,向大侠请教一个串口接收的问题

[复制链接]
发表于 2013-6-7 15:25:58 | 显示全部楼层 |阅读模式
我用STC单片机,向arduino板通过串口不停的循环发送:


$1170904,00&
$1120904,01&
$1170904,02&
$1170904,03&
$1120904,04&
$1170904,05&
$1170904,06&
$1120904,07&
$1170904,08&
$1170904,09&
$1170904,10&
$1120904,11&
$1170904,12&
$1170904,13&
$1170904,00&
$1120904,01&
$1170904,02&
$1170904,03&
$1120904,04&
$1170904,05&
$1170904,06&
$1120904,07&
$1170904,08&
$1170904,09&
$1170904,10&
$1120904,11&
$1170904,12&
$1170904,13&

想用arduino板把接收到的数据转换成数组 ,如接收到$1170904,13& 转换为numdtat[13] 的值等于1170904;

char temp;
while(Serial.available()>0)
{
       temp =Serial.read();
     if (temp == '$')
     {
            

       }
     

}



具体怎么转换就搞不清了,哪位大侠给指导一下,谢谢!急!
  
回复

使用道具 举报

发表于 2013-6-7 16:45:52 | 显示全部楼层
if ( Serial.available()>0)
{
    char ch = Serial.read()
     switch(ch) {
      case '0'...'9':
        v = v * 10 + ch - '0';
         break;
      case ',':
         break;
        ......
              }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-7 16:52:42 | 显示全部楼层
拾瑞 发表于 2013-6-7 16:45
if ( Serial.available()>0)
{
    char ch = Serial.read()

您好!谢谢指导。可是没有看太明白,先理解一下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-7 17:00:37 | 显示全部楼层
有点明白了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-7 20:11:42 | 显示全部楼层
拾瑞 发表于 2013-6-7 16:45
if ( Serial.available()>0)
{
    char ch = Serial.read()

int v ;
if ( Serial.available()>0)
{
    char ch = Serial.read()
     switch(ch) {
      case '0'...'9':
        v = v * 10 + ch - '0';
         break;
      case ',':
         break;
      
              }
}


按您程序试了一下,没成功。能麻烦您说的再详细些吗?谢谢!
回复 支持 反对

使用道具 举报

发表于 2013-10-7 09:11:55 | 显示全部楼层
本帖最后由 maxims 于 2013-10-7 09:17 编辑
  1. int v ;
  2. if ( Serial.available()>0)
  3. {
  4.     char ch = Serial.read()                 //读串口到ch
  5.      switch(ch) {
  6.       case '0'...'9':                               //如果收到的ch值为0-9的数字,就执行下边的语句
  7.         v = v * 10 + ch - '0';               //奥妙就在这里拉,V的值是上次接收到的,CH-"0"是把接收到的字符格式变成数字格式,但是他的写法有问题,应该多一个括弧变成v = v * 10 + (ch - '0')。
  8.                                                       //如果你需要发送8976543,第一次收到的如果是8,在第二次的时候应该是9,那么对应v * 10 + (ch - '0')=8*10+ (39 - 30)=89,是不是你需要的8976...开头两位?
  9.          break;
  10.       case ',':                                     //如果收到的是“,”就退出判断程序
  11.          break;
  12.       
  13.               }
  14. }
复制代码


int v ;
if ( Serial.available()>0)
{
    char ch = Serial.read()                 //读串口到ch
     switch(ch) {
      case '0'...'9':                               //如果收到的ch值为0-9的数字,就执行下边的语句
        v = v * 10 + ch - '0';               //奥妙就在这里拉,V的值是上次接收到的,CH-"0"是把接收到的字符格式变成数字格式,但是他的写法有问题,应该多一个括弧变成v = v * 10 + (ch - '0')。
                                                      //如果你需要发送8976543,第一次收到的如果是8,在第二次的时候应该是9,那么对应v * 10 + (ch - '0')=8*10+ (39 - 30)=89,是不是你需要的8976...开头两位?
         break;
      case ',':                                     //如果收到的是“,”就退出判断程序
         break;
      
              }
}
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 15:46 , Processed in 0.036824 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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