質問: var - 0x30; switch (var) { case 1: //処理したい内容 } break; ```
回答: シリアル通信の、物理層でのデータ単位は1バイトです。つまり、単純に送って、受け取る...が成り立つのは1文字分だけということ。これがあなたのプログラムの今の状態です。複数のデータをまとめてやりとりしたいのなら、何らかの規則(プロトコル)を決めて、1バイトのデータをいくつか束ねてやる必要が出てきます。 一番(かどうかはともかく)簡単に考えると、単純に2つ送られたデータを10の位、1の位と解釈して足せばできそうです... ただ、それだと、例えばプログラムの起動時に1文字受信しそこねたら? 12 34 56 を送ったつもりが 23 45 6 を受けた取ったことになってしまいます。あまりうれしくないですね。 では、空白を受け取ったらそれまでのデータをまとめてあつかうことにしてみましょうか。12 34 56 ...これなら、受信し損ねた1は仕方ないとして34と56はちゃんと拾えるでしょう。区切り文字は'0'から'9'以外であればいいわけですが、送信側と受信側で口裏を合わせておく必要だけはあります。 そうすると、送信側は ``` z=12 ser.write(str(z).encode()) ser.write(b' ') ``` 受信側は ``` int val=0; if(Serial.available()){ //データが存在するときだけ受信処理以降を行う char c=Serail.read(); if( c==' '){ //区切り文字を受信したら Serial.println(val); //とりあえず表示してみる //その他、適当にやりたいことを記述 }else{ val*=10;//これまで蓄積している値を10倍する val+=Serial.read()-'0';//ひとけた目に足し込む } } ``` (プログラムはいずれも動作未確認です) 送受間のお約束は他にも「これからx文字おくるよ」と知らせて送るとか、いろいろ考えられます。