<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Arduino+STM32+DS18B20溫度傳感器

      DB18B20 是一個長得像三極管的溫度傳感器,平的那一面對著我們,從左到右分別是 GND、DQ、VDD 引腳。接的時候最好在 DQ 和 VDD 之間加一個 4.7K 的上拉電阻維持高電平。

      一共三個文件:

      • ds18b20.h 用于封裝 DS18B20 的庫的頭文件
      • ds18b20.cpp 用于封裝 DS18B20 的庫文件
      • main.ino Arduino 主程序

      打開 Arduino IDE,在“開發板管理器”中安裝 STM32 MCU based boards,然后選擇自己的開發板對應的型號。

      我用的是5塊錢包郵的STM32F103 C6T6

      先選擇開發板,然后才能用它附帶的頭文件。

      (1) ds18b20.h

      #ifndef __DS18B20_H
      #define __DS18B20_H
      
      bool ds18b20_reset(void);
      void write_bit(bool value);
      bool read_bit(void);
      void write_byte(uint8_t data);
      uint8_t read_byte(void);
      float read_temperature(void);
      
      #endif
      

      (2) ds18b20.cpp

      注意:把下面的 PB12 換成你自已的引腳。

      #include "ds18b20.h"
      
      const int DS18 = PB12; //連接DS18B20的引腳,這里以PB12引腳為例
      
      /* 初始化18B20,成功返回1,失敗返回0 */
      bool ds18b20_reset(void){
        pinMode(DS18, OUTPUT);
        digitalWrite(DS18,LOW); //1、先拉低,保持480~960微秒
        delayMicroseconds(480);
        pinMode(DS18, INPUT_PULLUP);  //2、釋放總線,上拉電阻將其拉高,保持15~60微秒
        delayMicroseconds(70);
        bool presence = !digitalRead(DS18); //3、18B20會拉低總線60~240微秒作為應答
        delayMicroseconds(410); //此處的延時從剛才拉高開始算,至少480微秒(480-70=410)
        return presence;
      }
      
      /* 往18B20寫入數據 */
      void write_bit(bool value){
        pinMode(DS18, OUTPUT);
        digitalWrite(DS18, LOW);  //1、先拉低,等待1微秒(15微秒內)
        delayMicroseconds(1);
        if (value){   //2、如果寫1,就把引腳拉高,否則保持低電平。然后等待60微秒
          pinMode(DS18, INPUT_PULLUP);
        }
        delayMicroseconds(60);
        pinMode(DS18, INPUT_PULLUP);  //3、最后把引腳拉高
      }
      
      /* 讀取18B20的數據 */
      bool read_bit(void){
        pinMode(DS18, OUTPUT);
        digitalWrite(DS18, LOW);  //1、先拉低,等1微秒;
        delayMicroseconds(1);
        pinMode(DS18, INPUT_PULLUP);  //2、再拉高(并釋放總線),等10微秒;
        delayMicroseconds(10);
        bool bit_val = digitalRead(DS18); //3、讀取引腳的值,再等60微秒左右;
        delayMicroseconds(55);
        return bit_val;
      }
      
      void write_byte(uint8_t data){
        for (uint8_t i=0; i<8; i++){
          write_bit(data & 0x01); //低位先發送
          data >>= 1;
        }
      }
      
      uint8_t read_byte(void){
        uint8_t data = 0;
        for (uint8_t i=0; i<8; i++){
          data |= (read_bit() << i);  //低位先接收
        }
        return data;
      }
      
      float read_temperature(void){
        if (!ds18b20_reset()) return NAN;
        write_byte(0xCC); //0xCC:跳過ROM檢測(因為只有一個設備)
        write_byte(0x44); //0x44:溫度轉換命令
        
        //等待轉換完成(12-bit精度約需750ms)
        pinMode(DS18, INPUT_PULLUP);
        unsigned long start = millis();
        delay(700);
        //18B20在轉換時會把總線拉低(表示“忙”),完成后才釋放(自動被拉高)
        while (!digitalRead(DS18)){
          //如果時間太久了就放棄
          if (millis() - start >= 1000) return NAN;
          delay(1);
        }
        
        //轉換完成后要重新建立通信!
        if (!ds18b20_reset()) return NAN;
        write_byte(0xCC); //0xCC:跳過ROM檢測(必需)
        write_byte(0xBE); //0xBE:讀取暫存器命令
        
        uint8_t temp_low = read_byte();
        uint8_t temp_high = read_byte();
        int16_t temp = (temp_high << 8) | temp_low;
        return temp / 16.0; //12-bit精度要乘以0.0625
      }
      

      (3) main.ino

      注意:下面的 PA10 是 RX 引腳,PA9 是 TX。

      #include "ds18b20.h"
      
      //                      RX    TX
      HardwareSerial Serial1(PA10, PA9);
      
      void setup() {
        Serial1.begin(115200);
      }
      
      void loop() {
        float temperature = read_temperature();
        if (!isnan(temperature)){
          Serial1.print("Temperature:");
          Serial1.println(temperature);
        } else {
          Serial1.println("ERROR");
        }
        delay(1000);
      }
      

      最后燒錄,打開串口監視器查看。

      posted @ 2025-04-28 22:08  Hemmelfort  閱讀(183)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产一区日韩二区三区| 成年女人片免费视频播放A| 国内自拍视频一区二区三区| 下面一进一出好爽视频| 精品视频一区二区| 亚洲一区二区三区在线观看精品中文| 日韩无人区码卡1卡2卡| 国产精品一码在线播放| 国产午夜福利短视频| 夜夜夜高潮夜夜爽夜夜爰爰| 国产亚洲一级特黄大片在线| 久久久久亚洲av成人网址| 亚洲精品一区二区制服| 综合在线 亚洲 成人 欧美| 五月天久久综合国产一区二区| 国产二区三区不卡免费| 成人性无码专区免费视频| 中文字幕精品人妻av在线| 在线日韩日本国产亚洲| yw尤物av无码国产在线观看| 天堂V亚洲国产V第一次| 新宾| 欧洲亚洲色一区二区色99| 亚洲综合久久精品哦夜夜嗨| 漳平市| 中文字幕国产精品一区二| 国产女人喷潮视频免费| 类乌齐县| 久久人与动人物a级毛片| 日本一道一区二区视频| 桑植县| 久久国产乱子精品免费女| 在线天堂最新版资源| 67194熟妇在线观看线路| 亚洲一区二区乱码精品| 亚洲天堂视频网| 亚洲精品一区二区区别| 老熟妇老熟女老女人天堂| 欧洲熟妇色xxxxx欧美| 无码一区二区三区久久精品| 男女性杂交内射女bbwxz|