arduinoのサンプルプログラムのfor文が理解できないのですが、どなたか教えていただけないでしょうか?

C言語関連 | 工学29閲覧xmlns="http://www.w3.org/2000/svg">100

ベストアンサー

0

> その範囲(0~255)になり代入される 一応説明しておきます。例えば第2引数が-2の時、 0b1111111111111110 これが-2です。(第二引数の)計算自体は16bitでされます。 そして、引数は8ビットですから、代入される際に「下位8bitのみ」有効になります。 (代入するための場所は8ビットしか用意されていませんから) つまり、 0b11111110 が代入されます。そして、その数値は符号なしですから これが254として読みだされます。 ちょっと面倒ですけど、単なる足し算引き算でも、C言語ではこういった事を考慮しながらコードを書きます。

その他の回答(3件)

0

>何故255や128という数字が出てるのか 最早答えは出てますがこのようなページを眺めて色とは何かを見て見るのが良いです RGBとHSV・HSBの相互変換ツールと変換計算式 - PEKO STEP https://www.peko-step.com/tool/hsvrgb.html

0

analogwrite(pin, value)の、valueの値の範囲が0~255なのでこうなってます。 Arduino日本語リファレンス「analogwrite」 http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=2153 渡せる最大値が255なので、 「255-val」とかにしています。「128-val」とは、128が255のほぼ半分なので使っていると思われます。 おそらく、赤、青、緑の3色のLEDの色が徐々に変わっていく、という感じの動作だと思います。 質問とは関係ないですが、個人的にはせっかくredpinとかを定義したのだから、loop()内でも analogwrite(9, val) とかせずに analogwrite(redpin, val) とかすればいいのに、とは思います。

ご回答ありがとうございます。 つまり最初のfor文ではvalが255の状態から始めてvalが0より大きい時まで、赤青緑のそれぞれの光の明るさを調整し、次のfor文ではvalを0の状態から始めてvalが255未満になるまで光の明るさを調整し続けるという事でしょうか? では、何故二つのfor文が必要となるのでしょうか? そこが理解できないのですが、推測でも良いので教えて頂ければ幸いです。

0

for文には初期値、終了値、変化分が与えられます。 それらによって~から~まで~置きに繰り返すということが表現できるのです。 最初のforではvalが255から正の間、一回行うごとに1引いて繰り返す。という意味になります。つまり255回繰り返すことになります。