質問編集履歴
2
ソースコードについて
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
前提・実現したいこと、ソースコード、試したことの追記です。
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を使うのもプログラミングについて他者に相談するのも初めてなので質問の仕方が上手くなくて申し訳ないです。
|