// подключаем библиотеку для работы с сервоприводами #include // определим номера используемых пинов // сенсор освещенности #define LIGHT_PIN A0 // чувствительность к свету #define POT_PIN A5 // пин сервопривода #define SERV_PIN 3 // пин пищалки #define BUZZER_PIN 4 // определим тип «действие» enum Command { CMD_NONE = 0, CMD_OPEN = 1, CMD_CLOSE = 2 }; // в начале программы мы не знаем открыты жалюзи или нет int cmd = CMD_NONE; // создадим объект для управления сервоприводом постоянного вращения Servo srv; void setup() { // сообщаем пользователю, что мы запустились тройным пиком tone(BUZZER_PIN, 500, 100); delay(200); tone(BUZZER_PIN, 500, 100); delay(200); tone(BUZZER_PIN, 500, 100); delay(200); } void loop() { int light = analogRead(LIGHT_PIN); int lightSens = analogRead(POT_PIN); Serial.print(light); Serial.print("\t\t"); Serial.print(lightSens); Serial.print("\t\t"); Serial.println(cmd); if (light > lightSens && (cmd == CMD_OPEN || cmd == CMD_NONE)) { srv.attach(SERV_PIN); srv.write(120); // ждём указанное время открытия/закрытие жалюзей delay(2000); // самый простой способ остановить серву постоянного вращения // отсоединиться от неё srv.detach(); cmd = CMD_CLOSE; } else if (light < lightSens && (cmd == CMD_CLOSE || cmd == CMD_NONE)) { srv.attach(SERV_PIN); // ждём указанное время открытия/закрытие жалюзей srv.write(30); delay(2000); // самый простой способ остановить серву постоянного вращения // отсоединиться от неё srv.detach(); cmd = CMD_OPEN; } }