基于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);       //这2个定义是DS18B20调用
DallasTemperature sensors(&oneWire); //这2个定义是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);    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值