Go Down

Topic: 1 photoresistor 2 leds (sorry for my english) (Read 2562 times) previous topic - next topic

Mar 05, 2011, 12:35 pm Last Edit: Mar 05, 2011, 06:02 pm by kevindorner Reason: 1
Hi,
I am making a school project until the 14th, but i am new with programming.
A photoresistor controlls the leds. If i place my hand over the photoresistor, led2 goes on.
If I cover it, but then remove my hand, led1 goes on.

PLEASE HELP ME!

task:
1.read the photoresistor
2.wait 0,5 seconds
3.read the photoresistor again

a)if the light that reaches the photoresistor is interrupted for a short time, set led1 high;delay(1000);set led1 low
b)if the light that reaches the photoresistor is interrupted for a long time, set led2 high;delay(1000);set led2 low

=>that means: a)if i move my hand once over it, set led 1 high
b)if i cover it, set led 2 high

I need a programm that looks like this:

Quote

int photoIn = 1;
int led1 = 11;
int led2 = 12;
int setPoint = 350;

void setup()
{
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
}
void loop() {
 Value = analogRead(photoIn);
 
 if (Value < setPoint;
      delay(500);
     Value > setPoint;)
 {
   digitalWrite(led1, HIGH);
    delay(1000)
   digitalWrite(led1, LOW);
 }

 if (Value < setPoint;
      delay(500);
     Value < setPoint;)
 {
   digitalWrite(led2, HIGH);
    delay(1000)
   digitalWrite(led2, LOW);
 }



Graynomad

Those if() statements are not valid C code, not even close.

______
Rob
Rob Gray aka the GRAYnomad www.robgray.com

I gave an example i don't know how to programm it right...

Magician

#3
Mar 05, 2011, 05:33 pm Last Edit: Mar 05, 2011, 05:37 pm by Magician Reason: 1
Code: [Select]

void loop() {

unsigned long pretime =0, newtime =0;
int oldvalue =0, newvalue =0;

oldvalue= newvalue; //  
newvalue = analogRead(photoIn);

if (newvalue - oldvalue > 500)
{
pretime = newtime;
newtime = millis();
}
 
 if ((newlalue - oldvalue > 500) && (pretime - newtime > 500) && (pretime - newtime < 3000) )
        {
   digitalWrite(led1, HIGH);
    delay(1000)
   digitalWrite(led1, LOW);
 }
if ((newlalue - oldvalue > 500) && (pretime - newtime > 3000) )
        {
   digitalWrite(led2, HIGH);
    delay(1000)
   digitalWrite(led2, LOW);
 }


Magician

Yes, probably it would not work.
I just try to give a tips, not a programm. The tips are you have a deal with timing,
and should use a time checking subroutine, like millis();
I think in my example there is a timing issue, as it overwrite newvalue any cycle.
And photoresistors are slow devices, so value from the sensor couldn't change fast enough.
Put a delay(500), after last line, it will slow the speed.

Groove

Code: [Select]
int oldvalue =0, newvalue =0;

oldvalue= newvalue; //


I think a "static" qualifier for oldvalue could be useful
Per Arduino ad Astra

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy