注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!

3.1.9 アラームベル

はじめに

このプロジェクトでは、手動アラーム装置を作成します。トグルスイッチをサーミスタまたは光センサーに置き換えて、温度アラームまたは光アラームを作成できます。

必要な部品

このプロジェクトには、以下の部品が必要です。

../_images/list_Alarm_Bell.png

まとめて購入するのは便利です。リンクはこちらです:

名前

このキットのアイテム

リンク

Raphael Kit

337

Raphael Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

GPIO拡張ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

ブザー

BUY

スライドスイッチ

BUY

トランジスタ

BUY

コンデンサ

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

../_images/Schematic_three_one10.png

実験手順

ステップ1: 回路を組み立てます。

../_images/image266.png

ステップ2: ディレクトリを変更します。

cd ~/raphael-kit/c/3.1.9/

ステップ3: コンパイルします。

gcc 3.1.9_AlarmBell.c -lwiringPi -lpthread

ステップ4: 実行します。

sudo ./a.out

プログラムを起動したら、スライドスイッチを右に移動し、ブザーからアラーム音が鳴ります。同時に、赤と緑のLEDが一定の頻度で点滅します。

注釈

実行後に動作しない場合、またはエラーメッセージ「wiringPi.h: No such file or directory」が表示される場合は、 WiringPiのインストールと確認 を参照してください。

コード説明

#include <pthread.h>

このコードでは、新しいライブラリである pthread.h を使用します。これは一般的なスレッドライブラリのセットで、マルチスレッディングを実現できます。LEDとブザーの独立した動作を実現するために、コンパイル時に -lpthread パラメータを追加します。

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 秒間点灯し続けた後、消灯します。

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間隔で。

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):スレッドを作成し、そのプロトタイプは次のようになります:

int pthread_create(pthread_t *restrict tidp,const pthread_attr_t*restrict_attr,void*(*start_rtn)(void*),void *restrict arg);

成功した場合、0を返し、それ以外の場合はエラー番号-1を返します。

  • 最初のパラメータはスレッド識別子へのポインタです。

  • 2番目のパラメータはスレッド属性を設定するために使用されます。

  • 3番目のパラメータはスレッド実行関数の開始アドレスです。

  • 最後のパラメータはその関数を実行するものです。

void off(){
    flag = 0;
    softToneStop(BeepPin);
    digitalWrite(ALedPin,LOW);
    digitalWrite(BLedPin,LOW);
}

Off() 関数では、「flag=0」と定義してスレッド ledWorkBuzzWork を終了し、その後ブザーとLEDを消灯させます。

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は動作しません。

現象の画像

../_images/image267.jpeg