极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9491|回复: 2

串口数据数制转换问题

[复制链接]
发表于 2014-4-2 14:13:57 | 显示全部楼层 |阅读模式
本帖最后由 烦人 于 2014-4-2 14:13 编辑

串口数据数制转换问题
int count = 0;
int data[22];
void setup(){
  pinMode(4, INPUT);                    
  Serial.begin(9600);
  delay(200);
  attachInterrupt(0,getBit,FALLING);   
}
void loop(){
    int i=0;
    while(count>21){
    detachInterrupt(0);
    for(i=0; i<22;i++){
      Serial.print(data);
    }
    Serial.println();
    delay(200);
    count = 0;
    attachInterrupt(0,getBit,FALLING);
    }
    Serial.println();
    delay(200);
  }
}
void getBit(){
  if(count < 22){
    if(digitalRead(4)==1)
      data[count] = 1;
    else
      data[count] = 0;
    count++;
  }
}

问题:这个程序可以运行,可以在PC串口上显示0001001111…….一行22位数字,高位在前,我想在PC串口上显示十进制数,我把上面程序进行了这样的处理了
for(i=22; i>0;i--){   
Serial.print(data);   
    }
  处理后PC上可以得到 …..1111001000这样一行数。(达到了要求22位数字头尾颠倒了)
然后将Serial.print(data);改为Serial.print(1-data);  把每一位的数取反,得…..0000110111
然后将Serial.print(data); 再改为Serial.print(1-data,DEC); 想这样在PC上得到十进制数,但不行。看来这个…..0000110111不是二进制数,是个字符串?
请教一下高人,我如何才能在PC串口上得到十进制数,先谢谢了。
回复

使用道具 举报

发表于 2014-4-2 21:38:33 | 显示全部楼层
由於你現在是 22 個 bit, 並非一個 value, 當你用 print(x, DEC) 是, 每次只是提供一個 bit, 無論用 二進, 十進 還是 十六進, 結果都是 0 或 1.
先把 22 個 bit 合成一個 數 (22 bit 的, 要用 long / unsigned long 才可以), 然後再 print 出來吧.
如果本身接收時是高位在前, 你可以在接收時直接合成, 例如:

long val = 0;
for (..) val = val * 2 + digitalRead(4);   
// 不太肯定 << 是否可用於 long, 否則 val = val << 1 + digitalRead(4); 比較易明白一點.

之前, 用 Serial.print(val); 就可以得到 十進的字串了; 如需要的是數值, 就改用 Serial.write(val);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-3 14:47:26 | 显示全部楼层

由於你現在是 22 個 bit, 並非一個 value, 當你用 print(x, DEC) 是, 每次只是提供一個 bit, 無論用 二進, 十進 還是 十六進, 結果都是 0 或 1.
先把 22 個 bit 合成一個 數 (22 bit 的, 要用 long / unsigned long 才可以), 然後再 print 出來吧.
如果本身接收時是高位在前, 你可以在接收時直接合成, 例如:

long val = 0;
for (..) val = val * 2 + digitalRead(4);   
// 不太肯定 << 是否可用於 long, 否則 val = val << 1 + digitalRead(4); 比較易明白一點.

之前, 用 Serial.print(val); 就可以得到 十進的字串了; 如需要的是數值, 就改用 Serial.write(val);


首先非常感谢 super169!
我试过你说的很对,无论用 二進, 十進 還是 十六進, 結果都是 0 或 1.
我是个新手,抱歉,
我用 long / unsigned long 试一试,回头来汇报。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 00:45 , Processed in 0.033687 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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