緑の中に

緑の中に
国立天文台

9/25/2023

関数定義とその使用法 について(C言語)

 関数定義とその使用法 について(C言語)

===============================================

関数定義について プロトタイプ宣言とは。関数を定義し、その関数を使用する前に その型(プロトタイプ)を

コンパイラーに通知・教えます。その必要があります。

関数名 flash_1() について解説します。setup{ }内は1回だけの実行です。

以下の様に、3か所の位置での記述が必要になります。

1つ目が setup内、2つ目はloop内、3つ目は それ以外で定義内容を書くことになります。

================================================

setup{

  flash_1();//プロトタイプ宣言 関数定義の前に ひな型をコンパイラーに通知します

}//setup


void loop() {//loop

flash_1();//定義関数の実行 


}//loop

int  flash_1()//以下定義した関数の内容です xx:x0 xx:x2 xx:x4 xx:x6 xx:x8  

{  

digitalWrite(ledPin8, HIGH);  // LED赤1を点灯させる 確認Action

delay(1000);

digitalWrite(ledPin8, LOW);//LED赤1を

}

==============================================

 *何回も使用するルーチンは、関数として扱うと楽になる。
変更が発生した場合、関数内を修正するだけで済む。


9/23/2023

温度データーロガー 順調です

 

秋分の日です 20度以下になりました。


2023-09-23 02:38:00     19.2   mode 19.2

2023-09-23 02:48:04     19.2   mode 19.2

2023-09-23 02:58:08     19.2   mode 19.2

2023-09-23 03:08:12     19.2   mode 19.2

2023-09-23 03:18:16     19.2   mode 19.2

2023-09-23 03:28:20     19.2   mode 18.2

2023-09-23 03:38:23     19.2   mode 19.2

2023-09-23 03:48:27     19.2   mode 19.2

2023-09-23 03:58:31     18.2   mode 18.2

2023-09-23 04:08:35     18.2   mode 18.2

2023-09-23 04:18:39     19.2   mode 19.2

2023-09-23 04:28:43     18.2   mode 19.2

2023-09-23 04:38:47     18.2   mode 18.2

2023-09-23 04:48:50     18.2   mode 18.2

2023-09-23 04:58:54     18.2   mode 18.2

2023-09-23 05:08:59     18.2   mode 18.2

2023-09-23 05:19:03     18.2   mode 18.2

2023-09-23 05:29:07     18.2   mode 18.2

2023-09-23 05:39:11     18.2   mode 18.2

2023-09-23 05:49:15     18.2   mode 18.2

2023-09-23 05:59:19     18.2   mode 18.2

2023-09-23 06:09:22     18.2   mode 18.2

2023-09-23 06:19:27     18.2   mode 18.2

2023-09-23 06:29:31     18.2   mode 18.2

2023-09-23 06:39:35     18.2   mode 18.2

2023-09-23 06:49:36     error

2023-09-23 06:59:40     19.2   mode 18.2

2023-09-23 07:09:45     19.2   mode 19.2

2023-09-23 07:19:48     19.2   mode 19.2

9/21/2023

「夜明け」「朝」「昼」「夕方」「夜」「夜中」 この時刻帯は

 「夜明け」「朝」「昼」「夕方」「夜」「夜中」 この時刻帯は

夜明け dawn     4:00~6:00

       morning     6:00~9:00    

       day     9:00~17:00 

夕方       evening 17:00~19:00

     night 19:00~24:00

真夜中  midnight 24:00~4:00


季節によって感じが変化するかもしれません。


これをプログラムで使う予定で調べました。この時間帯でアラームのモードを変更するためです。プログラムに入れ込みました。下記がその時刻においての応答です。

「夜明け」から「朝」の時刻帯への境界の状況をCopyしました。

プログラムで例えば mornig_flag=1 などとフラグを立てその時刻帯である事を通知します。これによりプログラムが考え易くなります。 


現在時刻 05:00

■--------------------↓

05:00

p_alarm

xx:x405:00

p_alarm

xx:x6_was not detected△

05:00

p_alarm

xx:x8_was not detected△

05:00

p_alarm

xx:x0_Detected time●◎xx:x0●

05:00

p_alarm

xx:30_was not detected△

05:00

p_alarm

xx:x2_was not detected△

05

00

△B―実験1 [偽 false] else動作です.

◎A-dawn_夜明け [真 true] 動作です

△B―Not morning  [偽 false] else動作です.

△B―Not day  [偽 false] else動作です.

△B―Not evning [偽 false] else動作です.

△B―Not night  [偽 false] else動作です.

△B―Not midnight  [偽 false] else動作です.

■■-------------------------↑


■■-------------------------↑

現在時刻 06:19

■--------------------↓

06:19

p_alarm

xx:x406:19

p_alarm

xx:x6_was not detected△

06:19

p_alarm

xx:x8_was not detected△

06:19

p_alarm

xx:x0_was not detected△

06:19

p_alarm

xx:30_was not detected△

06:19

p_alarm

xx:x2_was not detected△

06

19

△B―実験1 [偽 false] else動作です.

△B―Not dawn  [偽 false] else動作です.

◎A-mornig_朝 [真 true] 動作です

△B―Not day  [偽 false] else動作です.

△B―Not evning [偽 false] else動作です.

△B―Not night  [偽 false] else動作です.

△B―Not midnight  [偽 false] else動作です.

■■-------------------------↑


現在時刻 08:40

■--------------------↓

08:40

p_alarm

xx:x408:40

p_alarm

xx:x6_was not detected△

08:40

p_alarm

xx:x8_was not detected△

08:40

p_alarm

xx:x0_Detected time●◎xx:x0●

08:40

p_alarm

xx:30_was not detected△

08:40

p_alarm

xx:x2_was not detected△

08

40

△B―実験1 [偽 false] else動作です.

△B―Not dawn  [偽 false] else動作です.

◎A-mornig_朝 [真 true] 動作です

△B―Not day  [偽 false] else動作です.

△B―Not evning [偽 false] else動作です.

△B―Not night  [偽 false] else動作です.

△B―Not midnight  [偽 false] else動作です.

■■-------------------------↑


現在時刻 09:00
■--------------------↓
09:00
p_alarm
xx:x409:00
p_alarm
xx:x6_was not detected△
09:00
p_alarm
xx:x8_was not detected△
09:00
p_alarm
xx:x0_Detected time●◎xx:x0●
09:00
p_alarm
xx:30_was not detected△
09:00
p_alarm
xx:x2_was not detected△
09
00
△B―実験1 [偽 false] else動作です.
△B―Not dawn  [偽 false] else動作です.
△B―Not morning  [偽 false] else動作です.
◎A-day_昼 [真 true] 動作です
△B―Not evning [偽 false] else動作です.
△B―Not night  [偽 false] else動作です.
△B―Not midnight  [偽 false] else動作です.
■■-------------------------↑

現在時刻 17:00
■--------------------↓
17:00
p_alarm
xx:x417:00
p_alarm
xx:x6_was not detected△
17:00
p_alarm
xx:x8_was not detected△
17:00
p_alarm
xx:x0_Detected time●◎xx:x0●
17:00
p_alarm
xx:30_was not detected△
17:00
p_alarm
xx:x2_was not detected△
17
00
△B―実験1 [偽 false] else動作です.
△B―Not dawn  [偽 false] else動作です.
△B―Not morning  [偽 false] else動作です.
△B―Not day  [偽 false] else動作です.
◎A-evning_夕方 [真 true] 動作です
△B―Not night  [偽 false] else動作です.
△B―Not midnight  [偽 false] else動作です.
■■-------------------------↑



現在時刻 19:07
■--------------------↓
19:07
p_alarm
xx:x4_was not detected△
19:07
p_alarm
xx:x6_was not detected△
19:07
p_alarm
xx:x8_was not detected△
19:07
p_alarm
xx:x0_was not detected△
19:07
p_alarm
xx:3019:07
p_alarm
xx:x2_was not detected△
19
07
△B―実験1 [偽 false] else動作です.
△B―実験2 [偽 false] else動作です.
△B―Not dawn  [偽 false] else動作です.
△B―Not morning  [偽 false] else動作です.
△B―Not day  [偽 false] else動作です.
△B―Not evning [偽 false] else動作です.
◎A-night_夜 [真 true] 動作です
△B―Not midnight  [偽 false] else動作です.
■■-------------------------↑
global_dawn_flag
0
global_morning_flag
0
global_day_flag
0
local_evening_flag
0
global_night_flag
1
global_midnight_flag
0
global_dawn_flag
0
global_morning_flag
0
global_day_flag
0
local_evening_flag
0
global_night_flag
1
global_midnight_flag
0




現在時刻 02:47

■--------------------↓

02:47

p_alarm

xx:x402:47

p_alarm

xx:x6_was not detected△

02:47

p_alarm

xx:x8_was not detected△

02:47

p_alarm

xx:x0_was not detected△

02:47

p_alarm

xx:30_was not detected△

02:47

p_alarm

xx:x2_was not detected△

02

47

△B―実験1 [偽 false] else動作です.

△B―Not dawn  [偽 false] else動作です.

△B―Not morning  [偽 false] else動作です.

△B―Not day  [偽 false] else動作です.

△B―Not evning [偽 false] else動作です.

△B―Not night  [偽 false] else動作です.

◎A-midnight_真夜中 [真 true] 動作です

■■-------------------------↑


* 各時刻帯域にflagを導入します。 C言語の広域(global)変数と局所(local)変数の扱いができる必要があります。

グローバル変数として扱うには、関数の外で定義します。

int global_midnight_flag = 0; //このように関数外で再宣言します ->グローバル変数。ここはglobal変数の位置です。

void loop() {//loop

      int local_midnight_flag = 1; //

      global_midnight_flag=local_midnight_flag;

 このようにローカル変数の値をグローバル変数へ渡して、どこからでも参照できるようにします。


loopの先頭でLED緑、loopの最後でLED青を1回点滅動作をさせます。これにより、プログラム実行の様子が推測できます(ここでは見れません)。 このように時刻帯を識別させます。

◎A-evning    △B―Not night   などの A、Bの意味について

A  if の真の動作を意識するために付けました。

B は if の偽の動作を意識するために付けました。