STM32勉強日記(2021/7/12):AD変換を行う
AD変換を行う。
今日やりたいこと
可変抵抗で電圧を分圧し、その電圧をAD変換をして、nucleof401で取り込む。
とりこんだ値から、DFplayerの音量を調整出来る用にする。
昨日の時点で、AD変換して、音量を調節するプログラムを作成したが、動かなかった。
その原因として、位置が悪いのではないかということで、C言語のブラウザで確認したら、位置によって
結果が変わることが分かった。
今回は、STM32のプログラム側に反映させて、確認する。
昨日は、配列の中に変数を使うと上手く出来なかった、ただ、それは位置が悪かった可能性が高いので、
宣言の位置を変更して、再度実行する。
ということで、下記をmain関数に記載した。
これで、volume 15で動くはず。
code:c
uint8_t volume1 = 0x0F;
uint8_t vol_set[]={0x7E,0xFF,0x06,0x06,0x00,0x00,volume1,0xEF}; //UART送信データ 音量
HAL_UART_Transmit(&huart1,vol_set,sizeof(vol_set),100);
おお、ちゃんと動いた!!
ということは、AD変換で値を取得して、volumeの値に変換。
その後、配列に組み込む必要があるということだ。
AD変換はwhileループの中で行っているから、
volume1 に値を入れ、
配列にいれる。
UART通信という順で行う。
最初に配列を宣言しておいて、後から値を代入したかったが、どうやラ無理っぽい。
ということで、とりあえず、AD変換終了後に配列の宣言を入れ、
volume変化時に、UART通信を行い、音量変更コマンドを送るようにした。
type defaults to 'int' in declaration of 'AD'のエラーが出た。
なんだ???
調べる。
タイプは、「AD」の宣言でデフォルトで「int」になります とのこと。
これは、constの使い方がなんか間違ってるっぽい?
ということで、使い方を調べる。
どうやら、const AD 4096;としてたのが、良くなかったというか、自動的にこれだとint型が割り振られてますよってことっぽいですね。
今回の場合は、特に問題ないですが。
本当は、 const int AD 4096; と書くべきだったみたいです。
const int に変更して、再度実行。
結果、ボリュームを変更することによって、音量を変更出来るようになった!!
ただ、volume範囲が上手くいっていないのと、volumeの微細な変化があり、安定はしていない。
これは、回路側で吸収できるかな。
とりあえず、当初の目的であった、
可変抵抗で電圧を分圧し、その電圧をAD変換をして、nucleof401で取り込む。
とりこんだ値から、DFplayerの音量を調整出来る用にする。
この二つは出来た!!
後は、これにスイッチを押したら、次の曲が流れるようにするだけだ。
今日はキリがいいので、ここまでとします。