2018年10月28日日曜日

ESP32/arduino:LED調光_外付けのボリュームで調整

目的:
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 件のコメント:

コメントを投稿