注釈
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
参加する理由は?
エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。
独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。
特別割引:最新製品の独占割引をお楽しみください。
祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!
3.1.9 アラームベル¶
はじめに¶
このプロジェクトでは、手動アラーム装置を作成します。トグルスイッチをサーミスタまたは光センサーに置き換えて、温度アラームまたは光アラームを作成できます。
必要な部品¶
このプロジェクトには、以下の部品が必要です。
まとめて購入するのは便利です。リンクはこちらです:
名前 |
このキットのアイテム |
リンク |
---|---|---|
Raphael Kit |
337 |
以下のリンクから個別に購入することもできます。
コンポーネントの紹介 |
購入リンク |
---|---|
配線図¶
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 |
実験手順¶
ステップ1: 回路を組み立てます。
ステップ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()」関数では以下のことを実行します:
マーク
flag=1
を定義し、制御スレッドの終了を示します。ソフトウェア制御されたトーンピン
BeepPin
を作成します。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」と定義してスレッド ledWork と BuzzWork を終了し、その後ブザーと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は動作しません。