const int illuminationLevelPin = A3;
const int firstRoomPin = 11;
const int secondRoomPin = 9;
const int thirdRoomPin = 5;
const int illuminationModePin = 2;
int illuminationMode = LOW;
const int ldrPin = A2;
const float BETA = 3950;
const float GAMMA = 0.7;
const float RL10 = 50;
float ldrValue = 0;
const int firstRoomMotionSenserPin = 4;
const int secondRoomMotionSenserPin = 3;
const int thirdRoomMotionSenserPin = 1;
void setup() {
Serial.begin(9600);
pinMode(firstRoomPin, OUTPUT);
pinMode(secondRoomPin, OUTPUT);
pinMode(thirdRoomPin, OUTPUT);
pinMode(illuminationModePin, INPUT);
pinMode(illuminationLevelPin, INPUT);
pinMode(firstRoomMotionSenserPin, INPUT);
pinMode(secondRoomMotionSenserPin, INPUT);
pinMode(thirdRoomMotionSenserPin, INPUT);
}
void loop() {
int analogValue = analogRead(ldrPin);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
ldrValue = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
ldrValue = (ldrValue / 100916.51) * 255;
illuminationMode = digitalRead(illuminationModePin);
if (illuminationMode == LOW) {
analogWrite(firstRoomPin, digitalRead(firstRoomMotionSenserPin) * analogRead(illuminationLevelPin) / 4);
analogWrite(secondRoomPin, digitalRead(secondRoomMotionSenserPin) * analogRead(illuminationLevelPin) / 4);
analogWrite(thirdRoomPin, digitalRead(thirdRoomMotionSenserPin) * analogRead(illuminationLevelPin) / 4);
Serial.print("Light regulator: ");
Serial.println(analogRead(illuminationLevelPin) / 4);
}
else {
analogWrite(firstRoomPin, digitalRead(firstRoomMotionSenserPin) * (255 - ldrValue));
analogWrite(secondRoomPin, digitalRead(secondRoomMotionSenserPin) * (255 - ldrValue));
analogWrite(thirdRoomPin, digitalRead(thirdRoomMotionSenserPin) * (255 - ldrValue));
Serial.print("Street lightning: ");
Serial.println(ldrValue);
}
delay(200);
}