.. note:: こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。 **参加する理由は?** - **エキスパートサポート**:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。 - **学び&共有**:ヒントやチュートリアルを交換してスキルを向上させましょう。 - **独占的なプレビュー**:新製品の発表や先行プレビューに早期アクセスしましょう。 - **特別割引**:最新製品の独占割引をお楽しみください。 - **祭りのプロモーションとギフト**:ギフトや祝日のプロモーションに参加しましょう。 👉 私たちと一緒に探索し、創造する準備はできていますか?[|link_sf_facebook|]をクリックして今すぐ参加しましょう! .. _1.1.2_c: 1.1.2 RGB LED ==================== はじめに -------------- このプロジェクトでは、RGB LEDを制御してさまざまな色を点滅させる方法を学びます。 必要な部品 ------------------------------ このプロジェクトで必要な部品は以下のとおりです。 .. image:: ../img/list_rgb_led.png :align: center 全体のキットを購入するのは非常に便利です、リンクはこちらです: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - 名前 - このキットのアイテム - リンク * - Raphael Kit - 337 - |link_Raphael_kit| 以下のリンクから個別に購入することもできます。 .. list-table:: :widths: 30 20 :header-rows: 1 * - コンポーネントの紹介 - 購入リンク * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_led` - |link_rgb_led_buy| 回路図 ----------------------- R, G, Bのピンを電流制限抵抗に接続した後、それらをそれぞれGPIO17, GPIO18, GPIO27に接続します。LEDの最も長いピン(GND)は、Raspberry PiのGNDに接続します。3つのピンに異なるPWM値が与えられると、RGB LEDは異なる色を表示します。 ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 ============ ======== ======== === .. image:: ../img/rgb_led_schematic.png 実験手順 ---------------------------- **ステップ1:** 回路を組み立てます。 .. image:: ../img/image61.png **ステップ2:** コードのフォルダに移動します。 .. raw:: html .. code-block:: cd ~/raphael-kit/c/1.1.2/ **ステップ3:** コードをコンパイルします。 .. raw:: html .. code-block:: gcc 1.1.2_rgbLed.c -lwiringPi .. note:: ``gcc`` 命令が実行されると、 ``-o`` が呼び出されない場合、実行可能ファイルの名前は ``a.out`` になります。 **ステップ4:** 前のステップで出力された実行可能ファイルを実行します。 .. raw:: html .. code-block:: sudo ./a.out コードが実行されると、RGBは赤、緑、青、黄、ピンク、シアンの順に表示されます。 .. note:: 実行後に動作しない、またはエラープロンプトが表示される場合:「wiringPi.h: No such file or directory」、 :ref:`install_wiringpi` を参照してください。 **コード** .. code-block:: c #include #include #include #define uchar unsigned char #define LedPinRed 0 #define LedPinGreen 1 #define LedPinBlue 2 void ledInit(void){ softPwmCreate(LedPinRed, 0, 100); softPwmCreate(LedPinGreen,0, 100); softPwmCreate(LedPinBlue, 0, 100); } void ledColorSet(uchar r_val, uchar g_val, uchar b_val){ softPwmWrite(LedPinRed, r_val); softPwmWrite(LedPinGreen, g_val); softPwmWrite(LedPinBlue, b_val); } int main(void){ if(wiringPiSetup() == -1){ //when initialize wiring failed, printf messageto screen printf("setup wiringPi failed !"); return 1; } ledInit(); while(1){ printf("Red\n"); ledColorSet(0xff,0x00,0x00); //red delay(500); printf("Green\n"); ledColorSet(0x00,0xff,0x00); //green delay(500); printf("Blue\n"); ledColorSet(0x00,0x00,0xff); //blue delay(500); printf("Yellow\n"); ledColorSet(0xff,0xff,0x00); //yellow delay(500); printf("Purple\n"); ledColorSet(0xff,0x00,0xff); //purple delay(500); printf("Cyan\n"); ledColorSet(0xc0,0xff,0x3e); //cyan delay(500); } return 0; } **コード説明** .. code-block:: c #include ソフトウェアのpwm機能を実現するためのライブラリ。 .. code-block:: c void ledInit(void){ softPwmCreate(LedPinRed, 0, 100); softPwmCreate(LedPinGreen,0, 100); softPwmCreate(LedPinBlue, 0, 100); } この関数は、ソフトウェアを使用してPWMピンを作成し、その周期を0x100us〜100x100usの間に設定するものです。 関数softPwmCreate(LedPinRed, 0, 100)のプロトタイプは以下の通りです。 .. code-block:: c int softPwmCreate(int pin,int initialValue,int pwmRange); * **パラメータpin:** Raspberry Piの任意のGPIOピンをPWMピンとして設定できます。 * **パラメータinitialValue:** 初期パルス幅は、initialValue倍の100usです。 * **パラメータpwmRange:** PWMの周期は、pwmRange倍の100usです。 .. code-block:: c void ledColorSet(uchar r_val, uchar g_val, uchar b_val){ softPwmWrite(LedPinRed, r_val); softPwmWrite(LedPinGreen, g_val); softPwmWrite(LedPinBlue, b_val); } この関数はLEDの色を設定するためのものです。RGBを使用して、フォーマルパラメータ **r_val** は赤の輝度を、 **g_val** は緑の輝度を、 **b_val** は青の輝度を表します。 関数softPwmWrite(LedPinBlue, b_val)のプロトタイプは以下の通りです。 .. code-block:: c void softPwmWrite (int pin, int value) ; * **パラメータpin:** Raspberry Piの任意のGPIOピンをPWMピンとして設定できます。 * **パラメータValue:** PWMのパルス幅は、value倍の100usです。valueは以前に定義されたpwmRangeよりも小さくなければならないことに注意してください。もしpwmRangeよりも大きい場合、valueは固定値、pwmRangeとして与えられます。 .. code-block:: c ledColorSet(0xff,0x00,0x00); 以前に定義された関数を呼び出します。0xffをLedPinRedに、0x00をLedPinGreenとLedPinBlueに書き込みます。このコードを実行すると、赤のLEDだけが点灯します。他の色のLEDを点灯させたい場合は、パラメータを修正するだけです。 現象の画像 ------------------------ .. image:: ../img/image62.jpeg