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

回答編集履歴

1

追記

2021/09/26 11:58

投稿

thkana
thkana

スコア7735

answer CHANGED
@@ -74,4 +74,50 @@
74
74
  ```
75
75
  みたいな形にしたほうが安全かも知れません。あるいは...いや、改善案はキリがないので止めましょう。まずはちゃんと動かせてから。
76
76
 
77
- あとは自力でできるかしら。
77
+ あとは自力でできるかしら。
78
+
79
+ ---
80
+ > 改良点などあればお願い致します。
81
+
82
+ 私はPythonは決して得意ではないのであまりどうこうは言えませんが、特に問題はないんじゃないでしょうか。
83
+ 多少手を入れるとしたらこんなところでしょうか。
84
+ ```
85
+ import utime
86
+ import random
87
+
88
+ led1 = machine.Pin(0,machine.Pin.OUT)
89
+ led2 = machine.Pin(1,machine.Pin.OUT)
90
+ led3 = machine.Pin(2,machine.Pin.OUT)
91
+
92
+ switch1 = machine.Pin(3,machine.Pin.IN,machine.Pin.PULL_UP)
93
+ switch2 = machine.Pin(4,machine.Pin.IN,machine.Pin.PULL_UP)
94
+ switch3 = machine.Pin(5,machine.Pin.IN,machine.Pin.PULL_UP)
95
+
96
+ pairList = [(led1,switch1),(led2,switch2),(led3,switch3)] #タプルでペアにする
97
+
98
+ score = 0
99
+
100
+ while True:
101
+ i = random.randint(0,2)
102
+ x = pairList[i]
103
+
104
+ x[0].value(1) #x[0]はledn
105
+ flag = False
106
+ for n in range(100):
107
+ utime.sleep(0.01)
108
+
109
+ if (x[1].value() == 0 ): #x[1]はswitchn。選択されているスイッチだけ監視する
110
+ flag = True
111
+
112
+ x[0].value(0)
113
+ utime.sleep(1)
114
+ if ( flag ): # flagが論理型の値なので==Trueはあっても害は無いが意味もない
115
+ score += 1
116
+ print(score)
117
+
118
+ if (score > 2): #==3でもいいけれど、扱いを間違えて値が大きくなっても終われるように
119
+ break
120
+
121
+ while True: #明示的にプログラム内に留める
122
+ pass
123
+ ```