2017-11-28 11 views
3

Arduinoのボタンスイッチを使用して処理中のビジュアル表示をトリガーしようとしています。私は、ボタンが押されたかどうかを識別するために "HIGH"と "LOW"を使いました。ボタンスイッチArduinoから処理中:シリアル出力がnullを返す

しかし、私のコードはボタンの状態によって "HIGH"または "LOW"を与えるのではなく、常にnullを与えています。私はこれがかなり基本的だと思うが、私はちょうどかなり失われている。どんな助けやコメントをいただければ幸いですか?

以下はArduinoとProcessingのコードです。

const int buttonPin = 2; 
const int LEDPin = 13; 

int buttonState = 0; 

void setup() { 
    pinMode(buttonPin, INPUT); 
    pinMode(LEDPin, OUTPUT); 
    Serial.begin(9600); 
} 

void loop() { 
    int analogValue = analogRead(A0)/4; 
    Serial.write(analogValue); 
    buttonState = digitalRead(buttonPin); 
    if (buttonState == HIGH) { 
    Serial.write(HIGH); 
    digitalWrite(LEDPin, HIGH); 
    } else { 
    Serial.write(LOW); 
    digitalWrite(LEDPin, LOW); 
    } 
    delay(100); 
} 

処理コード:

import processing.serial.*; 
Serial myPort; 
String val; 

void setup() { 
    size(400,400); 
    String portName = Serial.list()[1]; 
    myPort = new Serial(this, portName, 9600); 
} 

void draw() { 
    if (myPort.available() > 0) { 
    val = myPort.readStringUntil('\n'); 
    println(val); 
    if (val == "HIGH") { 
     background(127,0,0); 
    } 
    if (val == "LOW") { 
     background(144, 26, 251); 
    } 
    } 
} 
+2

'Serial.write(HIGH)を使用し、' '、 ''、H''を' 'I''を送信しません。 'G'、 'H'、 '' \ n ''ではなく '1'です。 –

答えて

2

write()

は、シリアルポートにバイナリデータを書き込みます。このデータは1バイトまたは一連のバイトとして送信されます。

Serial.write(str) 

STR:あなたはSerial.writeに書き込みHIGHLOWを使用する際に一連のバイトとして


を送信するための文字列がだから、それは一連のバイトとして送信されます。受信バイトを処理するように処理部分を編集します。 Serial.write(HIGH);を実行することでArduinoので

import processing.serial.*; 
Serial myPort; 
String val; 
int len; //length of byte array 

void setup() { 
    size(400,400); 
    String portName = Serial.list()[1]; 
    myPort = new Serial(this, portName, 9600); 
} 

void draw() { 
    if ((len=myPort.available()) > 0) { 
    for(i=0;i<len;i++) 
     myByteArray=myPort.read(); 
    String val = String(myByteArray); 
    println(val); 
    if (val == "HIGH") { 
     background(127,0,0); 
    } 
    if (val == "LOW") { 
     background(144, 26, 251); 
    } 
    } 
} 
+0

これは間違っています。 'HIGH'と' LOW'は1バイトの1と0として送られます。これは本当に完全な文字列を読む信頼できる方法ではありません。 –

+0

私はそれを読んだ。しかし、「HIGH」と「LOW」は文字列ではありません。 –

1

HIGHLOWare defined 1とし、0

をしてSerial.write(LOW);あなただけのシングルバイト1または0

を送るしかしによるとされている次のと同じようにあなたの処理コードは、'H''I''G''H'および'\n'という文字をSerial.write(HIGH);に送信する予定です。

Arduinoコードでは、Serial.write(HIGH);Serial.write(LOW);Serial.print("HIGH\n");Serial.print("LOW\n");に置き換える必要があります。

1

ちょうどブールする整数からあなたbuttonState変数の型を変更し、

if(buttonState) { 
     Serial.println("HIGH"); 
} 
else { 
     Serial.println("LOW"); 
} 
関連する問題