2017-12-18 19 views
-1

arduinoボードからシリアル信号を処理スケッチに取得する必要があります。私は "R12" "S40" "T80"のような文字列形式で値を送ります。文字列をそのまま文字列として取得する方法を教えてください。私たちは送った。私は内部処理のserialEventメソッドを入れることができるコードが必要です。Arduino - シリアル通信の処理

Arduinoのコード:

void loop() { 
    int r = random(10,100); 
    int s = random(10,100); 
    int t = random(10,100); 
    Serial.print("R"+String(r)); 
    Serial.print("S"+String(s)); 
    Serial.print("T"+String(t)); 
    delay(1000); 
} 

処理コード:

String data = ""; 
int R,S,T; 
void serialEvent(Serial p) { 
    while(p.available()>0){ 
    data = p.readString(); 
    } 
    println(data); 
} 

私は最後のR S T変数にそれぞれR S T値を受信取得する必要があります。

ありがとうございます!

+2

arduinoコードをスナップショットとして提供する理由は何ですか?それをテキストとして挿入してください。あなたの処理コードはどこですか? – Piglet

+0

ちょうど変更されました! :) –

答えて

2

前述のように、問題を見つけるためにすべてのコードを取得することをお勧めします。 セットアップ処理中に関数 "bufferUntil()"を追加しなかったと仮定します。そうすれば、シリアルが値を受け取るたびに表示されます。 私はあなたにソリューションを提案できますが、それは唯一の問題ではありませんが、うまくいくようです。

Arduinoコードでは、Serial.print()の代わりにSerial.println()を使用してメッセージを区切ります。

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

void loop() { 
    int r = random(10,100); 
    int s = random(10,100); 
    int t = random(10,100); 
    Serial.println("R"+String(r)); 
    Serial.println("S"+String(s)); 
    Serial.println("T"+String(t)); 
    delay(1000); 
} 

ですから、処理に

Rxx 
Sxx 
Txx 

としてメッセージを送信します、あなたは "bufferUntil(LF)" 機能を使用する必要があります。 「/ n」を受信するまで、シリアルポートからのすべてのメッセージを保存します。 その後、別の関数を使用して識別子に値を関連付ける必要があります。

// Example by Tom Igoe 
import processing.serial.*; 
Serial myPort; // The serial port 
PFont myFont;  // The display font 
String inString; // Input string from serial port 
int lf = 10;  // ASCII linefeed 

String data = ""; 
int R,S,T; 

void setup() { 
    size(400,200); 
    // List all the available serial ports: 
    printArray(Serial.list()); 
    // Open whatever port is the one you're using, mine is one. 
    myPort = new Serial(this, Serial.list()[1], 9600); 
    myPort.bufferUntil(lf);       //delimiter of serial buffer end line       
} 

void draw() { 
    background(0); 
    text("received: "+" R="+R+" S="+S+" T="+T, 10,50); //Display value on the window 
} 

void serialEvent(Serial p) { 
    while(p.available()>0){ 
    String buf=p.readString();    //Read serial input 
    println(buf); 
    if(!buf.equals('\n'))      //delete null='/n' from arduino println() 
     data=buf;         //Save buffer 
    } 
    /*char id=data.charAt(0);      //Get id from buffer 
    int value=parseInt(data.substring(1,3));  //Get the value from buffer 
    identifyVariable(id,value);     //Associate id and value*/ 
} 

void identifyVariable(char ID, int value){ 
    switch(ID){   //associate id with value 
    case('R'): 
     R=value; 
     break; 
    case('S'): 
     S=value; 
     break; 
    case('T'): 
     T=value; 
     break; 
    default: 
     println("error "+ID+" "+value); 
     break; 
    } 
} 
+0

これは素晴らしいです、ありがとう! –

関連する問題