質問編集履歴
2
プログラムを一部更新しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -68,22 +68,6 @@
|
|
68
68
|
|
69
69
|
```python
|
70
70
|
|
71
|
-
def setup_led():
|
72
|
-
|
73
|
-
#GPIO.BOARD: 物理ピン番号(左上からの連番)
|
74
|
-
|
75
|
-
#GPIO.BCM: 役割ピン番号(broadcomが命名しているもの)
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
GPIO.setmode(GPIO.BCM)
|
80
|
-
|
81
|
-
GPIO.setup(6, GPIO.OUT)
|
82
|
-
|
83
|
-
GPIO.output(6, GPIO.LOW)
|
84
|
-
|
85
|
-
|
86
|
-
|
87
71
|
def read_temp():
|
88
72
|
|
89
73
|
df = pd.read_csv('temp.csv', names=['year', 'month', 'day', 'hour', 'minute', 'temperature'])
|
@@ -104,22 +88,6 @@
|
|
104
88
|
|
105
89
|
print (tmax)
|
106
90
|
|
107
|
-
|
108
|
-
|
109
|
-
if __name__ == '__main__':
|
110
|
-
|
111
|
-
try:
|
112
|
-
|
113
|
-
setup_led()
|
114
|
-
|
115
|
-
read_temp()
|
116
|
-
|
117
|
-
except KeyboardInterrupt:
|
118
|
-
|
119
|
-
pass
|
120
|
-
|
121
|
-
GPIO.cleanup()
|
122
|
-
|
123
91
|
```
|
124
92
|
|
125
93
|
|
@@ -128,36 +96,26 @@
|
|
128
96
|
|
129
97
|
##CSVデータ
|
130
98
|
|
131
|
-
**データ形式: '年', '月', '日', '時', '分', '温度'**
|
132
|
-
|
133
|
-
**データは100行保存**
|
134
|
-
|
135
|
-
**新しいデータが最下行に追加されていく**
|
136
|
-
|
137
|
-
|
138
|
-
|
139
99
|
```csv
|
140
100
|
|
141
|
-
|
101
|
+
2019,11,1,14,57,17
|
142
102
|
|
143
|
-
|
103
|
+
2019,11,1,14,59,21
|
144
104
|
|
145
|
-
|
105
|
+
2019,11,1,15,1,22
|
146
106
|
|
147
|
-
|
107
|
+
2019,11,1,15,3,18
|
148
108
|
|
149
|
-
|
109
|
+
2019,11,1,15,4,19
|
150
110
|
|
151
|
-
|
111
|
+
2019,11,1,15,6,21
|
152
112
|
|
153
|
-
|
113
|
+
2019,11,1,15,8,17
|
154
114
|
|
155
|
-
|
115
|
+
2019,11,1,15,10,22
|
156
116
|
|
157
|
-
|
117
|
+
2019,11,1,15,12,19
|
158
118
|
|
159
|
-
②2019,11,1,15,12,19 #tmax=22 LED点灯せず
|
160
|
-
|
161
|
-
|
119
|
+
2019,11,1,15,14,18
|
162
120
|
|
163
121
|
```
|
1
質問内容を変更しました。具体的に分からない箇所を記載しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
csvファイルに応じた処理
|
test
CHANGED
@@ -2,19 +2,19 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
|
5
|
+
CSVファイルのデータに応じた処理を行いたいと考えています。
|
6
6
|
|
7
|
-
|
7
|
+
CSVファイルのデータは、データが毎分更新されてきます。
|
8
|
+
|
9
|
+
**※csvファイルのデータ数は100個で、1分毎に末尾にデータを追加。1番上のデータは削除されていきます。**
|
8
10
|
|
9
11
|
|
10
12
|
|
11
|
-
|
13
|
+
**行いたい処理**
|
12
14
|
|
13
|
-
|
15
|
+
csvデータ6列目の温度データが、25℃を超えたらLEDを0.5秒点灯する。
|
14
16
|
|
15
|
-
毎分更新されるデータを確認し、データが条件を満たした場合に、**1度だけ**LEDを点灯させたいです。
|
16
|
-
|
17
|
-
**
|
17
|
+
**↓のCSVデータにLEDを点灯させたいときのデータを記載しました**
|
18
18
|
|
19
19
|
|
20
20
|
|
@@ -22,27 +22,59 @@
|
|
22
22
|
|
23
23
|
##困っていること
|
24
24
|
|
25
|
-
|
25
|
+
25℃を超えた温度データは、CSVファイルにずっと(100個データ保存しているので、100分間)残ります。
|
26
26
|
|
27
|
-
**
|
27
|
+
**プログラム①**を実行すると、csvファイルを読み取るたびに、LEDが点灯してしまいます。
|
28
|
-
|
29
|
-
**条件を満たした場合に1度だけ**処理を実行するためには、pythonプログラムで実現できるのでしょうか、それとも、シェルスクリプトで実現できるのでしょうか。
|
30
28
|
|
31
29
|
|
32
30
|
|
33
|
-
|
31
|
+
これを改善するために、次の考えでプログラム②を考えています。
|
34
32
|
|
35
|
-
|
33
|
+
1つ前の温度データを保持して、今の値と比較することで、LEDを点灯させるようにしたいと考えています。
|
36
34
|
|
37
|
-
**
|
35
|
+
**プログラム②**を実行すると、
|
38
36
|
|
37
|
+
1つ前の温度データprev_tmaxと
|
38
|
+
|
39
|
+
今の温度データtmaxの値が同じになってしまいます。
|
40
|
+
|
39
|
-
|
41
|
+
コードに不備があると思い、見直していたのですが、原因が分からず困っています。
|
40
42
|
|
41
43
|
|
44
|
+
|
45
|
+
##プログラム①
|
46
|
+
|
47
|
+
```python
|
48
|
+
|
49
|
+
def read_temp():
|
50
|
+
|
51
|
+
df = pd.read_csv('temp.csv', names=['year', 'month', 'day', 'hour', 'minute', 'temperature'])
|
52
|
+
|
53
|
+
tmax=df['temperature'].max()
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
if(tmax >= 25.0):
|
58
|
+
|
59
|
+
GPIO.output(6, GPIO.HIGH)
|
60
|
+
|
61
|
+
sleep(0.5)
|
62
|
+
|
63
|
+
```
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
##プログラム②
|
42
68
|
|
43
69
|
```python
|
44
70
|
|
45
71
|
def setup_led():
|
72
|
+
|
73
|
+
#GPIO.BOARD: 物理ピン番号(左上からの連番)
|
74
|
+
|
75
|
+
#GPIO.BCM: 役割ピン番号(broadcomが命名しているもの)
|
76
|
+
|
77
|
+
|
46
78
|
|
47
79
|
GPIO.setmode(GPIO.BCM)
|
48
80
|
|
@@ -54,25 +86,23 @@
|
|
54
86
|
|
55
87
|
def read_temp():
|
56
88
|
|
57
|
-
df = pd.read_csv('
|
89
|
+
df = pd.read_csv('temp.csv', names=['year', 'month', 'day', 'hour', 'minute', 'temperature'])
|
58
90
|
|
59
91
|
tmax=df['temperature'].max()
|
60
92
|
|
93
|
+
if(tmax >= 25.0):
|
61
94
|
|
62
|
-
|
63
|
-
|
95
|
+
prev_tmax = df['temperature'].max()
|
64
96
|
|
65
97
|
GPIO.output(6, GPIO.HIGH)
|
66
98
|
|
67
99
|
sleep(0.5)
|
68
100
|
|
101
|
+
|
69
102
|
|
103
|
+
print (prev_tmax)
|
70
104
|
|
71
|
-
|
105
|
+
print (tmax)
|
72
|
-
|
73
|
-
ttime="%02d"%int(tdata.iloc[0][1])+"/"+"%02d"%int(tdata.iloc[0][2])+"_"+"%02d"%int(tdata.iloc[0][3])+":"+"%02d"%int(tdata.iloc[0][4])
|
74
|
-
|
75
|
-
print ('最高温度:' + '{:.3f}'.format(tmax) + ' :' + ttime + 'に記録')
|
76
106
|
|
77
107
|
|
78
108
|
|
@@ -94,30 +124,40 @@
|
|
94
124
|
|
95
125
|
|
96
126
|
|
127
|
+
|
128
|
+
|
97
129
|
##CSVデータ
|
98
130
|
|
99
131
|
**データ形式: '年', '月', '日', '時', '分', '温度'**
|
100
132
|
|
133
|
+
**データは100行保存**
|
134
|
+
|
135
|
+
**新しいデータが最下行に追加されていく**
|
136
|
+
|
137
|
+
|
138
|
+
|
101
139
|
```csv
|
102
140
|
|
103
|
-
|
141
|
+
...**古いデータは最上行**
|
104
142
|
|
105
|
-
2019,11,1,14,5
|
143
|
+
⑩2019,11,1,14,57,17 #tmax=17 LED点灯せず
|
106
144
|
|
107
|
-
2019,11,1,15,1
|
145
|
+
⑨2019,11,1,14,59,21 #tmax=21 LED点灯
|
108
146
|
|
109
|
-
2019,11,1,15,
|
147
|
+
⑧2019,11,1,15,1,22 #tmax=22 LED点灯
|
110
148
|
|
111
|
-
2019,11,1,15,
|
149
|
+
⑦2019,11,1,15,3,18 #tmax=22 LED点灯せず
|
112
150
|
|
113
|
-
2019,11,1,15,
|
151
|
+
⑥2019,11,1,15,4,19 #tmax=22 LED点灯せず
|
114
152
|
|
115
|
-
2019,11,1,15,
|
153
|
+
⑤2019,11,1,15,6,21 #tmax=22 LED点灯
|
116
154
|
|
117
|
-
2019,11,1,15,
|
155
|
+
④2019,11,1,15,8,17 #tmax=22 LED点灯せず
|
118
156
|
|
119
|
-
2019,11,1,15,1
|
157
|
+
③2019,11,1,15,10,22 #tmax=22 LED点灯
|
120
158
|
|
159
|
+
②2019,11,1,15,12,19 #tmax=22 LED点灯せず
|
160
|
+
|
121
|
-
2019,11,1,15,14,2
|
161
|
+
①2019,11,1,15,14,18 #tmax=22 LED点灯せず
|
122
162
|
|
123
163
|
```
|