-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.ino
157 lines (120 loc) · 3.5 KB
/
main.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include <Servo.h>
// 서보 모터 객체 생성
Servo EduServo1;
Servo EduServo2;
// LCD 모니터 라이브러리
#include <Wire.h> //i2c 통신
#include <LiquidCrystal_I2C.h> //LCD 1602 I2C
LiquidCrystal_I2C lcd(0x3F, 16, 2); //접근 주소 : 0x3F or 0x27
// 스위치 핀번호
int flag = 0;
int flag2 = 0;
void setup() {
EduServo1.attach(4);
EduServo2.attach(5);
lcd.begin();
lcd.backlight();
pinMode(A1, INPUT);
Serial.begin(9600);
}
void loop() {
float sensorValue;
sensorValue = analogRead(A0);
Serial.print("sensor reading = "); //시리얼 모니터
Serial.println(sensorValue);
int data = digitalRead(A1);
if(sensorValue >= 1) { // 자외선 수치 1 이상일때는 자동으로 닫음
lcd.setCursor(0, 0);
lcd.print("UV is strong");
lcd.setCursor(0, 1);
lcd.print("closing shade");
for (int i=0; i<100; i++){
EduServo1.write(i); // 0 -> 90
EduServo2.write(180-i); //180 -> 90
delay(50);
}
lcd.clear();
int d = 0;
while (d<600) { // 컨셉 : 매초 스위치 값을 10분동안 읽으면서 스위치 값이 바뀌면 수동으로 다시 열음
int dataIn = digitalRead(A1);
if (flag != dataIn) {
flag = dataIn;
lcd.setCursor(0, 0);
lcd.print("Opening shade");
lcd.setCursor(0, 1);
lcd.print("manually");
for (int i=100; i>0; i--){
EduServo1.write(i); // 90 -> 0
EduServo2.write(180-i); // 90 -> 180
delay(50);
}
lcd.clear();
}
delay(1000);
d += 1;
}
}
else if (sensorValue < 1) { // 자외선 수치 1 미만일때는 자동으로 열음
lcd.setCursor(0, 0);
lcd.print("UV is weak");
lcd.setCursor(0, 1);
lcd.print("opening shade");
for (int i=100; i>0; i--){
EduServo1.write(i); // 90 -> 0
EduServo2.write(180-i); // 90 -> 180
delay(50);
}
lcd.clear();
int d = 0;
while (d<600) { // 컨셉 : 매초 스위치 값을 10분동안 읽으면서 스위치 값이 바뀌면 수동으로 다시 닫음
int dataIn = digitalRead(A1);
if (flag != dataIn) {
flag = dataIn;
lcd.setCursor(0, 0);
lcd.print("Closing shade");
lcd.setCursor(0, 1);
lcd.print("manually");
for (int i=0; i<100; i++){
EduServo1.write(i); // 0 -> 90
EduServo2.write(180-i); //180 -> 90
delay(50);
}
lcd.clear();
}
delay(1000);
d += 1;
}
}
else if (flag != data) { // 수동으로 여닫는 기능
if (flag2 % 2 == 0) { // flag2가 짝수일떄는 수동으로 닫음
flag = data;
flag2 += 1;
lcd.setCursor(0, 0);
lcd.print("Closing shade");
lcd.setCursor(0, 1);
lcd.print("manually");
for (int i=0; i<100; i++){
EduServo1.write(i); // 0 -> 90
EduServo2.write(180-i); //180 -> 90
delay(50);
}
lcd.clear();
}
else { // flag2가 홀수일때는 수동으로 열음
flag = data;
flag2 += 1;
lcd.setCursor(0, 0);
lcd.print("Opening shade");
lcd.setCursor(0, 1);
lcd.print("manually");
for (int i=100; i>0; i--){
EduServo1.write(i); // 90 -> 0
EduServo2.write(180-i); // 90 -> 180
delay(50);
}
lcd.clear();
}
delay(60000); // 수동으로 여닫았을때는 딜레이 1분으로 설정. 자외선이 1분뒤에 엄청쎄면 닫아주려고.
}
delay(1000);
}