気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/04 06:41
2018/03/04 06:45
2018/03/04 06:46
2018/03/04 06:47
2018/03/04 06:48
2018/03/04 06:50
2018/03/04 06:54
2018/03/04 06:56
回答2件
0
ベストアンサー
1)モールス信号について
モールス信号の音の長さは以下のように決まっています(Recommendation ITU-R M.1677-1 (International Morse Code))
短点(dot)の長さを1とすると
長点(dash)の長さは3
1つの文字を構成する点(dot もしくは dash)の間は1
文字と文字の間は3
単語と単語の間は7
質問のコードで、dotSpeed,dashSpeed,chorGap(文字間?)に代入されている値は正しくありません。
また、delay(20);が点と点の間だと思われますが、これも正しくありませんので全体としてモールス信号になりません。
13ピン(LED(?))にモールス信号を出力する(モールス信号のようにLEDが点滅する)プログラムは、以下のようになります。
Arduino
1int ledPin=13; //モールス信号を出力するピン 2int dotDuration = 250; //dotの長さを250msにする 3 4int dashDuration = dotDuration*3 //dashの長さ 5int signalGap = dotDuration*1 //点間の無音時間 6int charGap = dotDuration*3 //文字間の無音時間 7int charGapPlus = dotDuration*2; //signalGapと足して文字間の無音時間にする 8int wordGapPlus = dotDuration*4 //charGapと足して語間の無音時間にする 9 10void setup() { 11 pinMode(ledPin, OUTPUT); 12} 13 14void loop() { 15 // S 16 morseS(); 17 // O 18 morseO(); 19 // S 20 morseS(); 21 delay(wordGapPlus); 22 23} 24 25void morseDot(){ 26 digitalWrite(ledPin,High); 27 delay(dotDuration); 28 digitalWrite(ledPin,Low); 29 delay(siganalGap) 30} 31 32void morseDash(){ 33 digitalWrite(ledPin,High); 34 delay(dashDuration); 35 digitalWrite(ledPin,Low); 36 delay(siganalGap); 37} 38 39// Sをモールス信号で出力 40// S のモールス符号は、dot dot dot 41void morseS(){ 42 morseDot(); 43 morseDot(); 44 morseDot(); 45 delay(charGapPlus); 46} 47 48// Oをモールス信号で出力 49// O のモールス符号は、dash dash dash 50void morseO(){ 51 morseDash(); 52 morseDash(); 53 morseDash(); 54 delay(charGapPlus); 55}
== 音を出す素子について ==
13ピンとGNDピンに、電圧が加わっている時に音が鳴り続けるタイプのブザーの両端をつなげば、ブザーからモールス信号が出るはずです。
写真を見るとブザーとGNDピンの間に220Ωの抵抗が入っているようですが、ブザーの線を直接GNDピンにつなぐと鳴るかもしれません。
もしも音が出ない(ポツ、ポツ、というような音になる)のであれば、ブザーではなく圧電ブザーが接続されているのだと思われます。
ブザーは、両端に直流電圧さえかければ音が出るように発信回路を内蔵しています。
圧電ブザーは圧電素子がついた(発信回路のない)金属板なので、方形波を加えないと音になりません。
もしも圧電ブザーを使うのであれば、ArduinoのTone関数を使って音をだします。
Tone関数を使ったmorseDotは、以下のような感じで、toneFreqの値で音の高さ(周波数)を設定します。
440は、下のラ(A)の音の周波数で、NHKのラジオの時報「ポ ポ ポ ピー」のポの音です。
int toneFreq = 440; void morseDot(){ tone(ledPin,toneFreq,dotDuration); delay(dotDuration); //音が鳴っている間待つ delay(siganalGap); }
投稿2018/03/04 08:08
総合スコア6915
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/04 08:17
2018/03/06 06:47
2018/03/06 06:57
0
回路図が不明なので、推測で回答します
おそらく、写真上の黒い円筒形のものはブザーだと推測されますが、それだとポート出力が直接出すことができる電流では足らないのでブザーが鳴りません。
ということで、その場合は一旦FETかトランジスタでドライブ回路を構成して、その出力でブザーを駆動する必要があります。
#黒い円筒形のものがセラミック発音体である、という場合はまたべつの方法となります
投稿2018/03/04 07:07
総合スコア87774
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/04 07:09
2018/03/04 07:12
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。