Arduinoを使ってプログラムを作成するのですが入れ替わる部分が分からないので教えて欲しいです。 問題

補足

プログラムはA→B→A→B→A…と繰り返してほしいです どこをどう直すのかソースコード全体を書いてくれると助かります

C言語関連131閲覧

ベストアンサー

0

回答ありがとうございます 新たに補足を書いたのでよろしくお願いします 授業でデジタル出力を習いこのようなプログラムだったのでこう書きました

その他の回答(2件)

0

考え方とコーディングの両方の意味で、これがダメです。 if (5 <= count < 10) { fade関数は、フェードイン・フェードアウトの一瞬一瞬のプログラムですよね? それなのに、fadeを呼ぶたびに count++; したら、フェード動作に入った途端、すごい速さでカウントが進んでしまいます。 countがとんでもない値になるのを修正したとしても、 if (5 <= count < 10) { これでは、あなたが望んでいるであろう判断にはなりません。 これは、まず 5 <= count という条件判断をして、次に、その判断結果(0か1)が < 10 であるか否かを判断するので、必ず成立してしまいます。 つまり、フェード動作に入る前(正しく言うと、あなたがフェード動作に入ってほしいと思うより前)にも、目に見えない程度、一瞬フェード動作をして、countも進めています。

回答ありがとうございます 新たに補足書いておいたのでよろしくお願いします countを置いている場所が間違っているということですね どこに置いたらいいのでしょうか?

0

2つの事を5回繰り返すのだから、周期的には10回です。 if(++count==10)count=0; 或いは count=(count+1)%10; のようにして、まずは0~9を繰り返すようにするのが良いです。 ついでに言えば、fadeはアナログ出力(PWM)ピンを使うと楽です。 analgWriteを使うなら、下のような感じ byte led=9;//pwm pin byte count; void setup(){} void loop() { if(count<5) { analogWrite(led,255); delay(1000); analogWrite(led,0); delay(1000); } else fade(); count=(count+1)%10; } void fade(){ for(int i=0;i<256;i++){ analogWrite(led,i); delay(4); } for(int i=255;i>=0;i--){ analogWrite(led,i); delay(4); } }

fade関数はあまり見ていなかったけど、普通に書けば↓のような感じです。 まぁ、自分で書いて、想定通り動けばどんなのでも良いと思うけど。 void fade(){ for(int i=0;i<10;i++){//段々明るく 100ms*10 digitalWrite(LED_BUILTIN,HIGH); delay(10*i); digitalWrite(LED_BUILTIN,LOW); delay(100-10*i); } for(int i=10;i>=0;i--){//段々暗く digitalWrite(LED_BUILTIN,HIGH); delay(10*i); digitalWrite(LED_BUILTIN,LOW); delay(100-10*i); } }