#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
// 数据输出脚接开发板数字引脚2
#define ONE_WIRE_BUS 2
Servo myservo; // 定义Servo对象来控制
int pos = 0; // 角度存储变量
int potpin=A5;
int val;//定义变量val
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27,16,2);
const int buttonPin = 13; // 定义一个常量buttonPin,其值为13,表示按钮连接的引脚编号。
void setup(void)
{
myservo.attach(9); // 控制线连接数字9
Serial.begin(9600);
sensors.begin();
lcd.init(); // 执行两次LCD的I2C通讯初始化
delay(20);
lcd.init();
delay(20);
lcd.backlight();//点亮LCD背光灯
pinMode(buttonPin,INPUT);//定义按键接口为输入接口
}
void loop(void)
{
/*for (pos = 0; pos <= 180; pos ++) { // 0°到180°
// in steps of 1 degree
myservo.write(pos); // 舵机角度写入
delay(5); // 等待转动到指定角度
}
for (pos = 180; pos >= 0; pos --) { // 从180°到0°
myservo.write(pos); // 舵机角度写入
delay(5); // 等待转动到指定角度
}*/
int potVal = analogRead(potpin); // 读取电位器的值(范围0-1023)
int angle = map(potVal, 0, 1023, 0, 180); // 将电位器的值映射到0-180的范围(舵机的旋转范围)
myservo.write(angle); // 发送角度值到舵机
/* // 可选:通过串行监视器打印电位器的值和舵机的角度
Serial.print("Potentiometer Value: ");
Serial.print(potVal);
Serial.print("\t Servo Angle: ");
Serial.println(angle);*/
delay(15); // 稍微延迟一下,以减少可能的抖动
sensors.requestTemperatures(); // 发送命令获取温度
Serial.println(sensors.getTempCByIndex(0));
lcd.setCursor(0, 0); // 将LCD光标移动到第一位0,0(列,行)
val=digitalRead(buttonPin);//读取数字13 口电平值赋给val
lcd.print("temp:");
if(val==LOW)//检测按键是否按下,按键按下时显示华氏度
{
lcd.print(sensors.getTempCByIndex(0)*9./5+32); // 传感器温度值
lcd.print(" F"); // 继续前面语句写入
delay(500);
}
else
{
lcd.print(sensors.getTempCByIndex(0)); // 传感器温度值
lcd.print(" c"); // 继续前面语句写入
delay(500);
}
}
Loading
ds18b20
ds18b20