回答編集履歴

1

ソースにコメントを追加

2018/02/09 16:35

投稿

frodo821
frodo821

スコア322

test CHANGED
@@ -1,4 +1,4 @@
1
- 送信するデータをintからbytesに変えました。ソースを読むに、数値型で送って数値型で返してほしいわけではないと判断したからです。`ser.write(5)`ではストリームに0x05がおくられるのであって、strまたはcharの'5'が送られるわけではありません。
1
+ 送信するデータをintからbytesに変えました。ソースを読むに、数値型で送って数値型で返してほしいわけではないと判断したからです。`ser.write(5)`ではストリームに0x05がられるのであって、strまたはcharの'5'が送られるわけではありません。
2
2
 
3
3
  また、Arduinoでunicodeを使うのは少々骨が折れるのでエンコードをASCIIに変更しました。
4
4
 
@@ -16,21 +16,27 @@
16
16
 
17
17
 
18
18
 
19
- ser.write("5".encode('ascii'))
19
+ ser.write("5".encode('ascii')) #ascii文字として'5'を送信
20
20
 
21
21
 
22
22
 
23
23
  while True:
24
24
 
25
- line = ser.readline()
25
+ try:
26
26
 
27
- line = line.decode('ascii')
27
+ line = ser.readline()
28
28
 
29
- line = line.rstrip()
29
+ line = line.decode('ascii') #ascii文字としてデコード
30
30
 
31
- print(line)
31
+ line = line.rstrip()
32
32
 
33
+ print(line)
34
+
33
- time.sleep(1)
35
+ time.sleep(1)
36
+
37
+ except KeyboardInterrupt:
38
+
39
+ break #Ctrl+C キーストロークで中断
34
40
 
35
41
  ser.close()
36
42
 
@@ -40,7 +46,7 @@
40
46
 
41
47
  ```arduino
42
48
 
43
- #define retchar 1 //#ifdef用フラグ
49
+ #define retchar 1 //#ifdef用フラグ (True, Falseを送信したい場合はコメントアウトしてください)
44
50
 
45
51
 
46
52
 
@@ -54,13 +60,19 @@
54
60
 
55
61
  void loop() {
56
62
 
63
+ /** Serial.available()はストリームに残っているバイト数を返す。
64
+
65
+ * Serial.readで読みだしてあげる必要あり。
66
+
67
+ */
68
+
57
69
  if(Serial.available() > 0){
58
70
 
59
- char num = Serial.read();
71
+ char num = Serial.read(); //1バイト分読み込みます。
60
72
 
61
73
  #ifdef retchar
62
74
 
63
- Serial.println(num);
75
+ Serial.println(num); //文字として送り返します。
64
76
 
65
77
  #else
66
78