solar_charger/soler_chager.ino

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);
}
}