2012-05-06 28 views
0

私は現在、大学でarduinoプロジェクトに取り組んでいます。基本的に私がやろうとしているのは、VVVVからarduinoに一連のデータを送ることですが、データを配列に解析する必要があり、どうやってこれを行うのか全く分かりません!シリアル文字列データを配列に解析する(VVVV to Arduino)

VVVVから送信される文字列は、次のようなものです。 U、C、R、|、W、H、P、Iの各値は毎回特定のサーボに書き込まれる必要があるので、値1はサーボ1に行く必要があります。

私のコードは現時点ではかなりコード化されていますが、データを解析する方法を工夫するとより効率的になるようにするつもりです。

#include <Servo.h> 
Servo servo1; 
Servo servo2; 
Servo servo3; 
Servo servo4; 

char array1[4] = { '0', '0', '0', '0'}; //array for midi variables 

void setup() 
{ 
// begin the serial communication 
Serial.begin(9600); 

servo1.attach(2); 
servo2.attach(3); 
servo3.attach(4); 
servo4.attach(5); 

} 

void loop(){ 
    while (Serial.available() == 0) { 
    array1[0] = 0; 
    array1[1] = 0; 
    array1[2] = 0; 
    array1[3] = 0; 
    } 

{ 


// check if data has been sent from the computer 
if (Serial.available() >= 4) { 
    for (int i = 0; i < 4; i++) 
    array1[i] = Serial.read(); 


    } 


    Serial.print(array1[0]); 
    Serial.print(array1[1]); 
    Serial.print(array1[2]); 
    Serial.print(array1[3]); 



    servo1.write(array1[0]); 
    servo2.write(array1[1]); 
    servo3.write(array1[2]); 
    servo4.write(array1[3]); 


} 
} 

編集 - 私はおそらく私が最終的に7個のサーボを使用することを探していますが、一瞬、私はちょうど私の回路で4を使用していることを言及する必要があります。また、このパッチをアップロードしてVVVVを有効にすると、arduinoは接続を切断します。

答えて

0
if (Serial.available() > 3) 
{ 
    for (int i=0; i < 4 ; i++) 
    { 
     array[i] = Serial.read(); 
    } 
    Serial.flush(); 
} 

希望すると助かります!

+0

こんにちは、残念ながら、これは問題を修正していません。 : 私はVVVVパッチ(データの送信を開始する)を有効にすると、arduino自体が切断されます。 – thatseika

+0

ハードウェアの問題のように見えます... – opc0de

+0

あなたは正しいです、それは力の問題でした私がそれを見つけたら、私はコードを投稿します。 もう一度ありがとう:) – thatseika

1

@ opc0deこのシリアルの問題は、多くの混乱を招いています。私自身も含めておそらく同様の問題here

私は最近これに取り組んでいます。 Arduinoは、Arduino IDE以外のほとんどのものからのシリアル番号 の通信を受信すると自動的にリセットされます。このため、 はIDEから送信できますが、node.jsでは送信できません。

私はUnoを持っていて、ResetとGroundの間にコンデンサを入れました。ここには のページがあります。がんばろう。 http://arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection

0

あなたは、すぐに受信した値を代入したい場合は、あなたがこれを行うことができます:

if(Serial.available() >= 3) { 

    servo1.write(Serial.read()); 
    servo2.write(Serial.read()); 
    servo3.write(Serial.read()); 
    servo4.write(Serial.read()); 

    Serial.flush(); 
} 

後でもっと何かをする、配列に格納されている受信した値を持つようにしたい場合は、次に:

if(Serial.available() >= 3) { 

    for(i = 0; i < 4; i ++) { 

     array[i] = Serial.read(); 
    } 
    Serial.flush(); 
}