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

質問編集履歴

2

やってみましたが、コードの貼り付け方うまくいったでしょうか?

2021/04/12 05:02

投稿

RainbowGoblins
RainbowGoblins

スコア1

title CHANGED
File without changes
body CHANGED
@@ -33,6 +33,7 @@
33
33
 
34
34
  ### 該当のソースコード
35
35
 
36
+ ```arduino
36
37
  #include <SPI.h>
37
38
  #include <Wire.h>
38
39
  #include <Adafruit_MLX90614.h>
@@ -224,4 +225,5 @@
224
225
  Serial.println(temp_new); //シリアルモニタに測定した体温を表示
225
226
 
226
227
  return temp_new;
227
- }
228
+ }
229
+ ```

1

コードを貼り付けました。不必要なテンプレート消しました。

2021/04/12 05:02

投稿

RainbowGoblins
RainbowGoblins

スコア1

title CHANGED
File without changes
body CHANGED
@@ -16,6 +16,16 @@
16
16
  ネット記事の見様見真似で始めたArduinoですので、小生は基礎がありません。
17
17
  わかっている方にお教えいただきたいと思い質問をしています。
18
18
 
19
+ 【追記】】
20
+ コードを貼り付けました。
21
+ 2つのディスプレイそれぞれに、ライブラリ違いのdisplayを書いています。
22
+
23
+ コンパイルは、
24
+ Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
25
+ の行で止まります。
26
+
27
+ よろしくお願いいたします。
28
+
19
29
  ### 発生している問題・エラーメッセージ
20
30
 
21
31
  conflicting declaration 'Adafruit_SSD1306 display'
@@ -23,39 +33,195 @@
23
33
 
24
34
  ### 該当のソースコード
25
35
 
26
- ```ここに言語名を入力
36
+ #include <SPI.h>
27
- ソースコード
37
+ #include <Wire.h>
38
+ #include <Adafruit_MLX90614.h>
28
- ```
39
+ #include <Adafruit_GFX.h>
40
+ #include <Adafruit_SSD1306.h>
41
+ #include "Adafruit_VL53L0X.h"
42
+ #include <TM1637Display.h>// Include the library:
29
43
 
44
+ // TM1637 7セグLED初期設定
45
+ // Define the connections pins:
46
+ #define CLK 15//22
30
- ### 試したこと
47
+ #define DIO 1//21
31
48
 
49
+ // Create display object of type TM1637Display:
32
- ここに問題に対して試したこと記載てください。
50
+ //タイプTM1637Displayの表示オブジェクト作成ます:
51
+ TM1637Display display = TM1637Display(CLK, DIO);
33
52
 
53
+ // Create array that turns all segments on:
34
- ### 補足情報(FW/ツールバージョなど)
54
+ //すべてセグメトをオンにする配列を作成します。
55
+ const uint8_t data[] = {0xff, 0xff, 0xff, 0xff};
35
56
 
57
+ // Create array that turns all segments off:
36
- ここより詳細な情報記載てください
58
+ //すべてのセグメントをオフする配列作成ます
37
- ### 前提・実現したいこと
59
+ const uint8_t blank[] = {0x00, 0x00, 0x00, 0x00};
38
60
 
39
- ここに質問の内容を詳しく書いてください。
61
+ // LCD初期設定
40
- (例)PHP(CakePHP)で●●なシステムを作っています。
62
+ #define SCREEN_WIDTH 128 // OLED display width, in pixels
41
- ■■な機能を実装中に以下のエラーメッセージが発生しました。
63
+ #define SCREEN_HEIGHT 64 // OLED display height, in pixels
42
64
 
65
+ // Declaration for SSD1306 display connected using software SPI (default case):
43
- ### 発生している問題・エラーメッセージ
66
+ #define OLED_MOSI 23
67
+ #define OLED_CLK 18
68
+ #define OLED_DC 4
69
+ #define OLED_CS 5
70
+ #define OLED_RESET 2
71
+ Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
72
+ OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
44
73
 
45
- ```
46
- エラーメッージ
74
+ //超音波距離ンサ定数設定
75
+ #define OK_DISTANCE 40 // 測定は40mm以内
47
- ```
76
+ Adafruit_VL53L0X lox = Adafruit_VL53L0X();
48
77
 
49
- ### 該当のソー
78
+ //カー定数設定
79
+ #define BEATTIME 500 //音を出している時間(msec)
80
+ #define SPEAKER 25 //スピーカーの出力ピン番号]
81
+ #define OK_SOUND 1046.502
82
+ #define NG_SOUND 500.0
50
83
 
51
- ```ここに言語名を入力
84
+ // 温度センサー初期設定
85
+ #define TEMP_THRESHOLD 37.5 //平熱/発熱の判定を行う閾値
86
+ #define ADJUST_TEMP 0 //体温補正:表面温度+3.7℃=体温
52
- ソースコード
87
+ Adafruit_MLX90614 mlx = Adafruit_MLX90614();
53
- ```
54
88
 
89
+ // デバッグ用
55
- ### 試したこと
90
+ #define DEBUG 0
56
91
 
92
+ //初期設定
93
+ void setup() {
57
- ここに問題に対して試したことを記載してください。
94
+ Serial.begin(9600);
95
+ Serial.println("Adafruit MLX90614 test");
58
96
 
59
- ### 補足情報(FW/ツールのバージョンなど)
97
+ mlx.begin();
60
98
 
99
+ Wire.begin();
100
+
101
+ if (!lox.begin()) {
102
+ Serial.println(F("Failed to boot VL53L0X"));
103
+ while(1);
104
+ }
105
+
106
+ // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
107
+ if(!display.begin(SSD1306_SWITCHCAPVCC)) {
108
+ Serial.println(F("SSD1306 allocation failed"));
109
+ for(;;); // Don't proceed, loop forever
110
+ }
111
+
112
+ //ESP32で音を鳴らすための設定
113
+ ledcSetup(1, 12000, 8); //(チャネル0~15, PWMの周波数, デューティ比を表すビット数)
114
+ ledcAttachPin(SPEAKER, 1); //(ピン番号, チャネル)
115
+
116
+
117
+ display.setTextColor(SSD1306_WHITE); // Draw white text
118
+ display.setCursor(0, 16); // Start at top-left corner
119
+ display_text("Temp?");
120
+
121
+ }
122
+ //ループ関数
123
+ void loop() {
124
+
125
+ float temp;
126
+
127
+ temp = mlx.readObjectTempC();
128
+ Serial.print("object Temp, ");
129
+ Serial.print(temp); //シリアルモニタに計算したobject温度を表示
130
+ Serial.print("\tambient Temp, ");
131
+ Serial.print(mlx.readAmbientTempC()); //シリアルモニタに計算したambient温度を表示
132
+
133
+ if(is_distance_ok()){
134
+ temp = read_temp_sensor() + ADJUST_TEMP;
135
+ display_temp(temp);
136
+ 7segs_temp(temp);
137
+ if(temp < TEMP_THRESHOLD){
138
+ play_sound(OK_SOUND, 100, 2);
139
+ delay(3000);
140
+ display_text("Temp?");
141
+ }else{
142
+ play_sound(NG_SOUND, 500, 2);
143
+ delay(3000);
144
+ display_text("Temp?");
145
+ }
146
+ }else if(temp > 28.0){
147
+ play_sound(NG_SOUND, 100, 5);
148
+ display_text("Too far!");
149
+ delay(500);
150
+ }
151
+ delay(500);
152
+ }
153
+
154
+ void play_sound(float freq, int beattime, int number){
155
+ for(int i=0; i<number; i++){
156
+ ledcWriteTone(1,freq) ; // ド
157
+ delay(beattime);
158
+ ledcWrite(1,0);
159
+ }
160
+ }
161
+
162
+ void display_text(char* text){
163
+ display.clearDisplay();
164
+ display.setTextSize(2); // Normal 2x2 pixel scale
165
+ display.setCursor(0, 16); // Start at top-left corner
166
+ display.cp437(true); // Use full 256 char 'Code Page 437' font
61
- ここにより詳細な情報を記載してください。
167
+ display.print(text);
168
+ display.display();
169
+ }
170
+
171
+ void display_temp(float number){
172
+ display.clearDisplay();
173
+ display.setTextSize(4); // Normal 4x4 pixel scale
174
+ display.setCursor(0, 16); // Start at top-left corner
175
+ display.cp437(true); // Use full 256 char 'Code Page 437' font
176
+ display.print(number);
177
+ display.display();
178
+ }
179
+
180
+ void 7segs_temp(float number){
181
+ display.clear();
182
+ display.showNumberDec(number,false, 2, 0); // distance to front obstacle
183
+ //display.setSegments(Letter_deg,1,2);
184
+ //display.setSegments(Letter_C,1,3);
185
+ delay(1100);
186
+ }
187
+
188
+ int is_distance_ok(){
189
+ VL53L0X_RangingMeasurementData_t measure;
190
+ lox.rangingTest(&measure, false); // pass in 'true' to get debug data printout!
191
+
192
+ float Distance = 0; //計算した距離を格納する変数
193
+
194
+ if (measure.RangeStatus != 4) { // phase failures have incorrect data 4回測定できない
195
+ Distance = measure.RangeMilliMeter; //cmへの換算
196
+ Serial.print("\tDistance, "); //わかりやすくするため、シリアルモニタにDistance:を表示
197
+ Serial.println(Distance); //シリアルモニタに計算した距離を表示
198
+ } else {
199
+ //display.setTextSize(1); // Draw 1X-scale text
200
+ //display.setCursor(0, 48);
201
+ //display.println("out of range ...");
202
+ Serial.println("\tout of range ...");
203
+ }
204
+ if(Distance > 0 && Distance < OK_DISTANCE){
205
+ return 1;
206
+ }else{
207
+ return 0;
208
+ }
209
+ }
210
+
211
+ float read_temp_sensor(){
212
+ float temp_old;
213
+ float temp_new;
214
+
215
+ temp_old = mlx.readObjectTempC();
216
+ for(int i=0; i<8; i++){
217
+ temp_new = mlx.readObjectTempC();
218
+ if(temp_new > temp_old){
219
+ temp_new = temp_old;
220
+ }
221
+ delay(50);
222
+ }
223
+ Serial.print("Temp_fixed, ");
224
+ Serial.println(temp_new); //シリアルモニタに測定した体温を表示
225
+
226
+ return temp_new;
227
+ }