jdickinsonarduino:
Perhaps I really dont have an understanding of the }
i thought it's to execute whats after it as a whole?
before moving on to the next?
The brackets are for bunching relevant stuff together.
jdickinsonarduino:
I'm really new at this...
This is about a lot more than "Send LED HIGH after 'x' seconds" ? isn't it?
You have to approach this thing in steps.
This "one felled swoop" approach is not a winner.
I inserted some brackets where I thought they should go, but that's kind of hard to tell
So, it compiles, but I'm pretty sure that it's not what you figure.
int photocellPin = 0;// Photocell connected to analog pin 0
int photocellVal = A0; // define photocell variable
int pirVal = LOW;// motion sensor variable
int ledState = 0;//state of the led
int minLight = 20;//min light threshold
int maxLight = 20;//max light threshold
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;
//the time when the sensor outputs a low impulse
unsigned long lowIn;
unsigned long refTime;
unsigned long trippoint;
const long threshold = 5000;
byte DET;
const byte pirPin = 2;
unsigned long pause = 5000UL;
boolean lockLow = true;
boolean takeLowTime;
//int pirPin = 2; //the digital pin connected to the PIR sensor's output
int ledPin1 = 3;
int ledPin2 = 4;
int ledPin3 = 5;
int ledPin4 = 6;
int ledPin5 = 7;
void setup()
{
Serial.begin(9600);
pinMode(photocellPin, INPUT);
pinMode(pirPin, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
//give the sensor some time to calibrate
Serial.print("calibrating sensor ");
for(int i = 0; i < calibrationTime; i++)
{
Serial.print(".");
delay(1000);
}
Serial.println(" done");
Serial.println("SENSOR ACTIVE");
delay(50);
}
void loop()
{
photocellVal = analogRead(photocellPin);
pirVal = digitalRead(pirPin);
if (photocellVal < minLight && ledState == 0)
{
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5)
{
analogWrite(ledPin1, fadeValue);
delay(30);
}
}
DET = digitalRead(pirPin);
if (DET == 1) // inactive
{
refTime = millis();
trippoint = refTime;
}
else // Active Low
{
pirActive();
}
digitalWrite(ledPin4, HIGH);
digitalWrite(ledPin5, HIGH);
if(lockLow) // IF without a Condition to Meet -- WRONG
{
lockLow = false;
Serial.println("---");
Serial.print("motion detected at ");
Serial.print(millis()/1000);
Serial.println(" sec");
delay(50);
}
takeLowTime = true;
if(pirVal == LOW)
{
digitalWrite(ledPin1, LOW); //the led visualizes the sensors output pin state
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
}
if(takeLowTime) // another IF without a CONDITION!!!!!
{
lowIn = millis(); //save the time of the transition from high to LOW
takeLowTime = false; //make sure this is only done at the start of a LOW phase
}
if(!lockLow && millis() - lowIn > pause) // BAD code, and NO CONDITION !!!!
{
lockLow = true;
Serial.print("motion ended at "); //output
Serial.print((millis() - pause)/1000);
Serial.println(" sec");
delay(50);
}
}
void pirActive ()
{
trippoint = millis();
if ((trippoint-refTime) > threshold)
{
digitalWrite(ledPin2,HIGH);
digitalWrite(ledPin3, HIGH);
}
}
I removed a lot of the comments, that's the only way I could keep from flying into a rage.
You have a few IF statements without a Condition, the equivalent of: IF (B). Well, What about "B", anyway?
If (B == 100) or If (B == false) gives "B" a condition to meet. See?
Work out simpler stuff first that you can incorporate later.
There's much for you to develop.