質問編集履歴

1

プログラムコードを追加

2017/06/30 08:41

投稿

yu_polo
yu_polo

スコア13

test CHANGED
File without changes
test CHANGED
@@ -29,3 +29,245 @@
29
29
  うまく動作しません。
30
30
 
31
31
  この画像で教えてください
32
+
33
+ 温度センサー、湿度センサーを
34
+
35
+ arduinoにanalogに接続
36
+
37
+
38
+
39
+
40
+
41
+ #include <avr/sleep.h>
42
+
43
+ int _cnt = 0;
44
+
45
+ float _number = 0;
46
+
47
+ int _viewFlg = 0; // 桁を切り替える為のフラグ
48
+
49
+ boolean _switchFlg = false; //温度・湿度を切り替えるフラグ
50
+
51
+ int temperaturePin = A0; // select the input pin for the potentiometer
52
+
53
+ int humidityPin = A1; // select the input pin for the potentiometer
54
+
55
+ float temperatureValue = 0; // variable to store the value coming from the sensor
56
+
57
+ float humidityValue = 1; // variable to store the value coming from the sensor
58
+
59
+ void setup(){
60
+
61
+ Serial.begin(9600);
62
+
63
+ //2~8番ピン デジタル出力へセット
64
+
65
+ for (int i=2; i<=8; i++){
66
+
67
+ pinMode(i,OUTPUT);
68
+
69
+ }
70
+
71
+ pinMode(9,OUTPUT); //ドット
72
+
73
+ pinMode(11,OUTPUT); //1桁目
74
+
75
+ pinMode(12,OUTPUT); //2桁目
76
+
77
+ pinMode(13,OUTPUT); //3桁目
78
+
79
+ }
80
+
81
+ //LEDレイアウトを定義
82
+
83
+ boolean Num_Array[10][7]={
84
+
85
+ {1,1,1,1,1,1,0}, //0
86
+
87
+ {0,1,1,0,0,0,0}, //1
88
+
89
+ {1,1,0,1,1,0,1}, //2
90
+
91
+ {1,1,1,1,0,0,1}, //3
92
+
93
+ {0,1,1,0,0,1,1}, //4
94
+
95
+ {1,0,1,1,0,1,1}, //5
96
+
97
+ {1,0,1,1,1,1,1}, //6
98
+
99
+ {1,1,1,0,0,1,0}, //7
100
+
101
+ {1,1,1,1,1,1,1}, //8
102
+
103
+ {1,1,1,1,0,1,1} //9
104
+
105
+ };
106
+
107
+ //LED表示関数を定義
108
+
109
+ void NumPrint(int Number){
110
+
111
+ for (int w=0; w<=7; w++){
112
+
113
+ digitalWrite(w+2,-Num_Array[Number][w]);
114
+
115
+ }
116
+
117
+ }
118
+
119
+ //桁をそれぞれの桁で分解
120
+
121
+ int NumParse(float Number,int s){
122
+
123
+ Serial.print("number:");
124
+
125
+ Serial.println(Number);
126
+
127
+ if(s == 1){
128
+
129
+ return int(Number) % 10;
130
+
131
+ }
132
+
133
+ else if(s == 2){
134
+
135
+ return int(Number / 10);
136
+
137
+ }
138
+
139
+ //マイナスは小数点以下として判別させる
140
+
141
+ else if(s == -1){
142
+
143
+ return int((Number -int(Number))*10);
144
+
145
+ }
146
+
147
+ return 0;
148
+
149
+ }
150
+
151
+ void loop(){
152
+
153
+ if(_viewFlg == 0){
154
+
155
+ digitalWrite(11,HIGH);
156
+
157
+ digitalWrite(12,HIGH);
158
+
159
+ digitalWrite(13,LOW);
160
+
161
+ NumPrint(NumParse(_number,2));
162
+
163
+ //ドットを消す
164
+
165
+ digitalWrite(9,LOW);
166
+
167
+ }
168
+
169
+ else if(_viewFlg == 1){
170
+
171
+ digitalWrite(11,LOW);
172
+
173
+ digitalWrite(12,HIGH);
174
+
175
+ digitalWrite(13,HIGH);
176
+
177
+ NumPrint(NumParse(_number,1));
178
+
179
+ //ドットを表示
180
+
181
+ digitalWrite(9,HIGH);
182
+
183
+ } else if(_viewFlg == 2){
184
+
185
+ digitalWrite(11,HIGH);
186
+
187
+ digitalWrite(12,LOW);
188
+
189
+ digitalWrite(13,HIGH);
190
+
191
+ NumPrint(NumParse(_number,-1));
192
+
193
+ //ドットを消す
194
+
195
+ digitalWrite(9,LOW);
196
+
197
+ }
198
+
199
+ _viewFlg++;
200
+
201
+ if(_viewFlg == 3){
202
+
203
+ _viewFlg = 0;
204
+
205
+ }
206
+
207
+ if(_cnt &>= 300){
208
+
209
+ _cnt = 0;
210
+
211
+ Serial.print("NUMBER:");
212
+
213
+ Serial.println(_number);
214
+
215
+ if(_switchFlg == true){
216
+
217
+ temperatureValue = analogRead(temperaturePin);
218
+
219
+ _number = toTemperature(temperatureValue);
220
+
221
+ Serial.print("temperature:");
222
+
223
+ Serial.println(_number);
224
+
225
+ _switchFlg = false;
226
+
227
+ }
228
+
229
+ else{
230
+
231
+ humidityValue = analogRead(humidityPin);
232
+
233
+ _number = toHumidity(humidityValue);
234
+
235
+ Serial.print("humidity:");
236
+
237
+ Serial.println(_number);
238
+
239
+ _switchFlg = true;
240
+
241
+ }
242
+
243
+ }
244
+
245
+ _cnt++;
246
+
247
+ delay(20);
248
+
249
+ }
250
+
251
+ //アナログ入力値を摂氏度℃に変換
252
+
253
+ float toTemperature(int analog_val){
254
+
255
+ float v = 5; // 基準電圧値( V )
256
+
257
+ float tempC = ((v * analog_val) / 1024) * 100;
258
+
259
+ return tempC;
260
+
261
+ }
262
+
263
+ //アナログ入力値を湿度に変換
264
+
265
+ float toHumidity(int analog_val){
266
+
267
+ float v = 5; // 基準電圧値( V )
268
+
269
+ float tempC = (analog_val / (1024/v)) * 100;
270
+
271
+ return tempC;
272
+
273
+ }