I have a project to make a smart home system. I made a wide range of functions, such as doorbell, remote, fan control etc. All functions were tested and feasible. However, I don't know how to combine a variety of coding in one Arduino code?
Could someone/a teacher help me? Thank you very much.
doorbell
#include "Buzzer.h"
#include "Sounds.h"
#include "PH20Port.h"
PH20Port buzzerplay(P9);
#include "Buzzer.h"
int touch_PIN2 = 2;
Buzzer mBuzzer = Buzzer(buzzerplay.pin1());
Buzzer buzzer(buzzerplay.pin1());
void setup() {
pinMode(touch_PIN2,INPUT);
}
void loop() {
if (digitalRead(touch_PIN2)==HIGH) {
mBuzzer.bendTones(1500, 2500, 1.05, 20, 8);
mBuzzer.bendTones(2499, 1500, 1.05, 25, 8);
} else {
buzzer.noTone();
}
}
#include "EM_TTP229.h"
EM_TTP229 mTTP229;
int SCLPin = 9, SDOPin = 8;
String Read_Key () {
String key_name = mTTP229.GetKeyMap();
char * result = (char *)key_name.c_str();
return result;
}
#include <Servo.h>
String item;
volatile int number;
String password[]={"0", "0", "0"};
Servo servo_12;
void setup(){
item = "";
number = 0;
mTTP229.initTTP229(SCLPin, SDOPin);
Serial.begin(9600);
servo_12.attach(12);
}
void loop(){
item = Read_Key();
if (item == "1" && number == 0) {
Serial.println(item);
password[(int)(0)] = item;
number = 1;
delay(100);
}
if (item == "2" && number == 1) {
Serial.println(item);
password[(int)(1)] = item;
number = 2;
delay(100);
}
if (item == "3" && number == 2) {
Serial.println(item);
password[(int)(2)] = item;
number = 3;
delay(100);
}
if (password[(int)(0)] == "1" && (password[(int)(1)] == "2" && password[(int)(2)] == "3")) {
Serial.println("hello");
servo_12.write(0);
delay(2000);
password[(int)(0)] = "0";
password[(int)(1)] = "0";
password[(int)(2)] = "0";
number = 0;
} else {
servo_12.write(90);
delay(20);
}
}
remote_control
#include "IR_remote.h"
#include "keymap.h"
IRremote ir(4);
#include <Servo.h>
Servo servo_12;
Servo servo_13;
void setup(){
ir.begin();
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
servo_12.attach(12);
servo_13.attach(13);
}
void loop(){
// 按下1键,同时打开风扇和黄灯
if (ir.getIrKey(ir.getCode(),2) == EM_IR_KEYCODE_1) {
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
}
// 按下2键,同时关闭风扇和黄灯
if (ir.getIrKey(ir.getCode(),2) == EM_IR_KEYCODE_2) {
digitalWrite(5,LOW);
digitalWrite(6,LOW);
}
// 按下3键,打开门
if (ir.getIrKey(ir.getCode(),2) == EM_IR_KEYCODE_4) {
servo_12.write(90);
delay(20);
}
// 按下4键,关闭门
if (ir.getIrKey(ir.getCode(),2) == EM_IR_KEYCODE_3) {
servo_12.write(0);
delay(20);
}
// 按下5键,打开窗
if (ir.getIrKey(ir.getCode(),2) == EM_IR_KEYCODE_6) {
servo_13.write(90);
delay(20);
}
// 按下4键,关闭窗
if (ir.getIrKey(ir.getCode(),2) == EM_IR_KEYCODE_5) {
servo_13.write(0);
delay(20);
}
}
Temperature_and_humidity
#include "SoftI2CMaster.h"
#include "LiquidCrystal_SoftI2C.h"
#include "DHT.h"
LiquidCrystal_SoftI2C mylcd(0x27,16,2,7,A0);
DHT dhtA3(A3, 11);
void setup(){
Serial.begin(9600);
dhtA3.begin();
mylcd.begin(16, 2);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
}
void loop(){
float t = dhtA3.readTemperature();
float h = dhtA3.readHumidity();
mylcd.setCursor(0, 0);
mylcd.print("Temp: ");
mylcd.print(dhtA3.readTemperature());
mylcd.print("C");
Serial.print("Temp: ");
Serial.print(t);
Serial.println(" *C ");
mylcd.setCursor(0, 1);
mylcd.print("Humdity:");
mylcd.print(dhtA3.readHumidity());
mylcd.print("%");
Serial.print("Hum: ");
Serial.print(h);
Serial.print(" %\t");
delay(3000);
if (dhtA3.readTemperature() > 30 || dhtA3.readHumidity() > 70) {
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
} else {
digitalWrite(5,LOW);
digitalWrite(6,LOW);
}
}
Rain
#include <Wire.h>
#include "TM1650.h"
#include <Servo.h>
TM1650 tm_4display;
volatile int _light;
volatile int yudi;
volatile int item;
Servo servo_13;
void setup(){
Serial.begin(9600);
Wire.begin();
tm_4display.init();
_light = 0;
yudi = 0;
item = 0;
tm_4display.clear();
servo_13.attach(13);
}
void loop(){
_light = analogRead(A2);
// 将连接在A1接口的雨滴传感器的返回值赋予yudi变量
yudi = analogRead(A1);
tm_4display.displayString(_light);
Serial.print(String(" light:") + String(_light));
Serial.print(",");
Serial.println(String("yudi:") + String(yudi));
delay(500);
// 判断光线模拟值是否大于100,如果是打开窗户;否则,关闭窗户
if (_light > 100) {
// 雨滴传感器感应都雨水时,数值会变小,否则数值变大。此处判断雨滴模拟返回值是否小于200,如果是,则关闭窗户;否则打开窗户
if (yudi < 300) {
servo_13.write(90);
delay(300);
} else {
servo_13.write(0);
delay(3000);
}
} else {
servo_13.write(90);
delay(20);
}
}