Go Down

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

Hackdub

Feb 07, 2013, 12:41 pm Last 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 detector
unsigned int count = 0;
byte latch = 0;  //initial variable
unsigned int sensorValue = 0;  // variable to store the value coming from the detector


void 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

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


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 pm Last 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

Thanks John.. Ive tried that.

now its not incrementing... :-(

Code: [Select]
int sensorPin = A0; // select the input pin for the detector
int count = 0;
//byte latch = 0;  //initial variable
unsigned int sensorValue = 0;  // variable to store the value coming from the detector


void 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);}
}

Go Up