Class内でTickerを使うには、attach()を
t.attach(this, &VoltageMonitor::blinkLed, 0.5);と、第一引数に自分自身を指定する必要がある。(参考:「https://os.mbed.com/forum/mbed/topic/1964/」)
Warning: Function "mbed::Ticker::attach(T *, M, float) [with T=VoltageMonitor, M=void (VoltageMonitor::*)()]" (declared at <a href="#" onmousedown="mbed_doc_goto('/VoltageMonitor_Test//extras/mbed_e7ca05fa8600/drivers/Ticker.h', '102'); return false;">/extras/mbed_e7ca05fa8600/drivers/Ticker.h:102</a>) was declared "deprecated" in "VoltageMonitor/VoltageMonitor.h", Line: 67, Col: 24というWarningが出るが、mbed-srcのdirvers/Ticker.hに
template<typename T, typename M>と宣言されていて、cv-qualifiers(constやvolatileの修飾子)をサポートしていないので(mbed-os-5.1以降?)非推奨というような事が書いてある。
MBED_DEPRECATED_SINCE("mbed-os-5.1",
"The attach function does not support cv-qualifiers. Replaced by "
"attach(callback(obj, method), t).")
void attach(T *obj, M method, float t) {
attach(callback(obj, method), t);
}
mbed OS 5はなんだかイマイチこなれていない感があるので今回はmbed 2で使うことにして、
void attach(T *obj, M method, float t)をそのまま使うことにした。そもそも
attach(callback(obj, method), t);の「callback()」が何なのかよくわからない。←そのうち調べるかも?
ブレッドボード配線図
Test Program
https://os.mbed.com/users/ryood/code/VoltageMonitor_Test/ Revision:1
VoltageMonitor Class
https://os.mbed.com/users/ryood/code/VoltageMonitor/ Revision:1
VoltageMonitor Classのコンストラクタで
// パラメータとパラメータを指定し、check()を呼び出す。
// _ain: 電圧監視用ADC
// _vdd: VDDの電圧値(実測値を指定)
// _loThreshold: 電圧低下閾値
// _hiThreshold: 過電圧閾値
// _pLed: 警告用LED (NULL: LEDを使用しない)
VoltageMonitor(AnalogIn* _pAin, float _vdd, float _loThreshold, float _hiThreshold, DigitalOut* _pLed=NULL)
// 返り値Nucleo自体には内部レファレンスがあるが、3.3VのVDDを実際にテスタ等で測定して基準電圧として使うことにした。
// -1: 電圧低下
// 0: 正常
// 1: 過電圧
int check()
動作としては電圧が低下した場合はLEDがゆっくり点滅、過電圧の場合ははやく点滅、正常時は常時点灯としている。
内蔵基準電圧
Nucleoをmbedで使って内蔵基準電圧を使いたい場合は
AnalogIn vrefint(ADC_VREF);と指定すれば使えるようだ。
参考「https://os.mbed.com/questions/75910/How-to-get-the-value-of-inbuilt-vref-int/」
内蔵基準電圧は1.21Vなので今回は使用していない。(入力が0V~2.7V以上を想定)
0 件のコメント:
コメントを投稿