ESP32基板に外付けのボリューム(可変抵抗)をつけて調光する。
方法:
下図の様に抵抗,可変抵抗を接続し、IO32 に 0V~3.3V を入力。
定期的に AD変換した値を読み、LED(IO2) に明るさを設定する。
定期的な読み出しはTicker による割り込み処理で行う。
この割り込み処理では ネットワーク通信、シリアル通信等のブロッキングIOができない様なので、割り込み処理ではフラグ ON のみ行い、実際の処理は loop 内で行う。
AD変換は、analogRead で行い、default では 0V で 0, 3.3V で 4095 となる。
読みだした値を 0~255 の範囲に変換して LED の調光を行う。
/* * WiFi LED ON/OFF TEST * PWM Control * Volume Control */ #include <Ticker.h> byte led_brightness = 0 ; byte flg = 0; Ticker ticker; bool ticker_valid = false ; int vol_value = 0 ; int loopcnt = 0; void setup() { Serial.begin(115200); pinMode(2, OUTPUT); // set the LED pin mode // for LED PWM Control --------------------------------------------------- sigmaDeltaSetup(0, 312500); // setup channel 0 with frequency 312500 Hz sigmaDeltaAttachPin(2,0); // attach pin 2 to channel 0 sigmaDeltaWrite(0, 0); // initialize channel 0 to off // for Ticker ticker.attach_ms(100, execTicker) ; } void loop(){ if (ticker_valid) { do_JOB() ; } } // ------------------------------------------------------------------ void execTicker() { ticker_valid = true ; // フラグを True にする。 } void do_JOB() { // ... 実行したい処理 ... vol_value = analogRead(A4); led_brightness = (byte) ((vol_value*255/4095)) ; sigmaDeltaWrite(0, led_brightness) ; // set PWM value to channel#0 loopcnt++ ; if (loopcnt ==10) { Serial.print( "A4 :") ; Serial.println(vol_value) ; loopcnt = 0; } ticker_valid = false ; // 処理を実行したら、フラグを false にする。 }
以下、覚書など。
( 行# 7 )
Ticker を使用するための include。
( 行# 12 )
Ticker オブジェクト定義
( 行# 28 )
割り込み間隔と割り込み処理を設定。
ここでは 100mS 毎 にした。
( 行# 32,33 )
loop 内で、フラグが立っていたら処理を実行する。
( 行# 39,41 )
割り込み処理。
ここでは、フラグを立てるだけ。
( 行# 43~57 )
定期実行する処理を記載。
( 行# 45 )
IO32 から 電圧を読み出す。
( 行# 47 )
読みだした値を 0~255 に変換して PWM の duty を設定する。
( 行# 51~55 )
割り込み処理 10回 に 1回 (1秒ごと) に シリアルに読みだした値を出力する。
(デバッグ用)
( 行# 56 )
定期処理終了したらフラグを下ろす。
0 件のコメント:
コメントを投稿