Go Down

### Topic: Simple counting problems (Read 687 times)previous topic - next topic

#### Hackdub

##### Feb 07, 2013, 12:41 pmLast Edit: Feb 07, 2013, 12:50 pm by Hackdub Reason: 1
I'm constructing a device which measures an analogue input.

when the analogue input is below a threshold, an output goes high once, until the analogue input goes above a threshold.

Code: [Select]
`int sensorPin = A0; // select the input pin for the detectorunsigned int count = 0;byte latch = 0;  //initial variableunsigned int sensorValue = 0;  // variable to store the value coming from the detectorvoid setup(){    pinMode(13, OUTPUT);  //Start Serial port  Serial.begin(9600);count=0;  }void loop(){  // read the value from the soil detector:  sensorValue = analogRead(sensorPin);      if(count==0&&sensorValue<500)  digitalWrite(13, HIGH);  delay(1000); // 1 second delay  ++count;// this increments the count by 1  Serial.println(sensorValue);  Serial.println(count);  digitalWrite(13, LOW);if(sensorValue>600)count=0;}`

The problems I have..

the count variable displays a "1" when held high.... and when running, why isn't it 0 as per initialisation.

When taking A0 low the count keeps incrementing, ignoring the "count==0", why not just +1,

When taking A0 HIGH the count displays a "1" not 0 ?

thanks for any help

David

#### AWOL

#1
##### Feb 07, 2013, 12:57 pm
Code: [Select]
`if(count==0&&sensorValue<500)   digitalWrite(13, HIGH);`
That's the extent of your conditional code, everything else is executed unconditionally.
I'm not sure if that's what you intended.
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

#### Hackdub

#2
##### Feb 07, 2013, 01:01 pm

Code: [Select]
`if(count==0&&sensorValue<500)  digitalWrite(13, HIGH);`
That's the extent of your conditional code, everything else is executed unconditionally.
I'm not sure if that's what you intended.

No thats not what I want..

If the condition is met.

I want the pin to go high , ++count,then go low after a time..

Is this a bracket issue?

or lack of else?

is it only the line directly below the condition that is linked, and how do i add more...

Sorry for the dumb questions, but this is driving me mad, that i'm missing the obvious.

David

#### johncc

#3
##### Feb 07, 2013, 01:10 pmLast Edit: Feb 07, 2013, 01:12 pm by johncc Reason: 1

If the condition is met.

I want the pin to go high , ++count,then go low after a time..

Is this a bracket issue?

Yes
Quote

is it only the line directly below the condition that is linked, and how do i add more...

if (condition)
statement;

where statement is either one line like
digitalWrite( 13, HIGH);

or multiple like
{
digitalWrite(13, HIGH);
count++;
... etc
}

http://arduino.cc/en/Reference/If

Cheers,
John

#### Hackdub

#4
##### Feb 07, 2013, 01:27 pm
Thanks John.. Ive tried that.

now its not incrementing... :-(

Code: [Select]
`int sensorPin = A0; // select the input pin for the detectorint count = 0;//byte latch = 0;  //initial variableunsigned int sensorValue = 0;  // variable to store the value coming from the detectorvoid setup(){    pinMode(13, OUTPUT);  //Start Serial port  Serial.begin(9600);}void loop(){  Serial.println(sensorValue);  Serial.println(count);  // read the value from the soil detector:  sensorValue = analogRead(sensorPin);   delay(500);    if(count=0&&sensorValue<500)    {digitalWrite(13, HIGH);      delay(5000); // 5 second delay       count++;// this increments the count by 1      delay(500);    digitalWrite(13, LOW);}  if(sensorValue>600){count=0;delay(2000);}}`

#### AWOL

#5
##### Feb 07, 2013, 01:34 pm
Quote
now its not incrementing...

Maybe it is, but you're just not waiting long enough to see the result.

On second thoughts, you're right, it will never increment
Code: [Select]
`if(count=0`
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

#### Hackdub

#6
##### Feb 07, 2013, 01:46 pm
Nearly done..

its counting correctly, but no LED output .!
Code: [Select]
`int sensorPin = A0; // select the input pin for the detectorint count = 0;byte latch = 0;  //initial variableunsigned int sensorValue = 0;  // variable to store the value coming from the detectorconst int LED = 4;void setup(){    pinMode(LED, OUTPUT);  //Start Serial port  Serial.begin(9600);}void loop(){  Serial.println(sensorValue);  Serial.println(count);  // read the value from thedetector:  sensorValue = analogRead(sensorPin);   delay(500);    if(count=0&&sensorValue<500)    {digitalWrite(LED, HIGH);      delay(5000); // 5 second delay            delay(500);    digitalWrite(LED, LOW);}  count++;    // this increments the count by 1  if(sensorValue>600){count=0;delay(2000);//digitalWrite(LED, LOW);}}`

#### AWOL

#7
##### Feb 07, 2013, 01:48 pm
Code: [Select]
` if(count=0`

Quote
its counting correctly
unconditionally
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

#### Hackdub

#8
##### Feb 07, 2013, 01:56 pm
BINGO! tx..

for some--- we need to learn the hard way ;-)

#### PaulS

#9
##### Feb 07, 2013, 02:00 pm
Istheresomethingwrongwithyourspacekey?

Code: [Select]
`  if(count=0&&sensorValue<500)`
would be heck of a lot easier to parse as
Code: [Select]
`  if(count = 0 && sensorValue < 500)`
Therefore, it would be a lot simpler to spot the mistake.

Go Up

Please enter a valid email to subscribe