3

我有以下 Arduino 代码。

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    if(Serial.available() > 0)
    {
        int b=Serial.read();
        Serial.println(b);
    }
}

如果我打开串行监视器并输入 00000001 我得到输出

48

48

48

48

48

48

48

49

好的,首先为什么是 48 行(最后一行是 49 行),其次为什么有这么多行?

我期待得到'1'的简单输出。

如果我将行更改Serial.println(b);Serial.println(00000001,DEC);,我会得到我所期望的(即“1”)。但是,如果我将行更改为Serial.println(b,DEC);,我会得到与以前相同的奇怪输出。

4

3 回答 3

5

48 和 49 是“0”和“1”的十进制表示。它打印 8 行,因为您在循环中调用 Serial.println。

你的最终目标到底是什么?Serial.read() 正在返回字符,而不是值:http ://arduino.cc/en/Serial/read

希望这可以帮助!

- 例子:

if(Serial.available() > 0)
{ 
    int num = 0;
    for( int i=7; i>=0; i-- )
    {
        if( Serial.read() == '1' )
            num |= (1 << i);
    }
    Serial.println(num);
}
于 2013-01-07T20:46:11.553 回答
2

您可以通过更改 b = Serial.read() - '0' 来解决这个问题。发生这种情况是因为 arduino 使用的是十进制代码,而不是字符。这是一个转换表:http ://www.asciitable.com/ 。

希望我有所帮助。

于 2013-04-15T13:38:09.523 回答
0

如果我理解正确,您希望接收一个 ascii 字符串 '000001' 并将其转换为整数。以下未经测试的示例将需要回车来指示字符串的结尾。

#include<stdio.h>
#include<stdlib.h>

int x=0;
int char_rev;
char buf0[20];

while(buf0[x]!=0) {

    char_rev = Serial.ReadData(buf0[x],1);
    if (char_rev==1) {
        if (buf0[x]=='/r') {
            buf0[x]=0;
        }
        else {             
            x++;
        }
    }        
}
x=atoi(buf0[]);

Serial.Println(x);
于 2013-01-08T17:44:22.367 回答