Linux Mint 15 で Arduino と C を使用して単純な SLAM プロジェクトを実装しようとしています。Arduino プロジェクトは、Bluetooth (シリアル) 経由でノートブックにデータを送信しています。データは C プログラムによって読み取られます。Arduinoシリアルではデータが正しく表示されますが、ノートブックでは受信データが間違っています。(画像の白はArduinoのデータです。ターミナルは「受信した」データを示しています。)
送信d080x096y099z035
(たとえば) と受信99z0356y0999z035
(順不同?) を行っています。
それで、私はいくつかの質問があります:
read()
C でコマンドを作成し、正しい順序と長さでデータを読み取るにはどうすればよいですか? (次数:d000x000y000z000
、長さ = 16)Arduinoの送信機能で、 と を使って長さの違いは
Serial.print(char buffer[])
ありSerial.println(char buffer[])
ますか?'\n'
(バッファの最後に a または何かを追加するようなものですか?)delay()
この関数を Arduino コードと C コードのどちらで使用する必要がありますか?
アルドゥイーノでは:
...
int buffer_size = 17;
char buffer[17];
//void setup()
void loop(){
//create the string resp = "d000x111y222z333"
...
resp.toCharArray(buffer, buffersize);
bluetooth.print(buffer);
delay(200);
}
Cプログラムでは:
...
int fd = open("/dev/rfcomm4", O_RDONLY | O_NOCTTY | O_NDELAY);
printf("fd code %d\n", fd);
if (fd == -1)
{
gchar *msg = "open_port: Unable to open /dev/rfcomm4";
gtk_label_set_text(GTK_LABEL(label), msg);
perror("error: ");
}
char buffer[17];
int n;
printf("entering in loop...\n");
while (1)
{
n = read(fd, buffer, sizeof(buffer));
printf("%s\n", buffer);
}