回答編集履歴

5

追加

2024/04/18 17:09

投稿

jimbe
jimbe

スコア12737

test CHANGED
@@ -22,3 +22,23 @@
22
22
  では、 if が成立したときは while が成立しませんので、 while 内の処理は行われません。
23
23
 
24
24
  先ずはパソコンようのプログラムを作ることで c の基本的な勉強をされては如何でしょうか。
25
+
26
+ ----
27
+ 該当のソースコード のほうのコードで動作しているのでしたら、 ontime を増やしている "50" というのを変数にして限界値になったら符号を反転させることで、大して変更せずに済むと思います。
28
+
29
+ (loop部分のみ)
30
+ ```c
31
+ #define PERIOD 10000 // PWMの周期10000μs
32
+ int ontime = 0; // LEDがONの時間 グローバル変数
33
+ int delta = 50; // ontime の増減量
34
+
35
+ void loop() {
36
+ ontime += delta; // 毎回ontimeを増やす/減らす
37
+ if (ontime >= PERIOD || ontime <= 0) { delta *= -1; } // 限界値になったら増減を反転する
38
+
39
+ M5.Axp.SetLed(true); // LED ON
40
+ delayMicroseconds(ontime); //待機 マイクロ秒単位
41
+ M5.Axp.SetLed(false); // LED OFF
42
+ delayMicroseconds(PERIOD - ontime); //待機 マイクロ秒単位
43
+ }
44
+ ```

4

修正

2024/04/18 16:55

投稿

jimbe
jimbe

スコア12737

test CHANGED
@@ -19,6 +19,6 @@
19
19
  while (ontime == PERIOD)
20
20
  {
21
21
  ```
22
- では、 if が成立したときは while が成立しませんので、処理は行われません。
22
+ では、 if が成立したときは while が成立しませんので、 while 内の処理は行われません。
23
23
 
24
24
  先ずはパソコンようのプログラムを作ることで c の基本的な勉強をされては如何でしょうか。

3

修正

2024/04/18 16:53

投稿

jimbe
jimbe

スコア12737

test CHANGED
@@ -1,5 +1,6 @@
1
1
  デバイスを持っていないので LED の操作は分かりませんが、 c のプログラムとしての while が変なのは分かります。
2
2
 
3
+ while の条件は、"成立したら終わり"ではなく"成立しなかったら終わり"です。
3
4
  `while( 条件 ) { 処理 }` と書いたとき、実行される順は
4
5
  ① 条件が成立しなかったら終わる
5
6
  ② 処理

2

追記

2024/04/18 16:43

投稿

jimbe
jimbe

スコア12737

test CHANGED
@@ -8,6 +8,9 @@
8
8
  (以下略)
9
9
 
10
10
  です。
11
+
12
+ [while文を使った繰り返し処理](https://www.javadrive.jp/cstart/for/index3.html#google_vignette)
13
+
11
14
  従って
12
15
  ```
13
16
  if (ontime == 0)

1

追記

2024/04/18 16:40

投稿

jimbe
jimbe

スコア12737

test CHANGED
@@ -16,3 +16,5 @@
16
16
  {
17
17
  ```
18
18
  では、 if が成立したときは while が成立しませんので、処理は行われません。
19
+
20
+ 先ずはパソコンようのプログラムを作ることで c の基本的な勉強をされては如何でしょうか。