質問編集履歴

2

プログラムを一部更新しました。

2019/11/05 03:52

投稿

raspypy
raspypy

スコア247

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
- 2019,11,1,14,57,17 #tmax=17 LED点灯せず
103
+ 2019,11,1,14,59,21
144
104
 
145
- 2019,11,1,14,59,21 #tmax=21 LED点灯
105
+ 2019,11,1,15,1,22
146
106
 
147
- 2019,11,1,15,1,22 #tmax=22 LED点灯
107
+ 2019,11,1,15,3,18
148
108
 
149
- 2019,11,1,15,3,18 #tmax=22 LED点灯せず
109
+ 2019,11,1,15,4,19
150
110
 
151
- 2019,11,1,15,4,19 #tmax=22 LED点灯せず
111
+ 2019,11,1,15,6,21
152
112
 
153
- 2019,11,1,15,6,21 #tmax=22 LED点灯
113
+ 2019,11,1,15,8,17
154
114
 
155
- 2019,11,1,15,8,17 #tmax=22 LED点灯せず
115
+ 2019,11,1,15,10,22
156
116
 
157
- 2019,11,1,15,10,22 #tmax=22 LED点灯
117
+ 2019,11,1,15,12,19
158
118
 
159
- ②2019,11,1,15,12,19 #tmax=22 LED点灯せず
160
-
161
- 2019,11,1,15,14,18 #tmax=22 LED点灯せず
119
+ 2019,11,1,15,14,18
162
120
 
163
121
  ```

1

質問内容を変更しました。具体的に分からない箇所を記載しました。

2019/11/05 03:52

投稿

raspypy
raspypy

スコア247

test CHANGED
@@ -1 +1 @@
1
- 条件を満した場合に1度だけ処理を実行
1
+ csvファイルに応じた処理
test CHANGED
@@ -2,19 +2,19 @@
2
2
 
3
3
 
4
4
 
5
- pythonプログラム1分おきに実ます。
5
+ CSVファイルデータに応じた処理を行いたいと考えています。
6
6
 
7
- (1分おきの実行は、ユニットファイルを作成して実現します。)
7
+ CSVファイルのデータはデータが毎分更新されます。
8
+
9
+ **※csvファイルのデータ数は100個で、1分毎に末尾にデータを追加。1番上のデータは削除されていきます。**
8
10
 
9
11
 
10
12
 
11
- ↓のプログラムは、CSVファイルに記録されるデータが条件を満した場合、LEDを0.5秒点灯させるプログラムです。
13
+ **行いい処理**
12
14
 
13
- CSVファイルには、データが毎分更新されてきます。
15
+ csvデータ6列目の温度データ、25℃を超えたらLEDを0.5秒点灯
14
16
 
15
- 毎分更新されるデータを確認し、データが条件を満たした場合に、**1度だけ**LEDを点灯させたいです。
16
-
17
- **※csvファイルのデータ数は100個で、1分毎末尾にデータ追加。1番上のデータは削除されていきす。**
17
+ **CSVデータにLED点灯させたいときのデータを記載しした**
18
18
 
19
19
 
20
20
 
@@ -22,27 +22,59 @@
22
22
 
23
23
  ##困っていること
24
24
 
25
- 今のプログラムを1分おきに実行ると、
25
+ 25℃超えた温度データは、CSVファイルにずっと(100個データ保存しているので、100間)残りま
26
26
 
27
- **条件を満たしたデータ**がCSVファイルに残っている限り毎分LEDが点灯してしまいます。
27
+ **プログラム①**を実行すると、csvファイルを読み取るたびに、LEDが点灯してしまいます。
28
-
29
- **条件を満たした場合に1度だけ**処理を実行するためには、pythonプログラムで実現できるのでしょうか、それとも、シェルスクリプトで実現できるのでしょうか。
30
28
 
31
29
 
32
30
 
33
- ##プログラムファイル
31
+ これを改善するために、次の考えでプログラム②を考えています。
34
32
 
35
- **①CSVファイルを読み出す (csvファイルは、別プログラムで1分毎にデータが更新ます。)**
33
+ 1つ前の温度データを保持して、今の値と比較することで、LEDを点灯せるようにしたいと考えています。
36
34
 
37
- **※csvファイルのデータ数は100個で、1分毎に末尾にデータ追加。1番上のデータは削除されていきま。**
35
+ **プログラム②**実行ると、
38
36
 
37
+ 1つ前の温度データprev_tmaxと
38
+
39
+ 今の温度データtmaxの値が同じになってしまいます。
40
+
39
- **②csvファイルのデタ(温度データ)25以上になったら、LEDを0.5秒点灯させます
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('./temp.csv', names=['year', 'month', 'day', 'hour', 'minute', 'temperature'])
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
- if(tmax >= 25.0):
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
- tdata=df[df['temperature'] == tmax]
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
- 2019,11,1,14,57,22.9232619761
141
+ ...**古いデータは最上行**
104
142
 
105
- 2019,11,1,14,59,22.9533095721
143
+ 2019,11,1,14,57,17 #tmax=17 LED点灯せず
106
144
 
107
- 2019,11,1,15,1,22.9983809858
145
+ 2019,11,1,14,59,21 #tmax=21 LED点灯
108
146
 
109
- 2019,11,1,15,3,23.0584762408
147
+ 2019,11,1,15,1,22 #tmax=22 LED点灯
110
148
 
111
- 2019,11,1,15,4,27.2402073145
149
+ 2019,11,1,15,3,18 #tmax=22 LED点灯せず
112
150
 
113
- 2019,11,1,15,6,24.0951259852
151
+ 2019,11,1,15,4,19 #tmax=22 LED点灯せず
114
152
 
115
- 2019,11,1,15,8,23.5742955693
153
+ 2019,11,1,15,6,21 #tmax=22 LED点灯
116
154
 
117
- 2019,11,1,15,10,23.4691282712
155
+ 2019,11,1,15,8,17 #tmax=22 LED点灯せず
118
156
 
119
- 2019,11,1,15,12,23.4340725336
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,23.4240566112
161
+ 2019,11,1,15,14,18 #tmax=22 LED点灯せず
122
162
 
123
163
  ```