teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

ソースコードについて

2020/06/21 05:12

投稿

TokiShin
TokiShin

スコア0

title CHANGED
File without changes
body CHANGED
@@ -18,6 +18,8 @@
18
18
   前進ボタンから手を離すと、障害物との距離が近い場合は停止する。(ボタンを押し続けている場合は、"障害物→停止"のコードに辿りつかない。
19
19
 
20
20
  ### 該当のソースコード
21
+ 一度pdfに出力したものからコピペしたので、一部文字化けしてしまっています。
22
+ 後ほど変更します。
21
23
 
22
24
  ```Python
23
25
  while(1):

1

前提・実現したいこと、ソースコード、試したことの追記です。

2020/06/21 05:11

投稿

TokiShin
TokiShin

スコア0

title CHANGED
File without changes
body CHANGED
@@ -8,14 +8,89 @@
8
8
   コントローラーでの操作をしつつ、ウルトラソニックセンサーが正面の障害物を検知した時は、一時停止する。
9
9
  (前進ボタンを押し続けている間に、障害物を検知した場合は停止するようなプログラム)
10
10
 
11
+ 質問:
12
+  ・ifやtry文で両方の処理を実現できるかどうか
13
+  ・gamepad.read_one()またはgamepad.read_loop()に代るコードで、実現できるものはないかどうか
14
+
11
15
  ### 発生している問題・エラーメッセージ
12
16
 
13
17
  問題:
14
18
   前進ボタンから手を離すと、障害物との距離が近い場合は停止する。(ボタンを押し続けている場合は、"障害物→停止"のコードに辿りつかない。
15
19
 
20
+ ### 該当のソースコード
21
+
22
+ ```Python
23
+ while(1):
24
+ event = gamepad.read_one()
25
+ if event != None :
26
+ #for event in gamepad.read_loop() :
27
+ f = open(’./data/cam.txt’, mode=’r’) s=f.read()
28
+ f.close()
29
+ s = float(s)
30
+ print("s␣=␣%3d" %(s)) if s != 0 :
31
+ stop(in1,in2,in3,in4) print("Obstacles!!") sys.exit(0)
32
+ if event.type == ecodes.EV_KEY: if event.value == 1:
33
+ if event.code == yBtn: print("Y-medium") p.ChangeDutyCycle(50) p2.ChangeDutyCycle(50)
34
+ elif event.code == bBtn: print("B-stop")
35
+ elif event.code == cBtn: print("C-very␣high") p.ChangeDutyCycle(100) p2.ChangeDutyCycle(100)
36
+ elif event.code == aBtn: print("A-QR␣mode␣press␣Ctrl+C␣to␣exit") capture_code()
37
+ root.mainloop()
38
+ elif event.code == xBtn: print("X-low") p.ChangeDutyCycle(25) p2.ChangeDutyCycle(25)
39
+ elif event.code == zBtn: print("Z-high") p.ChangeDutyCycle(75) p2.ChangeDutyCycle(75)
40
+ elif event.code == home:
41
+ print("home-line␣auto␣mode␣press␣Ctrl+C␣to␣exit") p.ChangeDutyCycle(20)
42
+ p2.ChangeDutyCycle(20)
43
+ forward(in1, in2,in3,in4)
44
+ try:
45
+ while (1) :
46
+ forward(in1, in2,in3,in4)
47
+ if ((not GPIO.input(left_sensor)) and (GPIO.input(right_sensor))):
48
+ print("move␣left") p.ChangeDutyCycle(0) p2.ChangeDutyCycle(70) sleep(0.5)
49
+ elif ((not GPIO.input(right_sensor)) and (GPIO.input(left_sensor))): print("move␣right")
50
+ p.ChangeDutyCycle(70)
51
+ p2.ChangeDutyCycle(0)
52
+ sleep(0.5)
53
+ elif ((not GPIO.input(right_sensor)) and (not GPIO.input(left_sensor))) :
54
+ i = random.randrange(100) print("Going␣back") p.ChangeDutyCycle(20) p2.ChangeDutyCycle(20) backward(in1,in2,in3,in4) sleep(0.5)
55
+ if (i%2 == 0 ): p.ChangeDutyCycle(0) p2.ChangeDutyCycle(70) forward(in1, in2,in3,in4) sleep(0.2)
56
+ else:
57
+ p.ChangeDutyCycle(70) p2.ChangeDutyCycle(0) forward(in1, in2,in3,in4) sleep(0.2)
58
+ else: print("Following␣the␣line!") p.ChangeDutyCycle(20) p2.ChangeDutyCycle(20)
59
+ except KeyboardInterrupt: print(’exiting...’) GPIO.cleanup() print("GPIO␣Clean␣up") sys.exit(0)
60
+ elif event.code == select: GPIO.cleanup() print("select-GPIO␣Clean␣up") break
61
+ elif event.code == lTrig: print("PUMP␣OFF") pumpstop()
62
+ elif event.code == rTrig:
63
+ for event in gamepad.read_loop():
64
+ if event.type == ecodes.EV_KEY: if event.value == 0:
65
+ if event.code == rTrig: break
66
+ elif event.type == 3 : if event.code == 0 :
67
+ if event.value == stick1: print("pump␣up")
68
+ pe = pe + 10
69
+ if (pe > 100) :
70
+ pe = 100 print("pe␣=␣%3d" %(pe))
71
+ elif event.value == stick2: print("pump␣down")
72
+ 2
73
+ pe = pe - 10 if (pe < 0) :
74
+ pe = 0 print("pe␣=␣%3d" %(pe))
75
+ print("PUMP␣ON␣with␣pe␣=␣%3d" %(pe)) pump(pe)
76
+ elif event.type == 3 : if event.code == 0 :
77
+ if event.value == stick1: print("turn␣right") turn_right(in1, in2,in3,in4) temp1=0
78
+ elif event.value == stick2: print("turn␣left") turn_left(in1, in2,in3,in4) temp1=0
79
+ elif event.value == stickN: print("stick␣Neutral") stop(in1,in2,in3,in4)
80
+ if event.code == 1 :
81
+ if event.value == stick1:
82
+ print("backward") backward(in1, in2,in3,in4) temp1=0
83
+ elif event.value == stick2: print("stick␣forward") forward(in1,in2,in3,in4) temp1=1
84
+ elif event.value == stickN: print("stick␣Neutral") stop(in1,in2,in3,in4)
85
+ ```
86
+
16
87
  ### 試したこと
17
88
 
18
- if文、try文、exceptやfinalなどの例外処理試してい
89
+ if文、try文、exceptやfinalなどの例外処理等を試しました
90
+ 前進のボタンを長押ししている間は、分岐がそれ以上進まず、前進の処理を続けています。
91
+ その途中で、障害物との距離が一定以下になっても止まらずに、ボタンから手を離して初めて停止します。
19
92
 
20
93
  ### 補足情報(FW/ツールのバージョンなど)
21
- **よろしくお願いします!**
94
+ **よろしくお願いします!**
95
+
96
+ teratailを使うのもプログラミングについて他者に相談するのも初めてなので質問の仕方が上手くなくて申し訳ないです。