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

回答編集履歴

4

difftimeの使い方が間違っていたので修正

2018/04/17 00:42

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -3,13 +3,13 @@
3
3
  結論としては、Cの標準関数版の`difftime`関数は使えないので、代替して何とかする必要があります。
4
4
  `time_t`型は本来、必ずしも秒単位ではないですが、Arduinoの[Timeライブラリ](https://github.com/PaulStoffregen/Time)だと、`time_t`型は秒単位です。なので、Arduinoのプロジェクトに限っては秒として扱って問題無いはずです。
5
5
 
6
- ```
6
+ ```C
7
- time_t start_time = RTC.get();
7
+ time_t start_time = RTC.get();
8
- ... // いろいろ処理
8
+ ... // いろいろ処理
9
9
 
10
- time_t end_time = RTC.get();
10
+ time_t end_time = RTC.get();
11
11
 
12
- time_t elapsed = end_time - start_time;
12
+ time_t elapsed = end_time - start_time;
13
13
  ```
14
14
  で `elapsed`変数に経過秒数が入ります。これで`difftime`関数の結果と同等と考えてよさそうです。これで充分(と言うかこれしか無い)ではないでしょうか。
15
15
 
@@ -48,7 +48,8 @@
48
48
  current_time = RTC.get();
49
49
  elapsed_time = current_time - start_time;
50
50
 
51
+ // start_time 〜 current_timeの経過秒数を取得
51
- elapsed_time = difftime(start_time, current_time);
52
+ elapsed_time = difftime(current_time, start_time);
52
53
  }
53
54
 
54
55
  ```

3

コード間違い修正

2018/04/17 00:42

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  time_t end_time = RTC.get();
11
11
 
12
- time_t elapsed = end_time - elapsed;
12
+ time_t elapsed = end_time - start_time;
13
13
  ```
14
14
  で `elapsed`変数に経過秒数が入ります。これで`difftime`関数の結果と同等と考えてよさそうです。これで充分(と言うかこれしか無い)ではないでしょうか。
15
15
 

2

一部修正

2018/04/16 13:34

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -62,4 +62,4 @@
62
62
 
63
63
  exit status 1
64
64
  ```
65
- 結論として、DS3231用ライブラリを使う限り、標準関数版の`difftime`、更には標準の`time.h`で宣言される各種time関連関数は、使用をあきらめなければならないようです。
65
+ DS3231用ライブラリを使う限り、標準関数版の`difftime`、更には標準の`time.h`で宣言される各種time関連関数は、使用をあきらめなければならないようです。

1

改行位置修正

2018/04/16 13:27

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -1,9 +1,7 @@
1
- 手持ちのArduinoUNOを引っ張り出して確認してみました。とは言えRTCのDS3231を実装して試したわけではないので、
1
+ 手持ちのArduinoUNOを引っ張り出して確認してみました。とは言えRTCのDS3231を実装して試したわけではないので、ビルドが通るまでしか確認できてませんが。
2
- ビルドが通るまでしか確認できてませんが。
3
2
 
4
3
  結論としては、Cの標準関数版の`difftime`関数は使えないので、代替して何とかする必要があります。
5
- `time_t`型は本来、必ずしも秒単位ではないですが、Arduinoの[Timeライブラリ](https://github.com/PaulStoffregen/Time)だと、`time_t`型は秒単位です。
4
+ `time_t`型は本来、必ずしも秒単位ではないですが、Arduinoの[Timeライブラリ](https://github.com/PaulStoffregen/Time)だと、`time_t`型は秒単位です。なので、Arduinoのプロジェクトに限っては秒として扱って問題無いはずです。
6
- なので、Arduinoのプロジェクトに限っては秒として扱って問題無いはずです。
7
5
 
8
6
  ```
9
7
  time_t start_time = RTC.get();
@@ -54,7 +52,7 @@
54
52
  }
55
53
 
56
54
  ```
57
-
55
+ ビルドの結果です。
58
56
  ```
59
57
  C:\Users\user01\AppData\Local\Temp\ccjcKCug.ltrans0.ltrans.o: In function `loop':
60
58
 
@@ -64,4 +62,4 @@
64
62
 
65
63
  exit status 1
66
64
  ```
67
- DS3231用ライブラリを使う限り、標準関数版の`difftime`、更には標準の`time.h`で宣言される各種time関連関数は、使用をあきらめなければならないようです。
65
+ 結論として、DS3231用ライブラリを使う限り、標準関数版の`difftime`、更には標準の`time.h`で宣言される各種time関連関数は、使用をあきらめなければならないようです。