前提・実現したいこと
はじめまして、趣味の機械工作にM5StackとArduinoを組み合わせようとしたところ、プログラミングで行き詰ってしまい、その道の方にアイデアをもらうために今回質問をさせていただきました。
以前私はArduinoを用いた簡単な玩具を作ったことがあり、今回はその玩具にM5Stackを組み合わせ、画面にArduinoから受信した値を表示すれば面白くなるのではないかと考えました。
やり取りするデータが二種類あるため、混同を防ぐためにもググって出てきた、配列と疑似的なsplit関数を用いた方法を試したのですが、代入がうまくいかないのか、どちらのデータも最初に定義していた0が返ってくる形になりました。
いくつか試してみたところ、ググって持ってきたsplit関数が悪さをしているのではないかとまでは推測できたのですが、如何せん調べて出てきたものほぼそのままを使った状態なので、どう直せばいいのかも検討がつきません。
当方プログラミングの初心者のため覚束無い質問になっているかとは思いますが、どうかお知恵をお貸しください。
発生している問題
Arduinoから送った複数データを場合分けしてM5Stackの画面に表示したいが、場合分けと代入がうまくいかず両データ共に0が返ってくる。
該当のソースコード
POSX=1
POSY=2
//Arduino上の送信に関する部分 void loop(){ 中略 SendData(POSX, posX); SendData(POSY, posY); delay(10); } void SendData(int kind, int data){ Serial.write(kind); Serial.write(","); Serial.write(int(data)); Serial.write("\n"); }
//M5Stack上の疑似split関数など int split(String data, char delimiter, int *dst){ int index = 0; int arraySize = (sizeof(data)/sizeof((data)[0])); int datalength = data.length(); for (int i = 0; i < datalength; i++) { char tmp = data.charAt(i); if ( tmp == delimiter ) { index++; if ( index > (arraySize - 1)) return -1; } else dst[index] += float(tmp); } return (index + 1); } void serialEvent(){ String myString = Serial.readStringUntil('\n'); int index = split(myString, ',', cmds); if(Serial.available() >= 2){ switch((cmds[0])){ case POSX: posX = cmds[1]; break; case POSY: posY = cmds[1]; break; } } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/20 14:30
2020/11/21 04:43