「教えて!ピックアップ」リリース!

C言語
① 5秒間 1秒間隔で点滅を繰り返す
② 3秒間 0.5秒間隔で点滅を繰り返す
①→②→①→②・・・これを繰り返す
上記のようなものを作成したいです。
以下のようにdigitaとdelayを複数並べていけば作成できますが,式が長くなってしまいます。よろしくお願いします

void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}

A 回答 (5件)

>すみません。

上記を参考に1時間ほど頑張りましたが,上手く行きませんでした…

void A(void){
は、No.4で回答した通り

void A1(void){
 digitalWrite(LED_BUILTIN, HIGH); delay(1000);
 digitalWrite(LED_BUILTIN, LOW); delay(1000);
 digitalWrite(LED_BUILTIN, HIGH); delay(1000);
 digitalWrite(LED_BUILTIN, LOW); delay(1000);
 digitalWrite(LED_BUILTIN, HIGH); delay(1000);
}

void A2(void){
 digitalWrite(LED_BUILTIN, LOW); delay(1000);
 digitalWrite(LED_BUILTIN, HIGH); delay(1000);
 digitalWrite(LED_BUILTIN, LOW); delay(1000);
 digitalWrite(LED_BUILTIN, HIGH); delay(1000);
 digitalWrite(LED_BUILTIN, LOW); delay(1000);
}
ですよ

「①→②→①’→②’→①→②→①’→②’・・・これを繰り返す」
部分は、例えば
void loop(void) {
 for (i=0;i<6;i++){
  A1();B1();A2();B2();
 }
}
な感じですかね
    • good
    • 0
この回答へのお礼

助かりました

なるほど。理解できました。長時間お付き合い頂きありがとうございます。

お礼日時:2022/05/04 12:41

<おまけ>


① 5秒間 1秒間隔で点滅を繰り返す
これは曲者ですよ。

5秒間ということは、点滅点滅点 滅点滅点滅 の2種類あり、関数はA1、A2を用意する必要があるということ。
その直後の3秒間も、点滅点滅点滅 滅点滅点滅点 の2種類があり、関数はB1、B2を用意する必要があるということですよ

ということは、
「①→②→①→②・・・これを繰り返す」
も正確には、
「①→②→①’→②’→①→②→①’→②’・・・これを繰り返す」
ですよ
    • good
    • 1
この回答へのお礼

がんばります

すみません。上記を参考に1時間ほど頑張りましたが,上手く行きませんでした…
本当に申し訳ないのですが,コード全文を教えて頂けないでしょうか?

※下のコードではAを実行したあとBに移行したのですが,そのままBを繰り返してしまいました。

void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
int i;
int k;
void A(void){
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
void B(void){
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
void loop() {
for (i=0;i<6;i++){
A();
}
for(k=6;k<9;i++){
B();
}
}

お礼日時:2022/05/04 11:28

>それが分からないので質問させて頂きました。


「それ」ってどこのことですか?

「関数」なら
void A(void){
① 5秒間 1秒間隔で点滅を繰り返す
}

「①→②→①→②・・・これを繰り返す」なら
for(i=0; i<N; i++) {
 A();
 B();
}
    • good
    • 1

>式が長くなってしまいます。

よろしくお願いします
式が長くなってわかりにくいなら、
① 5秒間 1秒間隔で点滅を繰り返す
② 3秒間 0.5秒間隔で点滅を繰り返す
をそれぞれ関数A,Bとして、
①→②→①→②・・・これを繰り返す
は関数A,Bを交互に呼び出せばよいだけなのでは?
    • good
    • 0
この回答へのお礼

すみません。それが分からないので質問させて頂きました。おそらくforかwhichを使えばいいと思うのですが,上手くいかなくて…
宜しければ教えて頂けないでしょうか?

お礼日時:2022/05/04 09:38

どれだけ長くなっても、「作ろうと思ったもの」がその通りに動作すれば、それは「正しいプログラム」です。


> 以下のようにdigitaとdelayを複数並べていけば作成できます
ならそれでも別に悪いわけではない。
/* メモリが小さいから行数を減らしたいとかでなければ */



たとえば、そのプログラムの
void loop()

void loop(int t)
等と引数でdelayに指定する値を受けとれるようにして
delay(1000); を delay(t); と、受け取った引数を使うようにすれば
点→1秒→滅→1秒

点→0.5秒→滅→0.5秒
は loop(1000) とloop(500) と引数を変えるだけでよくなる。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング