2012-03-01 28 views
1

コンピュータからシリアルポート経由でデータの文字列をArduino Megaボードに送信しようとしています。データの文字列は、識別子のためのいくつかの文字と2つの値で構成されています。 1つの値は0から240の間です(2桁の値、3つの場合もあります)。2番目の値は-45〜+ 45の数値です。C#でコードを書き込んで文字列を送信しました。以下に示す。シリアル経由でC#から文字列を送信する

private void goButton_Click(object sender, EventArgs e) 
    { 
     if (!serialPort1.IsOpen) 
      return; 
     command = 43; 
     outBuffer += "E" + command1 + "F"; 
     outBuffer += "G" + command2 + "H"; 
     // Therefore send through serial port a string in the following format: 
     // E<command1>FG<command2>H 
     // Where <command1> will be an int value between 0 - 240, and 
     // <command2> will be be a value between -45 and + 45 
     serialPort1.Write(outBuffer); 
     outBuffer = ""; 
    } 

Arduinoボードで受け取った文字列から値を抽出する際に問題が発生しました。文字列を正しく表示しているようだが、私が間違っていることや、実際には2つの値をフィルタリング/抽出して2つの別々の変数に格納する方法を見つけることができなかったコードを書いた。私は現在持っているArduinoのコードは次のとおりです。

if (Serial.available() > 0) 
    { 
     char inData; 
     String inDataString; 
     inData = Serial.read(); 
     inDataString = inData; 
     // Shows the string of E<command1>FG<command2>H 
     Serial.print(inDataString); 
    } 

は、どのように私は、コンピュータから送信された2つの値を得ることができるようにArduinoの上のコードは、正しいことができますか?

答えて

0

私はArduinoのを知りませんが、あなたのような何かを行うことができます:あなたは、各コマンドの後にキャリッジリターン/ラインフィードを追加することができ、文字列を送信すると

int start = inDataString.indexOf('E') 
int end = inDataString.indexOf('F') 
char str_char[end - start]; 
inDataString.substring(start, end).toCharArray(str_char, sizeof(str_char)); 
int my_integer_data = atoi(str_char); 
0

を。同様に:

outBuffer = string.Format("E{1}F{0}G{2}H{0}", Environment.NewLine, command1, command2); 

あなたがそれを読んだ後、あなたは、あなたがそれを分割することができますので、各コマンドが独自のライン上に存在することを知っている:

string[] commands = inDataString.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); 
0

Arduinoの上のこの種のものを行う1つの簡単な方法TextFinderライブラリ(http://www.arduino.cc/playground/Code/TextFinder)を使用することです。例:

#include <TextFinder.h> 

TextFinder finder(Serial); 

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

void loop() 
{ 
    finder.find("E"); 
    long command1 = finder.getValue(); 
    finder.find("FG"); 
    long command2 = finder.getValue(); 
    finder.find("H"); 

    // Do something with command1 and command 2 
} 
関連する問題