電子書籍の厳選無料作品が豊富!

マイコン(PIC)を使って可変抵抗器でフルカラーLED(RGB)の色を自由に選べるように、もしくはスイッチ(モーメンタリ)を押すたびに色が赤→橙→黄のように変わっていくようにしたいのですがプログラムをどうすればいいかわかりません。
どうすればいいのでしょうか?

また、今までずっとアナログ回路をやっており初めてマイコンに手を出したばっかりなので色々とわからないことだらけです。

ライターはマイクロチップ社のPICkit3を使っていますがPICは何を使えばいいのでしょうか?(LEDの点灯程度の用途)

ちなみに今まではアナログ的にRGBそれぞれに可変抵抗器で明るさを調整できるようにし、3つの可変抵抗器で色を作っていました。一つの可変抵抗器で自由に色を作れたらと思い質問させていただきました。

よろしくお願いします。

質問者からの補足コメント

  • みなさん本当に回答ありがとうございます。m(_ _)m
    いろいろ教えてもらった結果やはり、スイッチで操作しようということになりまして、スイッチを押すたびにもともとプログラムでプリセットしておいた(固定)色に変わっていくもの(押すたびに赤→橙→黄色→黄緑→緑→水色→青→紫→ピンク→白のように)にしたいと思いました。

    これは可能でしょうか?

      補足日時:2017/09/02 17:56

A 回答 (4件)

まず、同じ内容を複数投稿しないでください(規約違反です)。

回答が分散して回答者が二度手間になります。
https://oshiete.goo.ne.jp/qa/9912860.html

LEDの明るさを調整する方法は、流す電流を変える方法とPWMを使う方法がありますが、電流を変えるのは困難ですので普通はPWMを使います。
PWMは専用のモジュールを積んだPICもありますが、3つのPWMを出力できるものは少ないので、自力でプログラムした方がいいでしょう。
LED調光程度であればPWM周波数1kHzもあれば人間の目に点滅が見えないくらいのものができます。まあ最初は分からないと思いますので適当に作って点滅が見えるようなら階調を減らして周波数を上げるのがよいでしょう。
簡単なPWMの作り方は、まず全部点灯し、時間待ちループを回すかタイマーを見て、適切な時間経ったところで目的のLEDを消すという流れになります。
なおLEDを発光させる時間と人間の目に映る明るさは比例しませんので、目的の色を出すのはわりと大変です。試行錯誤してください。
    • good
    • 0

3色LED単体で行うには抵抗値を変化させての色変化で無くPWMなどの点滅(残像)でやったほうが分かりやすい。

抵抗値は3色のLED出力が最大になるような抵抗値にしておく。
PWMは2個ぐらいしか実装されていないから足りない出力は擬似的にPWMを作り出すか通信使って2個で連動させるか。

ピン数にこだわりが無いならPIC16F1827など18ピン以上を勧める。どうしても8ピンなら12F1822か683。12F675でも出来無くないがPWMや通信機能が無いからそれを自力でプログラミングするのは大変。

それ以外ではコレ
http://akizukidenshi.com/catalog/g/gM-08414/
このタイミング見れば分かるけどRGB8ビットで転送すればその色になる仕掛け。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。m(_ _)m

そのLED連結してはAruduinoで制御したことでしたらあります!

また、みなさんにいろいろ教えていただいた結果補足のようにスイッチで色を変える形にしようと思ったのですが可能でしょうか?

お礼日時:2017/09/02 22:00

>可変抵抗器を0から最大(0〜5Vで合ってますか?)まで動かす間に赤〜橙〜黄〜黄緑〜緑〜水色〜青〜紫〜ピンク〜白みたいな感じで自由に色を作れたらと思います。



可変抵抗器は連続量を入力する装置ではなく、
 0-255の値を入力する入力装置 
と理解することです。

>一つの可変抵抗器で自由に色を作れたらと思い質問させていただきました。
デジタルの値とその時の色の関係の表の作り方次第で、使いやすいかどうかが決まりますので、自分の気に入った色が出せる関係を見出してください。

PICのプログラムとしては、

可変抵抗器の状態(電圧値?)をAD変換でデジタル化してPICに取り込み、
デジタルの値とその時の色の関係の表を作っておいて、
その表に従ってフルカラーLED(RGB)への制御信号をPICから出す
時間待ちして初めに戻る

ではいかがですか?

main()
{
 int i;
 while(1) {
  i = getADdata(portI);

  r=tableR(i);
  g=tableG(i);
  b=tableB(i);

  putDAdata(portR,r);
  putDAdata(portG,g);
  putDAdata(portB,b);

  wait();
 }
}
といった感じでしょうか。
    • good
    • 0
この回答へのお礼

プログラムまでありがとうございます。m(_ _)m
参考にさせていただきます。

みなさんにいろいろ教えてもらい考えた結果やはりスイッチで色を変えるようにしたいのですがこれは可能でしょうか?

お礼日時:2017/09/02 21:57

(´・ω・`)・・・


赤、緑、青、どのパラメータを変えるのかをマイコン側で指定して可変抵抗器の値を読み取るような使い方にするのでしょうか。
それとも全部を一度に変えたいという事でしょうか。

この手の物の正解は一つではありませんので、自身が行いたいことをどのようにして実現するかをまずは考えてみましょう。
その手段によって選択するパーツを選定するのです。
    • good
    • 0
この回答へのお礼

初めて使うのでわからないのですが返信はこのお礼というやつでいいのでしょうか?
________________________________

回答ありがとうございます。
やりたいこととしましては、可変抵抗器を0から最大(0〜5Vで合ってますか?)まで動かす間に赤〜橙〜黄〜黄緑〜緑〜水色〜青〜紫〜ピンク〜白みたいな感じで自由に色を作れたらと思います。とにかくこう行かなくても自由にいろいろな色を作れるようにしたいです。

もしくはボタンの場合ですが、押すたびにさっきのようにあらかじめプリセットした色を切り替えたいです。

12F675というPICを買ってきたのですがこれでできるのでしょうか?

よろしくお願いします。m(_ _)m

お礼日時:2017/09/02 00:06

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

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


おすすめ情報