ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

智能家居最终代码

2022-07-01 11:06:23  阅读:141  来源: 互联网

标签:oled12864 String int digitalWrite 代码 智能家居 void 最终 pinMode


#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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有