• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+
イイね!
2022年11月28日

LCD 1602A バックライト調整(PWM制御)

LCD 1602A バックライト調整(PWM制御)
430タイマーで使用していた0.96インチのOLEDですが、長期間使っていると劣化し画面の輝度が著しく低下するという問題があるということが分かってきました。

そこで画面をLCD1602Aと入替するべく、表示のテストを行いました。
I2Cの変換モジュールがはんだ付けされているタイプのものなのですが、
これがやたらバックライトが明るいのです。
夜間に走行するのにこんなにバックライトが明るいと運転の邪魔になりそうなのでバックライトの明るさを制御できないか、少し考えてみました。
可変抵抗を後付けするのは部品点数が増えるのであまりやりたくないので他の方法を考えます。
alt
バックライトのLEDは100Ωの抵抗がデフォルトでついていて、VCCの電源が直接供給されてる感じです。


最初は、lcd.backlight()と、lcd.noBacklight()を高速に交互に呼び出してPWM制御っぽくしてたのですが、なんかうまくないので、LCDのバックライトにArduinoの機能で直接PWM制御した信号を入れるようにしてみました。
LCDのバックライトには100Ωの抵抗が既についてるので、
ArduinoのD6ピンと、1602A I2Cモジュールのバックライトスイッチ端子の片側を繋げるだけです。
alt

あとは、pinMode(6,OUTPUT);でD6をアウトプットにして、
analogWrite(6, 20);みたいな感じでPWM制御してやればバックライトの明るさも自由自在です。

//YWROBOT
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display


int brightness = 0;
#define READ_INTERVAL 20//ms
#define SW_PIN 7
#define LED_PIN 6

unsigned long timer, old_timer;
bool states, value, old_value;
char str[32];

void setup()
{
  lcd.init();                      // initialize the lcd
  lcd.init();
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("000Hello, world!");
  lcd.setCursor(2,1);
  lcd.print("Ywrobot Arduino!");
   lcd.setCursor(0,2);
  lcd.print("Arduino LCM IIC 2004");
   lcd.setCursor(2,3);
  lcd.print("Power By Ec-yuan!");

    pinMode(SW_PIN, INPUT_PULLUP);//入力
    pinMode(LED_PIN,OUTPUT);//LCDのLED
}


void loop()
{
  //READ_INTERVAL[ms]毎にスイッチの読取り
  timer = millis();
  if ( (timer - old_timer) >= READ_INTERVAL) {
    old_timer = timer;
    value = !(digitalRead(SW_PIN));//SW (ON=1 / OFF=0)
  }

  //スイッチの状態を取得
  int sw_states = 0;
  if (value == HIGH && old_value == LOW) {
    sw_states = 1;//スイッチが押された瞬間
  } else if (value == LOW && old_value == HIGH) {
    sw_states = 2;//スイッチを離した瞬間
  } else if (value == HIGH && old_value == HIGH) {
    sw_states = 3;//スイッチが押されている
  } else {
    sw_states = 0;//スイッチが押されていない
  }
  old_value = value;

  //スイッチの状態に応じて動作を変更
  switch (sw_states) {
    case 0://スイッチが押されていない
      //states = LOW;
      break;
    case 1://スイッチが押された瞬間
      //states = !states;
      BrightnessCHG();
      sprintf(str, "%03dHello, world!", brightness);
      lcd.setCursor(0,0);
      lcd.print(str);
      break;
    case 2://スイッチを離した瞬間
      //states = !states;
      break;
    case 3://スイッチが押されている
      //states = HIGH;
      break;
  }
}

void BrightnessCHG(){
  brightness += 17;
  if (brightness > 255){
    brightness = 0;
  }
  analogWrite(LED_PIN, brightness);
}

ブログ一覧 | Arduino | 日記
Posted at 2022/11/29 00:16:10

イイね!0件



タグ

今、あなたにおすすめ

関連記事

[i-MiEV]カーナビバックライ ...
mobile_maniaさん

壁面スイッチの交換と謎仕様
湘Nyan!さん

ちょっと質問……😆
よっちゃん豚さん

[i-MiEV]スイッチインジケー ...
mobile_maniaさん

CAN信号発生器
Katohさん

240526-5 PS5:エアコン ...
Kazu Mark-Vさん

この記事へのコメント

コメントはありません。

プロフィール

「[整備] #フォワード ArduinoでCAN通信できるプリント基板を作って組立 (MCP2515) https://minkara.carview.co.jp/userid/3423019/car/3226320/7545498/note.aspx
何シテル?   10/29 00:19
zip********です。よろしくお願いします。
みんカラ新規会員登録

ユーザー内検索

<< 2025/4 >>

  12345
6789101112
13141516171819
20212223242526
27282930   

ブログカテゴリー

愛車一覧

いすゞ フォワード いすゞ フォワード
いすゞ フォワードに乗っています。
トヨタ カローラフィールダーハイブリッド トヨタ カローラフィールダーハイブリッド
通勤車です

過去のブログ

2024年
01月02月03月04月05月06月
07月08月09月10月11月12月
2023年
01月02月03月04月05月06月
07月08月09月10月11月12月
2022年
01月02月03月04月05月06月
07月08月09月10月11月12月
ヘルプ利用規約サイトマップ

あなたの愛車、今いくら?

複数社の査定額を比較して愛車の最高額を調べよう!

あなたの愛車、今いくら?
メーカー
モデル
年式
走行距離(km)
© LY Corporation