其他分享
首页 > 其他分享> > 智能家居最终代码

智能家居最终代码

作者:互联网

#include <DFRobot_SSD1306_I2C.h> //导库
#include <Servo.h>

// 创建舵机对象
Servo myservo;  // 定义Servo对象来控制
int pos = 0;    // 角度存储变量

DFRobot_SSD1306_I2C oled12864; //创建oled对象
int incline = A0;//倾斜传感器引脚
int sy = A2;//蜂鸣器引脚
int l = A2;//温度感应引脚
int humity = 4;//水滴感引引脚
int human = 4;//人体感应引脚


const int TrigPin = 2;
const int EchoPin = 5;
int dist = -1;//记录超声波测的距离
int incl = -1;//记录倾斜程度

//获取超声波传感器获得的距离
void getDist(){
    digitalWrite(8, HIGH);
    digitalWrite(TrigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(TrigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(TrigPin, LOW);
    dist = pulseIn(EchoPin, HIGH) / 58.0; 
    //有人靠近门口就开灯
    if(dist < 20) digitalWrite(7, HIGH);
    else digitalWrite(7, LOW);
}

//获取倾斜传感器获得的倾斜程度
void getIncl(){
    //倾斜程度
    incl = analogRead(incline);
    oled12864.setCursorLine(1);
    oled12864.printLine(String("incline:") + String(incl) + String("cd"));//1022
    digitalWrite(3, LOW);
    if(incl > 750){
      tone(3, 584, 3000);
    }else{
      noTone(3);
      digitalWrite(3, LOW);
    }
}

//将数据显示在屏幕上
void show(){
    int x = analogRead(sy);//声音的大小
    float numn = 1.0*(analogRead(l)-32)*5/9;//温度,单位摄氏度
    int humi = analogRead(humity);//水滴感应
    int huma = analogRead(human);//感应人体
    Serial.println(humi);
    
    oled12864.setCursorLine(2);
    oled12864.printLine(String("noisy:") + String(x) + String("hz"));//声音
    
    oled12864.setCursorLine(3);
    oled12864.printLine(String("distance :") + String(dist) + String("cm"));//距离
    
    delay(500);
    oled12864.fillScreen(0);//清屏
    
    oled12864.setCursorLine(1);
    oled12864.printLine(String("Tempera:") + String(numn) + String("c"));//温度
    if(numn >= 18){//如果温度超过23度,就开启风扇
      digitalWrite(8, LOW);
    }else{
      digitalWrite(8, HIGH);
    }
    
    oled12864.setCursorLine(2);   
    oled12864.printLine(String("humidity:") + String(humi) + String("rh"));//水滴感引
  
    delay(2000);
    oled12864.fillScreen(0);//清屏
}

//获取所有传感器的值
void getValue(){
    getDist();
    getIncl();
}

void setup() {
    Serial.begin(9600);
    myservo.attach(A1);  // 控制线连接数字9
    pinMode(TrigPin, OUTPUT);
    pinMode(EchoPin, INPUT);
    oled12864.begin(0x3c);//定义地址
    Serial.begin(9600);
    pinMode( incline,INPUT);
    pinMode( sy,INPUT);
    pinMode( l,INPUT);
    pinMode( 7,OUTPUT);//距离灯
    pinMode( 8,OUTPUT);//风扇
    pinMode( 3,OUTPUT);//蜂鸣器
    pinMode( A0,INPUT);//倾斜传感器
    pinMode( humity,INPUT);//雨滴传感器
}

void loop() {  
    boolean isRain = digitalRead(humity);
    if(isRain == 1){
      //Serial.println("rain ing");
      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);                       // 等待转动到指定角度
      }
    }else{
      //Serial.println("no");
    }

    
    
    
    getValue();//获取所有传感器的值,并进行控制

    show();//将数据显示在屏幕上
}

标签:oled12864,String,int,digitalWrite,代码,智能家居,void,最终,pinMode
来源: https://www.cnblogs.com/xiaoranya/p/16433767.html