###前提条件
以下のようなプログラムがあるとします。arduinoではタクトスイッチを押した際、serialモニタに文字列の"1"を出力します。ボタンが押されていない場合は"0"を出力します。
arduino
1#define button 11 2 3void setup() { 4 pinMode(button, INPUT); 5 Serial.begin(9600); 6} 7 8void loop() { 9 int buttonState = digitalRead(button); 10 if (buttonState == HIGH) { 11 Serial.println("1"); 12 delay(500); 13 } 14 else{ 15 Serial.println("0"); 16 } 17}
processingではarduinoからのシリアルを読み取り、その値から条件分岐させます。値が"1"の場合はコンソールに"通っている"と出力し、それ以外の場合は"通ってない"と出力します。
processing
1import processing.serial.*; 2 3Serial Port; 4String text=""; 5 6void setup() { 7 size(500, 500); 8 Port = new Serial(this, "/dev/cu.usbmodem14201", 9600);//ポート番号とボーレートの設定 9 Port.bufferUntil(10); 10} 11 12void serialEvent(Serial Port) { 13 text = Port.readStringUntil(10); 14} 15 16void draw() { 17 if(text=="1"){ 18 println("通ってる"); 19 } 20 else{ 21 println("通ってない"); 22 } 23 println("Text: "+text); 24}
###問題点
ボタンを押した際"1"という文字がprocessingコンソールには反映されているのですが、条件式には反映されません(コンソール上では1と表示されるのですが、text=="1"という条件式でtrueにならないという事です)。また、elseをif(text=="0")とすると、どちらも通らなくなります。おそらく、arduinoから送られてくるデータとprocessingで読み込むデータはビット単位で違うというのが原因かなと考えています(なんらかの変換が必要なのでしょうか?)。シリアル通信で送られたデータをprocessing内のif文で正しく処理をするにはどのような組み込みが必要でしょうか。回答お待ちしております。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/27 11:25
2020/07/27 11:43
2020/07/27 12:37
2020/08/13 06:27