
前提・実現したいこと
つい先日、arduinoとpythonのシリアル通信で悩み質問したところ解決することができました。回答者の方ありがとうございました。そこで回答をみてよくわからないところが出てきました。私の理解不足なのですが、これまた調べてもうまくいきません。
本題なのですがこのコードをpythonスクリプトから実行すると入力した数字と半角の文字列を返してくれます。ここまではよいのですが、#defineをコメントで無効にしてから実行すると「True」を返してほしいのですが「False」が返ってきますこれはなぜでしょうか。私の考えでは#defineを無効にしてもifの中は実行されると考えているのですが、違うでしょうか?
###Arduinoのコード
#define retchar 1//#ifdef用フラグ (True, Falseを送信したい場合はコメントアウトしてください) void setup() { Serial.begin(9600); } void loop() { /** Serial.available()はストリームに残っているバイト数を返す。 * Serial.readで読みだしてあげる必要あり。 */ if(Serial.available() > 0){ char num = Serial.read(); //1バイト分読み込みます。 //Serial.println("return"); // #defineを無効にするとここも実行されないのでifは実行されない? #ifdef retchar Serial.println(num); //文字として送り返します。 #else Serial.println("True"); }else{ Serial.println("False"); //文字列を渡している場合は実行されないはず #endif } }
Pythonのコード
python
1import serial 2import time 3 4ser = serial.Serial('/dev/cu.usbmodem1421', 9600) 5time.sleep(3) 6 7ser.write("5".encode('ascii')) #ascii文字として'5'を送信 8 9while True: 10 try: 11 line = ser.readline() 12 line = line.decode('ascii') #ascii文字としてデコード 13 line = line.rstrip() 14 print(line) 15 time.sleep(1) 16 except KeyboardInterrupt: 17 break #Ctrl+C キーストロークで中断 18ser.close()
試したこと
defineを無効にして実行したところ
「char num = Serial.read(); //1バイト分読み込みます。」
も実行されないみたい
defineを無効にするとストリームにはなにもない?
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。