资讯详情

基于LattePanda板,实现DH18B20 \SH30\PWM输出

//#include "cn.c"                  ////串口打印汉字调用文件 #include <Wire.h>                //I2C温湿度传感器调用文件 #include <OneWire.h>             //这两个头文件是DS18B20调用    #include <DallasTemperature.h>    //这两个头文件是DS18B20调用  #define Addr_SHT30_1 0x44        // SHT30 IIC 7位地址为0x44 #define Addr_SHT30_2 0x45        // SHT30 IIC 7位地址为0x45  #define SDA_PIN 2                     //I2C温湿度传感器数据传输脚 #define SCL_PIN 3                     //I2C温湿度传感器时序传输脚 #define ONE_WIRE_BUS 7               // DS18B20 DQ接引脚D7(GPIO1) int analogPin = 4;                   // PWM- - -调节脚电压输入脚的电位器,接引脚D4(GPIO10) int val = 0;  OneWire oneWire(ONE_WIRE_BUS);       //这两个定义是DS18B20调用 DallasTemperature sensors(&oneWire); //这两个定义是DS18B20调用    void setup()   {   //- - - - - - - - - - - - - - -I2C Temp & humi sensor     Wire.begin();                 //初始化IIC(作为主设备)    pinMode(9,OUTPUT);            //PWM输出脚   sensors.begin();              // DS18B20 DS18B20初始化   Serial.begin(9600);         //初始化串行通信,设置波特率=9600   delay(300);                  ///延迟以求稳定(删除也可以)   }  void loop() {   unsigned int data1[6]; ///存储获得的六个数据   unsigned int data2[6];  ///存储获得的六个数据    Wire.beginTransmission(Addr_SHT30_1);   Wire.write(0x2C);   //发送测量命令 0x2C06,但是因为IIC一次只能发送8位数据,所以必须发送两次   Wire.write(0x06);   //发送测量命令 0x2C06,但是因为IIC一次只能发送8位数据,所以要发两次   Wire.endTransmission();   delay(500);    //等待500ms是等待SHT30器件测量数据实际上可以很短   Wire.requestFrom(Addr_SHT30_1, 6);    //请求获取6字节数据,然后存储在8266的内存中   if (Wire.available() == 6)   ///读取6字节数据,分别为8位高温数据、8位低温数据和8位高温数据CRC验证数据,湿度8位高,湿度8位低,湿度8位CRC校验数据   {     data1[0] = Wire.read();     data1[1] = Wire.read();     data1[2] = Wire.read();     data1[3] = Wire.read();     data1[4] = Wire.read();     data1[5] = Wire.read();   }   float cTemp1 = ((((data1[0] * 256.0)   data1[1]) * 175) / 65535.0) - 45;    float humidity1 = ((((data1[3] * 256.0)   data1[4]) * 100) / 65535.0);   delay(500);    Wire.beginTransmission(Addr_SHT30_2);      Wire.write(0x2C);     Wire.write(0x06);   Wire.endTransmission();     delay(500);    Wire.requestFrom(Addr_SHT30_2, 6);     if (Wire.available() == 6)    {     data2[0] = Wire.read();     data2[1] = Wire.read();     data2[2] = Wire.read();     data2[3] = Wire.read();     data2[4] = Wire.read();     data2[5] = Wire.read();   }   float cTemp2 = ((((data2[0] * 256.0)   data2[1]) * 175) / 65535.0) - 45;     float humidity2 = ((((data2[3] * 256.0)   data2[4]) * 100) / 65535.0);      Serial.print("sensor1--humidity:");    Serial.print(humidity1);   Serial.print("%RH      ");   Serial.print("Temperatur");    Serial.print(cTemp1);   Serial.println("C");    Serial.print("sensor2--humidity:");    Serial.print(humidity2);   Serial.print("%RH      ");   Serial.print("Temperatur:");    Serial.print(cTemp2);   Serial.println("C");     val = analogRead(analogPin);   Serial.print("V = ");            // PWM- - -电位调节脚电压打印   Serial.println(val*0.0047);   // PWM- - -电位调节脚电压打印   analogWrite(9,val / 4);       // PWM输出    sensors.requestTemperatures(); // 发送命令以获得温度   Serial.print("ds18b20 Temperature: ");   Serial.print(sensors.getTempCByIndex(0));    Serial.println("  C");   delay(500);     }

标签: sh50传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台