|
本帖最后由 galaxy 于 2017-1-31 22:40 编辑
由 NANO 組成大雜燴
// include the library code:
#include <Wire.h> //RTC
#include <RTClib.h> //RTC
RTC_DS1307 RTC;
#include <LiquidCrystal.h> //LCD
#include <DHT22.h> //溫濕度
#define DHT22_PIN_1 13
DHT22 myDHT22_1(DHT22_PIN_1);
const int TrigPin =A2; //超音波
const int EchoPin =A3; //超音波
float cm; //超音波
float input_voltage = 0.0; //電壓表
float temp=0.0; //電壓表
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd1(6, 7, 2, 3, 4, 5);
LiquidCrystal lcd2(6, 8, 2, 3, 4, 5);
LiquidCrystal lcd3(6, 9, 2, 3, 4, 5);
LiquidCrystal lcd4(6,10, 2, 3, 4, 5);
LiquidCrystal lcd5(6,11, 2, 3, 4, 5);
LiquidCrystal lcd6(6,12, 2, 3, 4, 5);
void setup() {
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
RTC.adjust(DateTime(__DATE__, __TIME__)); }
analogReference(EXTERNAL); //使用aref引腳電壓作為基準源;LM35及電壓表都用得到
lcd1.begin(7,2);
lcd2.begin(7,2);
lcd3.begin(7,2);
lcd4.begin(7,2);
lcd5.begin(7,2);
lcd6.begin(7,2);
pinMode(TrigPin, OUTPUT); //超音波
pinMode(EchoPin, INPUT); //超音波
pinMode(A0,INPUT); // D10 設為輸入 (焦電式感應模組)
pinMode(A1,OUTPUT); // D12 設為輸出 (蜂鳴器)
}
void loop() {
DateTime now = RTC.now(); //LCD1
unsigned long tmp;
tmp = now.year();
lcd1.setCursor(2, 0);
lcd1.print(tmp);
tmp = now.month();
if (now.month() < 10) {
lcd1.setCursor(1, 1);
lcd1.print('0');
lcd1.setCursor(2, 1);
lcd1.print(tmp); }
lcd1.setCursor(3, 1);
lcd1.print('-');
tmp = now.day();
if (now.day() < 10) {
lcd1.setCursor(4, 1);
lcd1.print('0');
lcd1.setCursor(5, 1);
lcd1.print(tmp); }
tmp = now.hour(); //LCD4
if (now.hour() < 10) {
lcd4.setCursor(2, 0);
lcd4.print('0');
lcd4.setCursor(3, 0);
lcd4.print(tmp);}
else {
lcd4.setCursor(3, 0);
lcd4.print(tmp);}
tmp = now.minute();
if (now.minute() < 10) {
lcd4.setCursor(1, 1);
lcd4.print('0');
lcd4.setCursor(2, 1);
lcd4.print(tmp); }
else {
lcd4.setCursor(1, 1);
lcd4.print(tmp); }
lcd4.setCursor(3, 1);
lcd4.print(':');
tmp = now.second();
if (now.second() < 10) {
lcd4.setCursor(4, 1);
lcd4.print('0');
lcd4.setCursor(5, 1);
lcd4.print(tmp);}
else {
lcd4.setCursor(4, 1);
lcd4.print(tmp); }
DHT22_ERROR_t errorCode;//DHT22 溫濕度
errorCode = myDHT22_1.readData();
switch(errorCode)
case DHT_ERROR_NONE:
lcd2.setCursor(1,0);
lcd2.print(myDHT22_1.getTemperatureC());
lcd2.print(char(223));
lcd2.print("C");
lcd2.setCursor(1,1);
lcd2.print(myDHT22_1.getHumidity());
lcd2.print("%");
digitalWrite(TrigPin, LOW);//超音波測距
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
int timer=-500;
cm = pulseIn(EchoPin, HIGH) / 58.0;
cm = (int(cm * 100.0)) / 100.0;
delay(500);
if(millis() > timer +500)
lcd5.setCursor(3,0);
lcd5.print("CM");
lcd5.setCursor(1,1);
lcd5.print(cm);
lcd5.home();
timer=millis()+500;
int n = analogRead(A6); //LM35溫度計--讀取A0口的電壓值
float vol = n * (3.3 / 1023.0*100); //使用浮點數存儲溫度數據,溫度數據由電壓值換算得到(電壓3.3V)
lcd3.setCursor(1,0);
lcd3.print("Temp");
lcd3.setCursor(6,1);
lcd3.print(char(223));
lcd3.print("C");
lcd3.setCursor(1,1);
lcd3.print(vol);
int analog_value = analogRead(A7);// 0~5V 電壓表
input_voltage = (analog_value * 5.0) / 1024.0;
if (input_voltage < 0.1)
{ input_voltage=0.0; }
lcd6.setCursor(1, 0);
lcd6.print("Volt(V) ");
lcd6.setCursor(1,1);
lcd6.print(input_voltage);
int x =digitalRead(A0); //焦電式感應模組--建一個變量x,讀取 A0 的狀態
if (x==HIGH) //判斷x是否為高電位,如果是繼續執行,不是則跳過
//digitalWrite(A1,HIGH);
if (x==LOW)
digitalWrite(A1,LOW);
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|