0

I am doing a pretty simple arduino project that uses a Parallax Ping Ultrasonic Sensor to increment a counter when an object moves past the desired distance. (object leaves, counter goes up, object comes back, this loops forever). My problem is now that every time i run this.. the serial monitor just shows me Count: 1 over and over again and does not increment. Any help would be appreciated!

example of what i want the Serial Monitor to write: Count:0 Count:1 Count:2 ....

What it is currently doing: Count:0 Count:0 Count:0

const int pingPin = 7;
void setup() {
 // initialize serial communication:
 Serial.begin(9600);
}
void loop()
{
 // establish variables for duration of the ping,
 // and the distance result in inches and centimeters:
 long duration, inches, cm, count;
 // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
 // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
 pinMode(pingPin, OUTPUT);
 digitalWrite(pingPin, LOW);
 delayMicroseconds(2);
 digitalWrite(pingPin, HIGH);
 delayMicroseconds(5);
 digitalWrite(pingPin, LOW);
 // The same pin is used to read the signal from the PING))): a HIGH
 // pulse whose duration is the time (in microseconds) from the sending
 // of the ping to the reception of its echo off of an object.
 pinMode(pingPin, INPUT);
 duration = pulseIn(pingPin, HIGH);
 // convert the time into a distance
 inches = microsecondsToInches(duration);
 cm = microsecondsToCentimeters(duration);
// count = 1;
 if (inches > 5)
{
 Serial.print("Count: ");
 Serial.print(count);
 Serial.print('\n');
 delay(1000);
 count++;
}
}
long microsecondsToInches(long microseconds)
{
 return microseconds / 74 / 2;
}
long microsecondsToCentimeters(long microseconds)
{
 return microseconds / 29 / 2;
}
Majenko
106k5 gold badges81 silver badges139 bronze badges
asked Jun 24, 2015 at 17:27

1 Answer 1

2

Count is a local variable - it gets re-created afresh every time the loop() runs.

Either make it global, or make it static.

These two options look like this:

Global

long count = 0;
void loop()
{
 // establish variables for duration of the ping,
 // and the distance result in inches and centimeters:
 long duration, inches, cm;

Static

void loop()
{
 // establish variables for duration of the ping,
 // and the distance result in inches and centimeters:
 long duration, inches, cm;
 static long count = 0;

Both will do the same job, but the static form is preferred since it is always better to keep a variable's scope as narrow as possible. It is also important to provide a start value for the counter to begin from (0 in this case) otherwise the starting value will be unknown.

answered Jun 24, 2015 at 17:32
2
  • i did int count inside the loop and it still didn't do anything... Commented Jun 24, 2015 at 18:05
  • You need to place it outside the loop (i.e. global). Commented Jun 24, 2015 at 18:46

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.