luckly 发表于 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 的值等于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;
      ......
            }
}

luckly 发表于 2013-6-7 16:52:42

拾瑞 发表于 2013-6-7 16:45 static/image/common/back.gif
if ( Serial.available()>0)
{
    char ch = Serial.read()


您好!谢谢指导。可是没有看太明白,先理解一下。

luckly 发表于 2013-6-7 17:00:37

有点明白了。

luckly 发表于 2013-6-7 20:11:42

拾瑞 发表于 2013-6-7 16:45 static/image/common/back.gif
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;
      
            }
}


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

maxims 发表于 2013-10-7 09:11:55

本帖最后由 maxims 于 2013-10-7 09:17 编辑

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;
      
            }
}


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;
      
            }
}
页: [1]
查看完整版本: 刚开始学习,向大侠请教一个串口接收的问题