0

PHPが読み取るためにエコーされたデータが必要になるため、LinuxからArduinoに送信されたデータを16進コマンドでエコーバックしたい。問題は、完全なデータを印刷するために改行を使用したくないことです。Arduinoで読み取るデータがなくなったら印刷したいです。コードは次のとおりです。

私が達成しようとしていること:

  1. ない場合に一連の読み取りの終わりを見つける方法\n
  2. 希望する形式で 16 進数を出力する方法。

Arduino コード:

char printByte[100];
byte getByte;
int pos = 0;
void setup(){
    Serial.begin(9600);
}

void loop(){
    if(Serial.available() > 0){
        getByte = Serial.read();
        printByte[pos] = getByte;
        pos++;
        printByte[pos] = '\0';

        if(getByte == '\n'){
            Serial.print(printByte);
            for(int i=0; i<=sizeof(printByte);i++){
                printByte[i]=0;
            }
            pos = 0;
        }
    }
}

16進数を送信するLinuxサンプルコード..

unsigned char pCom[2][7]={{0xFF,0x01,0x00,0x10,0x2F,0x2F,0x6F},
                            {0xFF,0x01,0x00,0x08,0x2F,0x2F,0x67}};

write(fd,pCom[0],8);

0xまた、どうすれば Arduino コードを削除できますFF 01 10か?

4

3 に答える 3

0

やりたいことは、置き換えることで(ほぼ)達成できます

Serial.print(printByte);
for(int i=0; i<=sizeof(printByte);i++){
   printByte[i]=0;
}

Serial.print(printByte);

for(int i=0; i<=sizeof(printByte);i++){
   if (0 == printByte[i])
       break;
   printf("%02x", printByte[i]);
}
printf("\n"); // Newline after output

if (0 == strpos(printByte, "QUIT"))
{
    // The cycle ends.
}

for(int i=0; i<=sizeof(printByte);i++){
   printByte[i]=0;
}

更新: Serial.print() コマンドは 0xFF を出力するコマンドです...: 出力Arduino 側を変更したいということを理解していませんでした。それは、実装方法がわからないため、Serialパッケージのソースを変更する必要があります。「0x%02x」または「0x02X」がどこかにあり、そこから 0x を削除する必要があります。

一連の読み取りの終了に関して、二重の \n を出力することがあります。次に、読み取ったバイトが \npos が 0 の場合、これは Arduino が空の行を書き込んでシーケンスが停止したことを意味します。

または、ほぼすべてのシーケンスをターミネータとして使用することもできます。上記のコードでは、文字列「QUIT」のチェックを追加しました。

于 2012-08-22T15:19:06.713 に答える