我有以下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);
,我会得到与以前相同的奇怪输出。
答案 0 :(得分: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);
}
答案 1 :(得分:2)
您可以通过更改b = Serial.read() - '0'来解决此问题。这是因为arduino使用的是十进制代码,而不是char。这是转换表:http://www.asciitable.com/。
希望我帮助过。
答案 2 :(得分: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);