Сб янв 04, 2025 12:44:29
Сб янв 04, 2025 14:11:58
const (int16_t )(DATA_16[]={0xf3ed,0xf40a, ...
Сб янв 04, 2025 14:48:11
Сб янв 04, 2025 17:25:19
Сб янв 04, 2025 18:55:09
Сб янв 04, 2025 19:00:08
Сб янв 04, 2025 19:19:19
Сб янв 04, 2025 19:34:11
Чт янв 09, 2025 20:17:42
Чт фев 20, 2025 17:23:28
const int zamokPin = 2; // Цифровой пин "замок"
const int fotoPin = A0; // Аналоговый пин "фото"
const int podgotovkaPin = 3; // Пин "подготовка"
const int otkritiePin = 4; // Пин "открытие"
const int podachaPin = 5; // Пин "подача"
const int alarmPin = 6; // Пин "аларм"
// Переменные для хранения времени
unsigned long previousMillis = 0; // Время последнего изменения состояния
unsigned long interval = 0; // Интервал для таймеров
// Состояния системы
enum SystemState {
STATE_IDLE, // Ожидание
STATE_CHECK_ZAMOK, // Проверка входа "замок"
STATE_CHECK_FOTO, // Проверка входа "фото"
STATE_ALARM, // Состояние "аларм"
STATE_PODACHA, // Состояние "подача"
STATE_PODGOTOVKA, // Состояние "подготовка"
STATE_OTKRITIE, // Состояние "открытие"
};
SystemState currentState = STATE_IDLE; // Текущее состояние системы
void setup() {
// Настройка пинов
pinMode(zamokPin, INPUT);
pinMode(fotoPin, INPUT);
pinMode(podgotovkaPin, OUTPUT);
pinMode(podachaPin, OUTPUT);
pinMode(otkritiePin, OUTPUT);
pinMode(alarmPin, OUTPUT);
// Инициализация выходов
digitalWrite(podachaPin, LOW);
digitalWrite(podgotovkaPin, LOW);
digitalWrite(podachaPin, LOW);
digitalWrite(otkritiePin, LOW);
digitalWrite(alarmPin, LOW);
}
void loop() {
unsigned long currentMillis = millis(); // Текущее время
// Обработка состояний
switch (currentState) {
case STATE_IDLE:
// Начальное состояние, переход к проверке "замок"
currentState = STATE_CHECK_ZAMOK;
break;
case STATE_CHECK_ZAMOK:
if (digitalRead(zamokPin)) {
// Если флаг поднят, переходим в состояние "аларм"
digitalWrite(alarmPin, HIGH);
digitalWrite(podgotovkaPin, HIGH);
currentState = STATE_ALARM;
} else {
// Если флаг опущен, включаем "подача" и ждем 3 секунды
digitalWrite(alarmPin, LOW);
digitalWrite(podgotovkaPin, LOW);
digitalWrite(podachaPin, HIGH);
previousMillis = currentMillis;
interval = 1000; // 1 секунды
currentState = STATE_PODACHA;
}
break;
case STATE_PODACHA:
if (currentMillis - previousMillis >= interval) {
// По истечении 1 секунды переходим к проверке "фото"
digitalWrite(podachaPin, LOW);
currentState = STATE_CHECK_FOTO;
}
break;
case STATE_CHECK_FOTO:
if (analogRead(fotoPin) <= 800) { // 4 В +-= 800 (при 5 В = 1023)
// Если флаг поднят, включаем "подготовку" и ждем 10 секунд
(digitalWrite(podgotovkaPin, HIGH));
delay(500);
(digitalWrite(otkritiePin, HIGH));
delay(500);
(digitalWrite(otkritiePin, LOW));
previousMillis = currentMillis;
interval = 10000; // 1 секунды
currentState = STATE_PODGOTOVKA;
}
break;
case STATE_PODGOTOVKA:
if (currentMillis - previousMillis >= interval) {
// По истечении 10 секунд проверяем "замок"
if (digitalRead(zamokPin)) {
digitalWrite(alarmPin, HIGH);
}
// Включаем "открытие" и ждем 3 секунды
digitalWrite(otkritiePin, HIGH);
previousMillis = currentMillis;
interval = 1000; // 1 секунды
currentState = STATE_OTKRITIE;
}
break;
case STATE_OTKRITIE:
if (currentMillis - previousMillis >= interval) {
// По истечении 3 секунд выключаем "открытие" и ждем 2 секунды
digitalWrite(otkritiePin, LOW);
previousMillis = currentMillis;
interval = 2000; // 2 секунды
currentState = STATE_CHECK_ZAMOK; // Возврат к проверке "zamok"
}
break;
case STATE_ALARM:
// Ожидание опускания флага на "замок"
if (!digitalRead(zamokPin)) {
digitalWrite(alarmPin, LOW);
currentState = STATE_CHECK_ZAMOK; // Возврат к проверке "замок"
}
break;
}
}
Чт фев 20, 2025 18:58:18
Чт фев 20, 2025 20:06:17
Пт фев 21, 2025 12:46:20
Пт фев 21, 2025 15:32:48
Пт фев 21, 2025 16:24:00
Пт фев 21, 2025 17:41:03
loop
currentState
Пн фев 24, 2025 11:11:58
loop
currentState
Пн фев 24, 2025 12:17:40
Ср мар 05, 2025 01:46:41
Ср мар 05, 2025 04:50:35