-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkirill_diplom.ino
More file actions
131 lines (120 loc) · 4.16 KB
/
kirill_diplom.ino
File metadata and controls
131 lines (120 loc) · 4.16 KB
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
const int analogInputPin1 = A0;
const int analogInputPin2 = A1;
const int pin1 = 4; // Бдительность
const int pin2 = 2; // Опасность
const int pin3 = 3; // Запуск генератора
const float minVoltage = 0.5;
const float maxVoltage = 4;
const float dangerVoltage = 4.5;
const int attentionThreshold = 10;
const int dangerBuffer = 5;
const unsigned long undangerCountThreshold = 10000;
const unsigned long thirtySeconds = 30000; // 30 секунд продолжительность работы таймера на A1 и A2
const unsigned long sixtySectonds = 60000; // 5 секунд продолжительность работы таймера на A1 и A2
unsigned int undangerCount = 0;
unsigned int attentionCount = 0;
unsigned int dangerCount = 0;
unsigned long timer1StartTime = 0;
unsigned long timer2StartTime = 0;
unsigned long timer3StartTime = 0;
bool timer1Running = false;
bool timer2Running = false;
bool timer3Running = false;
void setup()
{
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
Serial.begin(9600);
}
void loop()
{
float analogVoltage = getAnalogVoltage();
Serial.println(analogVoltage);
if (analogVoltage >= minVoltage && analogVoltage <= maxVoltage)
{
if (digitalRead(pin1) == HIGH || digitalRead(pin2) == HIGH)
{
undangerCount++;
}
}
if (analogVoltage > maxVoltage && analogVoltage < dangerVoltage)
{
attentionCount++;
if (attentionCount == attentionThreshold && !timer1Running)
{
digitalWrite(pin3, LOW);
digitalWrite(pin1, HIGH);
undangerCount = 0;
timer1StartTime = millis();
timer1Running = true;
Serial.println("Attention threshold reached. Timer 1 started.");
}
}
if (analogVoltage > dangerVoltage)
{
dangerCount++;
if (digitalRead(pin1) == HIGH && dangerCount == dangerBuffer && !timer2Running)
{
digitalWrite(pin2, HIGH);
undangerCount = 0;
timer2StartTime = millis();
timer2Running = true;
Serial.println("Danger threshold reached. Timer 2 started.");
}
}
if (analogVoltage >= minVoltage && analogVoltage <= maxVoltage)
{
if (digitalRead(pin1) == HIGH && digitalRead(pin2) == HIGH && undangerCount == undangerCountThreshold || milis() - timer2StartTime >= thirtySeconds)
{
Serial.print('\n');
undangerCount = 0;
attentionCount = 0;
dangerCount = 0;
timer1Running = false;
timer2Running = false;
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, HIGH);
Serial.println("Undanger condition met. Pins 1 and 2 turned off. Pin 2 turned on.");
}
if (timer1Running && millis() - timer1StartTime >= thirtySeconds && digitalRead(pin1) == HIGH && digitalRead(pin2) == LOW)
{
digitalWrite(pin3, HIGH);
digitalWrite(pin1, LOW);
undangerCount = 0;
attentionCount = 0;
timer1Running = false;
Serial.println("Timer 1 ended. Pin 1 turned off.");
}
} else {
undangerCount = 0;
}
if (attentionCount >= 1 && !timer3Running)
{
timer3StartTime = millis();
timer3Running = true;
}
if (millis() - timer3StartTime >= sixtySectonds)
{
undangerCount = 0;
attentionCount = 0;
dangerCount = 0;
timer1Running = false;
timer2Running = false;
timer3Running = false;
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, HIGH);
}
}
float getAnalogVoltage()
{
int rawValue1 = analogRead(analogInputPin1);
int rawValue2 = analogRead(analogInputPin2);
float voltage = ((rawValue1 + rawValue2) / 2) * (5.0 / 1023.0);
return voltage;
}