Arduino でNゲージコントローラーを(A1-2)

前記事の 可変抵抗(VR)や、12接点のロータリースイッチ(RO-SW)だけを
簡易的に組み立ててみました。

イメージ 1
上2つの小さなボリュームは、常点灯調整用だったり、加速度調整用だったり、下の大きなのはノッチ式コントローラ用とか、まぁ、いろいろです。

イメージ 2
安定して使えるようになったLCDを使ってのテスト。
ATMEGA328P-PUのアナログ 0~2chに上のボリューム類を割り当て数字を表示しているところ。
A/Dコンバータは、0~1023(0~3FFh)まで値をとることが出来ます。
0ch : 大きいロータリースイッチ
1ch,2ch : 小さいボリューム(可変抵抗)

0ch=aaaa:1ch=bbb
0ch=  cc:2ch=ddd

aaaa : 0ch のA/Dコンバータ値(10進)
bbb : 1ch のA/Dコンバータ値(16進)
cc : 0ch のA/Dコンバータ値を 0~11に変換したもの
ddd : 2ch のA/Dコンバータ値(16進)

test用プログラム


#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2);  // set the LCD address

int val0R = 0;           // 読み取った値を格納する変数
int val0D = 0;           // 読み取った値を格納する変数
int val1 = 1;           // 読み取った値を格納する変数
int val2 = 2;           // 読み取った値を格納する変数

void setup()
{
  lcd.init();                      // initialize the lcd
  lcd.backlight();
}

void loop(){
  char buf[20];
 
  // Print a message to the LCD.

  val0R = analogRead(0);    // アナログピンを読み取る
  val0D = int( (val0R-42)/85);

  val1 = analogRead(1);    // アナログピンを読み取る

  val2 = analogRead(2);    // アナログピンを読み取る

  lcd.setCursor(0,0);
  sprintf(buf,"0ch=%4d:1ch=%3x",val0R,val1);
  lcd.print(buf);
  lcd.setCursor(0,1);
  sprintf(buf,"0ch=  %2d:2ch=%3x",val0D,val2);
  lcd.print(buf);
  delay(500);
}

つぎは、いよいよ PWMですかね~!?