167 lines
3.3 KiB
C++
167 lines
3.3 KiB
C++
#include <Wire.h>
|
|
#include <LiquidCrystal_I2C.h>
|
|
#include <DHT.h>
|
|
#include <BH1750.h>
|
|
|
|
#define DHT11_PIN 7
|
|
#define photoL1 A0
|
|
#define LED 3
|
|
#define button 2
|
|
#define buzzer 6
|
|
#define servoPin 10
|
|
|
|
BH1750 lightMeter;
|
|
DHT dht(DHT11_PIN, DHT11);
|
|
volatile int buttonState;
|
|
volatile int lightReadL1 = 0;
|
|
int count;
|
|
LiquidCrystal_I2C lcd(0x27, 16, 2);
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(9600);
|
|
Serial.print("setting up!\n");
|
|
pinMode(LED, OUTPUT); //initialize digital pin LED as an output.
|
|
pinMode(button, INPUT);
|
|
pinMode(buzzer, OUTPUT);
|
|
pinMode(servoPin,OUTPUT);
|
|
Serial.print("init lcd\n");
|
|
lcd.init();
|
|
lcd.backlight();
|
|
lcd.setCursor(0,0);
|
|
lcd.printstr("Hello, World!");
|
|
lcd.setCursor(0,1);
|
|
lcd.printstr("hello, Roald!");
|
|
|
|
dht.begin(20);
|
|
|
|
Serial.print("done setting up!\n");
|
|
//Intialize the 12C bus
|
|
Wire.begin();
|
|
//On esp8266 you can select SCL and SDA pins using Wire.begin
|
|
//For Wemos /Lolin D1 Mini Pro and the Ambient Light shield use
|
|
Wire.begin();
|
|
lightMeter.begin();
|
|
Serial.println(F("BH1750 Test begin"));
|
|
}
|
|
|
|
void loop(){
|
|
//Serial.print("[");
|
|
//Serial.print(count);
|
|
//Serial.print("] hey\n");
|
|
|
|
|
|
Serial.println("0");
|
|
servopulse(servoPin,0);
|
|
delay(500);
|
|
Serial.println("90");
|
|
servopulse(servoPin,90);
|
|
delay(500);
|
|
Serial.println("180");
|
|
servopulse(servoPin,180);
|
|
delay(500);
|
|
|
|
|
|
lightReadL1 = analogRead(photoL1);
|
|
if (lightReadL1 > 300){
|
|
digitalWrite(LED, HIGH);
|
|
}
|
|
else{
|
|
digitalWrite(LED, LOW);
|
|
}
|
|
|
|
float lux = lightMeter.readLightLevel();
|
|
float hum = dht.readTemperature();
|
|
float temp = dht.readHumidity();
|
|
{
|
|
Serial.print("hum: ");
|
|
Serial.print(hum);
|
|
Serial.print(" temp: ");
|
|
Serial.print(dht.convertCtoF(temp));
|
|
Serial.print(" L1: ");
|
|
Serial.print(lightReadL1);
|
|
Serial.print(" PanL: ");
|
|
Serial.print(lux);
|
|
Serial.println("lx");
|
|
delay(50);
|
|
}
|
|
|
|
//delay(100);
|
|
|
|
//blink();
|
|
|
|
buttonState = digitalRead(button);
|
|
if(buttonState == 0) {
|
|
digitalWrite(LED, HIGH);
|
|
birthdaySong();
|
|
} else {
|
|
digitalWrite(LED, LOW);
|
|
}
|
|
//delay(100);
|
|
|
|
//count++;
|
|
}
|
|
|
|
void birthdaySong() {
|
|
tone(buzzer, 294);
|
|
delay(250);
|
|
tone(buzzer, 440);
|
|
delay(250);
|
|
tone(buzzer, 392);
|
|
delay(250);
|
|
tone(buzzer, 532);
|
|
delay(250);
|
|
tone(buzzer, 494);
|
|
delay(500);
|
|
tone(buzzer, 392);
|
|
delay(250);
|
|
tone(buzzer, 440);
|
|
delay(250);
|
|
tone(buzzer, 392);
|
|
delay(250);
|
|
noTone(buzzer);
|
|
tone(buzzer, 587);
|
|
delay(250);
|
|
tone(buzzer, 532);
|
|
delay(500);
|
|
tone(buzzer, 392);
|
|
delay(250);
|
|
tone(buzzer, 784);
|
|
delay(250);
|
|
tone(buzzer, 659);
|
|
delay(250);
|
|
tone(buzzer, 532);
|
|
delay(250);
|
|
tone(buzzer, 494);
|
|
delay(250);
|
|
tone(buzzer, 440);
|
|
delay(250);
|
|
tone(buzzer, 698);
|
|
delay(375);
|
|
tone(buzzer, 659);
|
|
delay(250);
|
|
tone(buzzer, 532);
|
|
delay(250);
|
|
tone(buzzer, 587);
|
|
delay(250);
|
|
tone(buzzer, 532);
|
|
delay(500);
|
|
noTone(buzzer);
|
|
}
|
|
|
|
void blink()
|
|
{
|
|
digitalWrite(LED,HIGH); //turn the LED on (HIGH is the voltage level
|
|
delay(1000); //wait for a second
|
|
digitalWrite(LED,LOW); //turn the LED off by making the voltage LOW
|
|
delay(1000); //wait for a second
|
|
}
|
|
void servopulse(int pin, int myangle){
|
|
int pulsewidth = map(myangle, 0, 180, 500, 2500);
|
|
for (int i = 0; i < 10; i++){
|
|
digitalWrite(pin,HIGH);
|
|
delayMicroseconds(pulsewidth);
|
|
digitalWrite(pin,LOW);
|
|
delay(20-pulsewidth/1000);
|
|
}
|
|
}
|