
stm32l010f4p6 adc mcp9601 1_5
Diff: main.cpp
- Revision:
- 0:1a55aa7b10a5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon May 03 05:18:29 2021 +0000 @@ -0,0 +1,96 @@ +#include "mbed.h" + +//10の割り算 0から1028までは、正しい。主に0から999 +#define DVI10(n) ((n*205)>>11) + +//アナログ入力の設定 +AnalogIn adc_vbat(A3); //PA_4 +//AnalogIn adc_vbat(A0); //767 + +#define ADDR_LCD (0x7C) // address + +//I2C i2c(I2C_SDA, I2C_SCL); //767 +//I2C i2c(dp5, dp27); //1114 +I2C i2c(PA_10, PA_9); //010 + +char data_read[8]; //i2cバッファー + +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}; + +char ch_hex_a_b[5]; +char *ch_hex_a(int l_num) +{ + int a,b,c; + + b=DVI10(l_num); + c=l_num-(b*10); + l_num=b; + a=DVI10(l_num); + b=l_num-(a*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); +} //ch_hex_a + +int ii; //ループカウンタ +int s; //アナログ読み取り値 + +int main() +{ + //printf("767\r\n"); //767 + //液晶の初期化 + for(ii=0;ii<11;ii++){ + i2c.write(ADDR_LCD, &INIT_com[ii*2], 2);wait_ms(2); + } //for + + //無限ループ + while (1) { + //液晶のクリア + i2c.write(ADDR_LCD,INIT_cls,2);wait_ms(2); + + //adcの読み込み 0から4096 + s = (adc_vbat.read_u16()>>4); + + //電圧を温度に変換 ex 20.0 -> 200 温度の十倍を出力 + s=((s-496)*27081)>>16; + + //小数点以上と小数点以下を分ける + ii=DVI10(s); // 10の桁 + s =(s-(ii*10))*10; // 1の桁 + + //温度の小数点以上の表示 + i2c.write(ADDR_LCD, ch_hex_a( ii ) ,4); + + //温度の小数点以下の表示 + ch_hex_a( s ); + ch_hex_a_b[1] = '.'; + //ch_hex_a_b[2] = '0' + s; + ch_hex_a_b[3] = 'C'; + i2c.write(ADDR_LCD, ch_hex_a_b ,4); + + //1秒待つ + wait_ms(1000); + + }//while + +}//main + +//容量削減 +void error(const char* format, ...){}