STM32G031과 MCP9701로 온도를 128x32 OLED로 출력 (Arduino)

x 너무 정확하지 않다.
x 가끔 OLED를 재설정하지 못함 전체 전원을 여러 번 껐다 켜십시오.
x UNO와 767 차이는 ADC의 최대 전압이 5V, 3.3V
x U8glib과 U8g2가 있기 때문에 각자 확인 일

목적
아키즈키에서 팔고 있는 저렴한 MCP9701(약 25엔)을 사용하여 온도를 출력한다.

구성
MCP9701-E/TO I-03199
AL12832AWWB-H-U02 P-14686

설명
설명하면 길어지므로 각자 마음대로 조사해
팁 MCP9701 AL12832AWWB



ArduinoUNO와 MCP9701에서 온도를 128x32 OLED로 출력 (Arduino)

●흐림
OLED 리셋에는 풀업이 포함되어 있지 않습니다.
OLED 자체가 마이크로 컴퓨터처럼 보이기 때문에 잼하면 LCD와 다릅니다.
명령을 받지 못함
당연히 전체 전원을 켤 때 잼하면 나중에 쓸모가 없습니다.
전체 전원을 여러 번 다시 넣으면 부활한다. 초조해 울리지 않도록
OLED가 중간에 멈추더라도 동일
제대로 된 OLED 용 리셋 회로를 만들거나 외부 리셋
걸어 올리지 않으면 안되기 때문에 OLED 리셋 단자가 외부
나왔다.


#include <Arduino.h>
#include <U8x8lib.h>

U8X8_SSD1306_128X32_UNIVISION_SW_I2C u8x8(/* clock=*/ PA9, /* data=*/ PA10, /* reset=*/ U8X8_PIN_NONE);   // Adafruit Feather ESP8266/32u4 Boards + FeatherWing OLED

int     cursor1;      //カーソルの位置
char    data_read[8]; //i2cバッファー

void i2c_oled_w(char *s)
{
            //文字の表示
            u8x8.drawString(
            ((cursor1-0) & 0x07  )*2, // x
            (cursor1>>3)*2,           // y
            s);

            while(s[0] != 0) {
              s++;
              cursor1++;
            }

            //cursor1=cursor1 + 3; 
} //i2c_oled_w

//初期化
void setup(void) {

  delay(2000); //oledのリセット時間

  u8x8.begin();

  u8x8.setFont(u8x8_font_px437wyse700a_2x2_r);

  //スタートロゴ
  cursor1 = 0;
  i2c_oled_w("START");
  delay(500);

  //画面の初期化
  u8x8.drawString( 0,0,"        ");
  u8x8.drawString( 0,2,"        ");
  cursor1 = 0;

} //setup

int s;                //ADCの値
int n0;               //温度 小数点以上
int nt[] = {0,2,5,7}; //温度

void loop(void) {

//  //画面の初期化
//  u8x8.drawString( 0,0,"        ");
//  u8x8.drawString( 0,2,"        ");
  //カーソルのクリア
  cursor1 = 0;

  //adcの読み込み 0から4096
  analogReadResolution(12);
  s = analogRead(A9); // PB7 PIN1

  //電圧を温度に変換 ex 20.0 -> 200 温度の十倍を出力
  s=((s*1692)>>12)-205;

  //s=0;   //0    debug
  //s=200; //20.0 debug

  //小数点以上と小数点以下を分ける
  n0=s/10;    // 小数点以上
  s =(s-(n0*10)); // 小数点以下

  //画面に表示
  i2c_oled_w("TMP=");
  data_read[0] = '0' + n0/10;;
  data_read[1] = '0' + (  n0-(  (n0/10)  *10)  );
  data_read[2] = '.';
  data_read[3] = '0' + s;
  data_read[4] = 0; 
  i2c_oled_w(data_read);

  //1秒待つ
  delay(1000);
} //loop



좋은 웹페이지 즐겨찾기