天天看點

arduino舵機門鎖 紅外遙控控制 刷卡 diy

溫濕度 檢測 能夠顯示 i2c12864

詳情https://g.alicdn.com/idleFish-F2e/app-basic/item.html?itemid=573263642630&ut_sk=1.WxEIBJ%252FiSUoDADyw2O%252FQUZqV_21407387_1538638809582.Copy.detail.573263642630.1977947810&forceFlush=1

一下代碼部分

double Fahrenheit(double celsius)

{

return 1.8 * celsius + 32;

} //攝氏溫度度轉化為華氏溫度

double Kelvin(double celsius)

{

return celsius + 273.15;

} //攝氏溫度轉化為開氏溫度

// 露點(點在此溫度時,空氣飽和并産生露珠)

// 參考: [url=http://wahiduddin.net/calc/density_algorithms.htm]http://wahiduddin.net/calc/density_algorithms.htm[/url]

double dewPoint(double celsius, double humidity)

{

double A0= 373.15/(273.15 + celsius);

double SUM = -7.90298 * (A0-1);

SUM += 5.02808 * log10(A0);

SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;

SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;

SUM += log10(1013.246);

double VP = pow(10, SUM-3) * humidity;

double T = log(VP/0.61078); // temp var

return (241.88 * T) / (17.558-T);

}

// 快速計算露點,速度是5倍dewPoint()

// 參考: [url=http://en.wikipedia.org/wiki/Dew_point]http://en.wikipedia.org/wiki/Dew_point[/url]

double dewPointFast(double celsius, double humidity)

{

double a = 17.271;

double b = 237.7;

double temp = (a * celsius) / (b + celsius) + log(humidity/100);

double Td = (b * temp) / (a - temp);

return Td;

}

#include <LiquidCrystal.h>

#include <RSCG12864B.h>

#include <RFID.h>

#include <SPI.h>

#include <Servo.h>

#include <IRremote.h>

#include <dht11.h>

dht11 DHT11;

#define DHT11PIN 2

Servo myservo;

int PIN_SENSOR = 4;

int d=5;

int m=(float)DHT11.temperature;

int RECV_PIN = 3;//紅外接收輸入

decode_results results;

IRrecv irrecv(RECV_PIN);

extern uint8_t SmallFont[];

RFID rfid(10,8); //D10–接上SDA、D8–接RST D13–接上SCK D11–接上MOSI D12–接上MISO RQ不接

unsigned char serNum[5];

void setup()

{

int chk = DHT11.read(DHT11PIN);

unsigned char j;

char chn[]={0xBB, 0xB6,0xD3, 0xAD,0xBB, 0xD8,0xC0, 0xB4 }; //歡迎回來

char f1[]={ 0xBF, 0xAA,0xC3, 0xC5,0xD6, 0xD0,0, }; //開門中

char f2[]={ 0xC7, 0xEB,0xC7, 0xC3, 0xC3, 0xC5,0,}; //請敲門

char f3[]={ 0xBE, 0xDC, 0xBE, 0xF8,0xB9, 0xE3,0xB8, 0xE6,0,}; //拒絕廣告

char f4[]={0xCA, 0xD2,0xC4, 0xDA,0xCE, 0xC2,0xB6, 0xC8,0, }; //shinei溫度

char f5[]={ 0xCA, 0xAA,0xB6, 0xC8 ,0,}; //濕度

char f6[]={ 0xC7, 0xEB, 0xCB, 0xA2, 0xBF, 0xA8,0, }; //請刷卡

char f7[]={ 0xA1, 0xE6,0, }; //℃

Serial.begin(9600);

Serial.begin(9600);//序列槽用來讀取需要添加的卡号,然後手動寫到程式裡

RSCG12864B.begin();//序列槽初始化

RSCG12864B.brightness(255);//螢幕亮度

myservo.attach(9);//舵機針腳位9

myservo.write(0); //舵機初始化0度

SPI.begin();

rfid.init();

irrecv.enableIRIn(); // Start the receiver

pinMode(d,OUTPUT);

digitalWrite(d,HIGH);

pinMode(PIN_SENSOR, INPUT);

RSCG12864B.clear();

RSCG12864B.print_string_16_xy(30,0,f3);//坐标0,15,顯示chn裡的内容

RSCG12864B.print_string_16_xy(37,15,f2);//坐标0,15,顯示chn裡的内容

RSCG12864B.print_string_16_xy(37,30,f6);//坐标0,15,顯示chn裡的内容

RSCG12864B.print_string_16_xy(5,45,f4);//坐标0,15,顯示chn裡的内容

RSCG12864B.print_string_16_xy(103,45,f7);//坐标0,15,顯示chn裡的内容

RSCG12864B.font_revers_on();
 char text[5];
           

{

dtostrf(DHT11.temperature,5,2,text);//dtostrf函數很好用,可以将字元變成字元串顯示。

RSCG12864B.print_string_12_xy(70,47,text);//定義字元串坐标。

}

delay(1000); 
           

}

void loop()

{

int chk = DHT11.read(DHT11PIN);

unsigned charj;

char chn[]={0xBB, 0xB6,0xD3, 0xAD,0xBB, 0xD8,0xC0, 0xB4 ,0, }; //歡迎回來

char f1[]={ 0xBF, 0xAA,0xC3, 0xC5,0xD6, 0xD0 ,0, }; //開門中

char f2[]={ 0xC7, 0xEB,0xC7, 0xC3, 0xC3, 0xC5,0,}; //請敲門

char f3[]={ 0xBE, 0xDC, 0xBE, 0xF8,0xB9, 0xE3,0xB8, 0xE6,0,}; //拒絕廣告

char f4[]={0xCA, 0xD2,0xC4, 0xDA,0xCE, 0xC2,0xB6, 0xC8,0, }; //shinei溫度

char f5[]={ 0xCA, 0xAA,0xB6, 0xC8,0, }; //濕度

char f6[]={ 0xC7, 0xEB, 0xCB, 0xA2, 0xBF, 0xA8,0, }; //請刷卡

char f7[]={ 0xA1, 0xE6,0, }; //℃

char f8[]={ 0xC7, 0xEB,0xC1, 0xBD,0xC3, 0xEB, 0xC4, 0xDA, 0xCD, 0xC6,0xC3, 0xC5,0xBD, 0xF8 ,0, }; //請兩秒内推門進

char f9[]={ 0xB3, 0xF4,

0xBF, 0xA8,

0xC4, 0xC3,

0xBF, 0xAA,

0xA3, 0xAC,

0xB2, 0xBB,

0xC8, 0xC3,

0xBD, 0xF8,0, }; //把你的臭卡拿開

digitalWrite(5,HIGH);

if (irrecv.decode(&results))
           

{

if (results.value == results.value)

{

Serial.println(results.value, HEX);

Serial.println(“2”);

myservo.write(180);

digitalWrite(6,HIGH);

RSCG12864B.clear();

RSCG12864B.print_string_16_xy(0,0,f8);//坐标0,15,顯示chn裡的内容

delay(3500);

RSCG12864B.clear();

RSCG12864B.print_string_16_xy(30,0,f3);//坐标0,15,顯示chn裡的内容

RSCG12864B.print_string_16_xy(37,15,f2);//坐标0,15,顯示chn裡的内容

RSCG12864B.print_string_16_xy(37,30,f6);//坐标0,15,顯示chn裡的内容

RSCG12864B.print_string_16_xy(5,45,f4);//坐标0,15,顯示chn裡的内容

RSCG12864B.print_string_16_xy(103,45,f7);//坐标0,15,顯示chn裡的内容

char text[5];

{

dtostrf(DHT11.temperature,5,2,text);//dtostrf函數很好用,可以将字元變成字元串顯示。

RSCG12864B.print_string_12_xy(70,47,text);//定義字元串坐标。

}

digitalWrite(6,LOW);

myservo.write(0);

irrecv.resume();

}

delay(100);

irrecv.resume();

}

long randNumber = random(0, 20);

unsigned char i,tmp;

unsigned char status;

unsigned char str[MAX_LEN];

unsigned char RC_size;

//找卡

rfid.isCard();

//讀卡号

if (rfid.readCardSerial())

{

Serial.print("your card id is : “);

Serial.print(rfid.serNum[0]);

Serial.print(” , “);

Serial.print(rfid.serNum[1],BIN);

Serial.print(” , “);

Serial.print(rfid.serNum[2],BIN);

Serial.print(” , “);

Serial.print(rfid.serNum[2],BIN);

Serial.print(” , “);

Serial.print(rfid.serNum[4],BIN);

Serial.println(” ");

//下面是改卡号區域

if(rfid.serNum[0]==1||rfid.serNum[0]==19||rfid.serNum[0]==195||rfid.serNum[0]==147||rfid.serNum[0]==99||rfid.serNum[0]==67||rfid.serNum[0]==179||rfid.serNum[0]==225){//第一道篩選

{
     
    if(rfid.serNum[1]==2||rfid.serNum[1]==235||rfid.serNum[1]==152||rfid.serNum[1]==141||rfid.serNum[1]==12||rfid.serNum[1]==164||rfid.serNum[1]==113||rfid.serNum[1]==100)//第二道篩選,支援一人一号
    {
   if(rfid.serNum[2]==3||rfid.serNum[2]==139||rfid.serNum[2]==30||rfid.serNum[2]==29||rfid.serNum[2]==31||rfid.serNum[2]==109)
    {
       if(rfid.serNum[3]==3||rfid.serNum[3]==60||rfid.serNum[3]==63||rfid.serNum[3]==109)
 
      Serial.println("Welcome test 1"); 
      for(int i=0;i<100;i++ )
      myservo.write(180);
      digitalWrite(6,HIGH);  
    }
    if(rfid.serNum[0]==1||rfid.serNum[0]==19||rfid.serNum[0]==195||rfid.serNum[0]==147||rfid.serNum[0]==99||rfid.serNum[0]==67||rfid.serNum[0]==179||rfid.serNum[0]==225&&rfid.serNum[1]==2||rfid.serNum[1]==235||rfid.serNum[1]==100||rfid.serNum[1]==152||rfid.serNum[1]==141||rfid.serNum[1]==12||rfid.serNum[1]==164||rfid.serNum[1]==113&&rfid.serNum[2]==3||rfid.serNum[2]==139||rfid.serNum[2]==30||rfid.serNum[2]==29||rfid.serNum[2]==109||rfid.serNum[2]==31&&rfid.serNum[3]==3||rfid.serNum[3]==60||rfid.serNum[3]==109||rfid.serNum[3]==63)
    
    {

      Serial.println(DHT11.temperature);
      myservo.write(180); 
      digitalWrite(6,HIGH); 
      RSCG12864B.clear();
RSCG12864B.print_string_16_xy(15,15,chn);//坐标0,15,顯示chn裡的内容
RSCG12864B.print_string_16_xy(15,30,f1);//坐标0,15,顯示chn裡的内容
 delay(2500);
 myservo.write(0);
   digitalWrite(6,LOW);
  Serial.println("closed1");
    }
  }       
 else
 {
  myservo.write(0);
   digitalWrite(6,LOW);
  Serial.println("closed");
  RSCG12864B.clear();
  RSCG12864B.print_string_16_xy(0,0,f9);//坐标0,15,顯示chn裡的内容 
           

delay(2500);

}

irrecv.resume();

RSCG12864B.clear();

RSCG12864B.print_string_16_xy(30,0,f3);//坐标0,15,顯示chn裡的内容

RSCG12864B.print_string_16_xy(37,15,f2);//坐标0,15,顯示chn裡的内容

RSCG12864B.print_string_16_xy(37,30,f6);//坐标0,15,顯示chn裡的内容

RSCG12864B.print_string_16_xy(5,45,f4);//坐标0,15,顯示chn裡的内容

RSCG12864B.print_string_16_xy(103,45,f7);//坐标0,15,顯示chn裡的内容

RSCG12864B.font_revers_on();
 char text[5];
           

{

dtostrf(DHT11.temperature,5,2,text);//dtostrf函數很好用,可以将字元變成字元串顯示。

RSCG12864B.print_string_12_xy(70,47,text);//定義字元串坐标。

}

}
}
           

}

if (!rfid.readCardSerial())

rfid.halt(); //休眠

}