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' の 10 進数表現です。ループで Serial.println を呼び出しているため、8 行を印刷しています。

あなたの最終目標は正確には何ですか?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 に答える
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 に答える