前記事の 可変抵抗(VR)や、12接点のロータリースイッチ(RO-SW)だけを
簡易的に組み立ててみました。
上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ですかね~!?