Go Down

Topic: Simple counting problems (Read 541 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);}
}

AWOL

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

Nearly done..

its counting correctly, but no LED output .!
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
const 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

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

BINGO! tx..

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

PaulS

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

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