Go Down

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

#### kevindorner

##### Mar 05, 2011, 12:35 pmLast 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

#1
##### Mar 05, 2011, 04:40 pm
Those if() statements are not valid C code, not even close.

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

#### kevindorner

#2
##### Mar 05, 2011, 05:10 pm
I gave an example i don't know how to programm it right...

#### Magician

#3
##### Mar 05, 2011, 05:33 pmLast 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);  } `

#### kevindorner

#4
##### Mar 05, 2011, 06:11 pm
is still not working...

#### Magician

#5
##### Mar 05, 2011, 06:24 pm
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.

#### GrooveFlotilla

#6
##### Mar 06, 2011, 06:24 pm
Code: [Select]
`int oldvalue =0, newvalue =0;oldvalue= newvalue; //`

I think a "static" qualifier for oldvalue could be useful
Some people are like Slinkies.

Not really good for anything, but they bring a smile to your face when pushed down the stairs.

#### hyperkoala

#7
##### Jul 09, 2016, 11:03 pm
Try using this format:
if(x<y) {
type your code here;
}
There is a lesson on photoresistors in the learning section on this website. You may need a voltage divider as a reference for analog input.

Go Up