const float GAMMA = 0.7;
const float RL10 = 50;
const int LightError = 12;
const int DoorError = 13;
const int LimitSwitch = 8;
const int change_threshold = 250;
int buttonState = 0;
int lastButtonState = 0;
int startPressed = 0;
int endPressed = 0;
int idleTime = 0;
int SetupLux;
int analogValueOne;
int analogValueTwo;
int analogValueThr;
int analogValueFou;
int analogValueFiv;
int analogValue;
int analogArray[5];
float voltage[5];
float resistance[5];
static float lux[5];
void setup() {
Serial.begin(9600);
pinMode(LightError, OUTPUT);
pinMode(DoorError, OUTPUT);
pinMode(LimitSwitch, INPUT);
pinMode(A0, INPUT);
digitalWrite(LightError, LOW);
}
void loop() {
buttonState = digitalRead(LimitSwitch);
analogArray[0] = analogRead(A0);
analogArray[1] = analogRead(A1);
analogArray[2] = analogRead(A2);
analogArray[3] = analogRead(A3);
analogArray[4] = analogRead(A4);
for (int i = 0; i <= 4; i++) {
// analogValue = analogArray[i];
voltage[i] = analogArray[i] / 1024. * 5;
resistance[i] = 2000 * voltage[i] / (1 - voltage[i] / 5);
lux[i] = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance[i], (1 / GAMMA));
if (changed_significantly(lux[i], i)){
SetupLux = SetupLux + 1;
if (SetupLux >= 6 && buttonState != HIGH){
Serial.println("Light Error");
digitalWrite(LightError, HIGH);
}
}
UpdateState();
lastButtonState = buttonState;
delay(100);
}
}
bool changed_significantly(int value, int i) {
static int old_value[5];
static int list[5];
list[i] = value;
Serial.print("Sensor ");
Serial.print(i);
Serial.print(": ");
Serial.println(list[i]);
bool changed = abs(list[i] - old_value[i]) >= change_threshold || list[i] >= 1200 || list[i] < 0;
if (changed) {
old_value[i] = value;
}
return changed;
}
void UpdateState() {
if (buttonState == HIGH) {
startPressed = millis();
idleTime = startPressed - endPressed;
if (idleTime >= 10000) {
digitalWrite(DoorError, HIGH);
Serial.println("Door Error");
}
}
else{
endPressed = millis();
}
return true;
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
relay2:VCC
relay2:GND
relay2:IN
relay2:NC
relay2:COM
relay2:NO
sw1:1
sw1:2
sw1:3
ldr1:VCC
ldr1:GND
ldr1:DO
ldr1:AO
led1:A
led1:C
led2:A
led2:C
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
ldr2:VCC
ldr2:GND
ldr2:DO
ldr2:AO
ldr3:VCC
ldr3:GND
ldr3:DO
ldr3:AO
ldr4:VCC
ldr4:GND
ldr4:DO
ldr4:AO
ldr5:VCC
ldr5:GND
ldr5:DO
ldr5:AO