.. note:: こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。 **参加する理由は?** - **エキスパートサポート**:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。 - **学び&共有**:ヒントやチュートリアルを交換してスキルを向上させましょう。 - **独占的なプレビュー**:新製品の発表や先行プレビューに早期アクセスしましょう。 - **特別割引**:最新製品の独占割引をお楽しみください。 - **祭りのプロモーションとギフト**:ギフトや祝日のプロモーションに参加しましょう。 👉 私たちと一緒に探索し、創造する準備はできていますか?[|link_sf_facebook|]をクリックして今すぐ参加しましょう! .. _3.1.9_c_pi5: 3.1.9 アラームベル ======================= はじめに ------------- このプロジェクトでは、手動アラーム装置を作成します。トグルスイッチをサーミスタまたは光センサーに置き換えて、温度アラームまたは光アラームを作成できます。 必要な部品 ------------------------------ このプロジェクトには、以下の部品が必要です。 .. image:: ../img/list_Alarm_Bell.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_led_buy| * - :ref:`cpn_buzzer` - |link_passive_buzzer_buy| * - :ref:`cpn_slide_switch` - |link_slide_switch_buy| * - :ref:`cpn_transistor` - |link_transistor_buy| * - :ref:`cpn_capacitor` - |link_capacitor_buy| 配線図 ------------------- ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 GPIO22 Pin 15 3 22 ============ ======== ======== === .. image:: ../img/Schematic_three_one10.png :align: center 実験手順 ----------------------------- **ステップ1**: 回路を組み立てます。 .. image:: ../img/image266.png **ステップ2**: ディレクトリを変更します。 .. raw:: html .. code-block:: cd ~/raphael-kit/c/3.1.9/ **ステップ3**: コンパイルします。 .. raw:: html .. code-block:: gcc 3.1.9_AlarmBell.c -lwiringPi -lpthread **ステップ4**: 実行します。 .. raw:: html .. code-block:: sudo ./a.out プログラムを起動したら、スライドスイッチを右に移動し、ブザーからアラーム音が鳴ります。同時に、赤と緑のLEDが一定の頻度で点滅します。 .. note:: 実行後に動作しない場合、またはエラーメッセージ「wiringPi.h: No such file or directory」が表示される場合は、 :ref:`install_wiringpi_pi5` を参照してください。 **コード説明** .. code-block:: c #include  このコードでは、新しいライブラリである ``pthread.h`` を使用します。これは一般的なスレッドライブラリのセットで、マルチスレッディングを実現できます。LEDとブザーの独立した動作を実現するために、コンパイル時に ``-lpthread`` パラメータを追加します。 .. code-block:: c void *ledWork(void *arg){            while(1)         {            if(flag==0){             pthread_exit(NULL);         }         digitalWrite(ALedPin,HIGH);         delay(500);         digitalWrite(ALedPin,LOW);         digitalWrite(BLedPin,HIGH);         delay(500);         digitalWrite(BLedPin,LOW);     } } 関数 ``ledWork()`` は、これら 2 つの LED の動作状態を設定するのに役立ちます。 緑色の LED が 0.5 秒間点灯した後、消灯します。 同様に、赤色 LED が 0.5 秒間点灯し続けた後、消灯します。 .. code-block:: c void *buzzWork(void *arg){     while(1)     {         if(flag==0){             pthread_exit(NULL);         }         if((note>=800)||(note<=130)){             pitch = -pitch;         }         note=note+pitch;         softToneWrite(BeepPin,note);         delay(10);     } } 関数 ``buzzWork()`` は、ブザーの動作状態を設定するために使用されます。 ここでは、累積または減衰する周波数を 130 ~ 800 に設定します。 20間隔で。 .. code-block:: c void on(){     flag = 1;     if(softToneCreate(BeepPin) == -1){         printf("setup softTone failed !");         return;      }         pthread_t tLed;          pthread_create(&tLed,NULL,ledWork,NULL);         pthread_t tBuzz;       pthread_create(&tBuzz,NULL,buzzWork,NULL);       } 「on()」関数では以下のことを実行します: 1) マーク ``flag=1`` を定義し、制御スレッドの終了を示します。 2) ソフトウェア制御されたトーンピン ``BeepPin`` を作成します。 3) LEDとブザーが同時に動作できるように、2つの異なるスレッドを作成します。 * ``pthread_t tLed``:スレッド ``tLed`` を宣言します。 * ``pthread_create(&tLed,NULL,ledWork,NULL)``:スレッドを作成し、そのプロトタイプは次のようになります: .. code-block:: int pthread_create(pthread_t *restrict tidp,const pthread_attr_t*restrict_attr,void*(*start_rtn)(void*),void *restrict arg); 成功した場合、0を返し、それ以外の場合はエラー番号-1を返します。 * 最初のパラメータはスレッド識別子へのポインタです。 * 2番目のパラメータはスレッド属性を設定するために使用されます。 * 3番目のパラメータはスレッド実行関数の開始アドレスです。 * 最後のパラメータはその関数を実行するものです。 .. code-block:: c void off(){     flag = 0;     softToneStop(BeepPin);     digitalWrite(ALedPin,LOW);     digitalWrite(BLedPin,LOW); } ``Off()`` 関数では、「flag=0」と定義してスレッド **ledWork** と **BuzzWork** を終了し、その後ブザーとLEDを消灯させます。 .. code-block:: c int main(){            setup();      int lastState = 0;     while(1){         int currentState = digitalRead(switchPin);         if ((currentState == 1)&&(lastState==0)){             on();         }         else if((currentState == 0)&&(lastState==1)){             off();         }         lastState=currentState;     }     return 0; } main()にはプログラムの全体プロセスが含まれており、まずスライドスイッチの値を読み取ります。トグルスイッチが右に切り替えられた場合(読み取りが1)、関数 ``on()`` が呼び出され、ブザーは音を出し、赤いLEDと緑のLEDが点滅します。それ以外の場合、ブザーとLEDは動作しません。 現象の画像 ------------------------ .. image:: ../img/image267.jpeg :align: center