STM32G031とMCP3425でなんちゃってluxを液晶表示(MCP3425A0T-E/CH 16bitADC)(明るさ)
X計算間違えで約2Vで約400luxにならないといけないがたんに電圧の100倍になっている、修正予定 2倍すればよい。修正済2021/4/18
構成
STM32G031J6M6
MCP3425A0T-E/CH
NJL7502L
AQM0802A
1.SCLとSDAを接続、プルアップも忘れずに
2.電源の接続
3.下記のソースコードを書き込む
4.コンパイル実行で表示されたら終了
5.おわり
参考
#include <Wire.h> //I2C library
//STM32G031J6M6
#define sdaPin PA12 // ArduinoA4
#define sclPin PA11 // ArduinoA5
#define ADDR 0x68 // 2進数 1101000
#define I2Cadr 0x3e // 固定
int ii; //ループカウンター
//初期レジスター
char INIT_com[]={0x0,0x38,
0x0,0x39,
0x0,0x4,
0x0,0x14,
0x0,0x70,
0x0,0x56,
0x0,0x6C,
0x0,0x38,
0x0,0xC,
0x0,0x1,
0x40,0x41};
//画面クリアレジスター
char INIT_cls[]={0x0,0x1};
//明るさをLCD表示形式に変換
char ch_hex_a_b[5];
char *ch_hex_a(int l_num)
{
int a,b,c;
// if( l_num >= 200 ) {
// a=2;b=0;c=0;
// } else if( l_num >= 100) {
// a=1;b=(l_num-100) / 10;c=l_num % 10;
// } else {
// a=0;b= l_num / 10;c=l_num % 10;
// }
// 2021/4/18 0から999まで10進数変換
// 123の時
// 123/10=12
// 123-(12*10)=3
// 12/10=1
// 12-(1*10)=2
b=l_num/10;
c=l_num-(b*10);
l_num=b;
a=l_num/10;
b=l_num-(a*10);
//a=l_num/10;
ch_hex_a_b[0] = '@';
ch_hex_a_b[1] = '0' + a;
ch_hex_a_b[2] = '0' + b;
ch_hex_a_b[3] = '0' + c;
ch_hex_a_b[4] = 0;
return(ch_hex_a_b);
}
//i2c書き込みルーチン 2と4のみ
void i2c_led_w(char *buff1,int n){
Wire.beginTransmission(I2Cadr);
Wire.write(buff1[0]); //rs 0がレジスター rs 1がデータ
Wire.write(buff1[1]); //値1
if( n == 4 ) {
Wire.write(buff1[2]); //値2
Wire.write(buff1[3]); //値3
}
Wire.endTransmission();
delay(2);
}//i2c_led_w
void setup()
{
Wire.begin(sdaPin,sclPin); //STM32G031J6M6
//Wire.begin(); //UNO
//Serial.begin(9600); //UNO
//液晶の初期化
for(ii=0;ii<11;ii++){
i2c_led_w(&INIT_com[ii*2],2);
} //for
//16ビットadcの初期値の書き込み
Wire.beginTransmission(ADDR);
Wire.write(0b10011000); //16bit 15sps PGA x1
Wire.endTransmission();
} //end setup
int read_data() {
//2文字の読み込み
Wire.requestFrom(ADDR, 2);
//戻し
return ( (Wire.read() << 8 ) + Wire.read() );
}
void loop()
{
int p,s; //明るさの一時変数
//液晶のクリア
i2c_led_w(INIT_cls,2);
//明るさの読み込み
s=read_data();
//Serial.println(s); //uno
// // 32768/163.84=200 luxに変換
// p=( ((s>>5)*6) + (s>>7) ) >> 5;
// //Serial.println(p); //uno
// 32768/(163.84/2)=400 luxに変換
p=( ((s>>5)*6) + (s>>7) ) >> 4;
//Serial.println(p); //uno
//画面に表示 0から200まで
i2c_led_w(ch_hex_a( p ) ,4);
delay(1000); //1秒待つ
}//loop
Author And Source
この問題について(STM32G031とMCP3425でなんちゃってluxを液晶表示(MCP3425A0T-E/CH 16bitADC)(明るさ)), 我々は、より多くの情報をここで見つけました https://qiita.com/caa45040/items/d12c4a14b66962057a11著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .