Go Down

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

kevindorner

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

kevindorner

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