Trouble with tracker sensor code

So I am trying to make a car park for a school project. All is going well other than the tracker sensor. As you may know when a car is sensed at the entrance the tracker sensor is constantly inputting 1's and adding it to the count, this is resulting in the count going from 0-100 in a few seconds. I need it to only go from 0-8 as that is the amount of parking spaces in the carpark. I was going to use a do..while loop or a delay but I'm not sure what to do. I need assistance to make the Tracker sensor only read once when a car is placed infront, it gives a +1 to the count and waits till the car is gone and doesn't continue giving +1 but rather just 1 so that the counter can be displayed on a 7 segment. Thanks

#include "servomotors.h"
#include "7_segment.h"
const int tra1 = 2; // Entrance
const int tra2 = 7; // Exit
void setup() {
  servomotorSetup();
  segment_setup();
  Serial.begin(9600);
  pinMode(tra1, INPUT);
  pinMode(tra2, INPUT);
}
int TRA1, TRA2, count = 0;
void loop() {
  TRA1 = digitalRead(tra1);
  TRA2 = digitalRead(tra2);
  Serial.println(TRA1);
  Serial.println(TRA2);
  if (TRA1 == 1) { // Entrance
    servo_entrance_open();
    if (count == 0) {
      eight();
    } else if (count == 1) { // If 1 car display 7 (8-1)
      seven();
    } else if (count == 2) {
      six();
    } else if (count == 3) {
      five();
    } else if (count == 4) {
      four();
    } else if (count == 5) {
      three();
    } else if (count == 6) {
      two();
    } else if (count == 7) {
      one();
    } else if (count == 8) {
      zero();
    }
  } else if (TRA2 == 1) { // Exit
    count = count - 1;
  }
  Serial.println(count);
}

const int SEG_A = 3;
const int SEG_B = 4;
const int SEG_C = 12;
const int SEG_D = 13;
const int SEG_E = 9;
const int SEG_F = 10;
const int SEG_G = 11;

void segment_setup() {
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
}
// SEG_A Top
// SEG_B Top Left
// SEG_C Middle
// SEG_D Top Right
// SEG E Bottom Right
// SEG F Bottom
// SEG G Bottom Left

void zero() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_G,HIGH);
  digitalWrite(SEG_F,HIGH);
}

void one() {
  digitalWrite(SEG_A,LOW);
  digitalWrite(SEG_B,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_C,LOW);
  digitalWrite(SEG_F,LOW);
  digitalWrite(SEG_G,LOW);
}

void two() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_E,LOW);
  digitalWrite(SEG_G,HIGH);
  digitalWrite(SEG_F,HIGH);
}

void three() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
  digitalWrite(SEG_G,LOW);
}

void four() {
  digitalWrite(SEG_A,LOW);
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,LOW);
  digitalWrite(SEG_G,LOW);
}

void five() {
  digitalWrite(SEG_A,HIGH);  
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,LOW);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
  digitalWrite(SEG_G,LOW);
}

void six() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,LOW);
  digitalWrite(SEG_G,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
}

void seven() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,LOW);
  digitalWrite(SEG_C,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,LOW);
  digitalWrite(SEG_G,LOW);
}

void eight() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
  digitalWrite(SEG_G,HIGH);
}

#include <Servo.h>

const int GATE1 = 6; // Entrance
const int GATE2 = 5;// Exit

Servo gate1;
Servo gate2;

void servomotorSetup() {
  pinMode(GATE1, OUTPUT);
  pinMode(GATE2, OUTPUT);
  gate1.attach(GATE1);
  gate2.attach(GATE2);
}
// Change servo's values according to what is needed
void servo_entrance_open() {
  gate1.write(175);
}

void servo_entrance_close() {
  gate1.write(72);
}

void servo_exit_open() {
  gate2.write(72);
}

void servo_exit_close() {
  gate2.write(175);
}

What is the source of these two libraries?

This sounds like the sensor reading happens very fast. Try adding a long delay after each sensor is read because a car takes time to move through the gate:

  TRA1 = digitalRead(tra1);
  delay(1000); // one second delay
  TRA2 = digitalRead(tra2);
  delay(1000); // one second delay

They are two functions that include all of the servo code and the 7 segment code that displays 0-8

Was this from the IDE or a web site?

And.... obviously... you have no functions defined for the servo, sensors or any LED numbers.

I wrote it myself on IDE

You should also post the libraries, because (as you know, since you wrote them) they have the function calls used in the sketch.

I copied them for you in the original post

I want to change what I wrote... a better way to count the cars without a runaway number is to hold the sketch in place when a sensor (entrance or exit) detects a car, and waits until a car is not detected (the car has passed) before increasing the count of TRA1 or TRA2.

how do i do that tho

After TRA1 becomes 1, put a second condition to test for TRA1 goes back to 0 to indicate the car has passed... maybe...

if (TRA1 == 1) { // Entrance, detector will sens a car and continue to be "1"
  servo_entrance_open(); // gate opens
  if (TRA1 == 0) { // car has passed detector, sensor is "0" now count one car
    {
      // the "count" code
    }
  } // close tra1 == 0
} // close tra1 == 1

The count code isn't adding when supposed to. So its staying on 0.

#include "servomotors.h"
#include "7_segment.h"
const int tra1 = 2; // Entrance
const int tra2 = 7; // Exit
void setup() {
  servomotorSetup();
  segment_setup();
  Serial.begin(9600);
  pinMode(tra1, INPUT);
  pinMode(tra2, INPUT);
}
int TRA1, TRA2, count = 0;
void loop() {
  TRA1 = digitalRead(tra1);
  TRA2 = digitalRead(tra2);
  Serial.println(TRA1);
  Serial.println(TRA2);
  Serial.println(count);
  if (TRA1 == 1) { // Entrance
    servo_entrance_open();
    if (TRA1 == 0) {
      count = count + 1;
    } if (count == 0) {
      eight();
    } else if (count == 1) { // If 1 car display 7 (8-1)
      seven();
    } else if (count == 2) {
      six();
    } else if (count == 3) {
      five();
    } else if (count == 4) {
      four();
    } else if (count == 5) {
      three();
    } else if (count == 6) {
      two();
    } else if (count == 7) {
      one();
    } else if (count == 8) {
      zero();
    }
  } else if (TRA2 == 1) { // Exit
    // count = count - 1;
  }
  Serial.println(count);
}

const int SEG_A = 3;
const int SEG_B = 4;
const int SEG_C = 12;
const int SEG_D = 13;
const int SEG_E = 9;
const int SEG_F = 10;
const int SEG_G = 11;

void segment_setup() {
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
}
// SEG_A Top
// SEG_B Top Left
// SEG_C Middle
// SEG_D Top Right
// SEG E Bottom Right
// SEG F Bottom
// SEG G Bottom Left

void zero() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_G,HIGH);
  digitalWrite(SEG_F,HIGH);
}

void one() {
  digitalWrite(SEG_A,LOW);
  digitalWrite(SEG_B,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_C,LOW);
  digitalWrite(SEG_F,LOW);
  digitalWrite(SEG_G,LOW);
}

void two() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_E,LOW);
  digitalWrite(SEG_G,HIGH);
  digitalWrite(SEG_F,HIGH);
}

void three() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
  digitalWrite(SEG_G,LOW);
}

void four() {
  digitalWrite(SEG_A,LOW);
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,LOW);
  digitalWrite(SEG_G,LOW);
}

void five() {
  digitalWrite(SEG_A,HIGH);  
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,LOW);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
  digitalWrite(SEG_G,LOW);
}

void six() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,LOW);
  digitalWrite(SEG_G,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
}

void seven() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,LOW);
  digitalWrite(SEG_C,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,LOW);
  digitalWrite(SEG_G,LOW);
}

void eight() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
  digitalWrite(SEG_G,HIGH);
}

#include <Servo.h>

const int GATE1 = 6; // Entrance
const int GATE2 = 5;// Exit

Servo gate1;
Servo gate2;

void servomotorSetup() {
  pinMode(GATE1, OUTPUT);
  pinMode(GATE2, OUTPUT);
  gate1.attach(GATE1);
  gate2.attach(GATE2);
}
// Change servo's values according to what is needed
void servo_entrance_open() {
  gate1.write(175);
}

void servo_entrance_close() {
  gate1.write(72);
}

void servo_exit_open() {
  gate2.write(72);
}

void servo_exit_close() {
  gate2.write(175);
}

I see my mistake. I stopped letting the car count happen.

This will use your TRA1 == 1 check and add a "carEntered" flag. Then it will wait for TRA to be 0 (car has move away) to count the car.

#include "servomotors.h"
#include "7_segment.h"
const int tra1 = 2; // Entrance
const int tra2 = 7; // Exit

bool carEntered = 0; // <- ADDED for allowing car count

void setup() {
  servomotorSetup();
  segment_setup();
  Serial.begin(9600);
  pinMode(tra1, INPUT);
  pinMode(tra2, INPUT);
}
int TRA1, TRA2, count = 0;
void loop() {
  TRA1 = digitalRead(tra1);
  TRA2 = digitalRead(tra2);
  Serial.println(TRA1);
  Serial.println(TRA2);
  
  // if (TRA1 == 1) { // Entrance
  if (TRA1 == 1 && carEntered = 0) { // only allow if car is detected AND has not been counted
    carEntered = 1; // this will indicate a car has entered
  }

  if (TRA1 == 0 && carEntered == 1) { // this waits for the car to move AND "carEntered"
    servo_entrance_open();
    if (count == 0) {
      eight();
    } else if (count == 1) { // If 1 car display 7 (8-1)
      seven();
    } else if (count == 2) {
      six();
    } else if (count == 3) {
      five();
    } else if (count == 4) {
      four();
    } else if (count == 5) {
      three();
    } else if (count == 6) {
      two();
    } else if (count == 7) {
      one();
    } else if (count == 8) {
      zero();
    }

  } else if (TRA2 == 1) { // Exit
    count = count - 1;
  }
  Serial.println(count);
}

const int SEG_A = 3;
const int SEG_B = 4;
const int SEG_C = 12;
const int SEG_D = 13;
const int SEG_E = 9;
const int SEG_F = 10;
const int SEG_G = 11;

void segment_setup() {
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
}
// SEG_A Top
// SEG_B Top Left
// SEG_C Middle
// SEG_D Top Right
// SEG E Bottom Right
// SEG F Bottom
// SEG G Bottom Left

void zero() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_G,HIGH);
  digitalWrite(SEG_F,HIGH);
}

void one() {
  digitalWrite(SEG_A,LOW);
  digitalWrite(SEG_B,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_C,LOW);
  digitalWrite(SEG_F,LOW);
  digitalWrite(SEG_G,LOW);
}

void two() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_E,LOW);
  digitalWrite(SEG_G,HIGH);
  digitalWrite(SEG_F,HIGH);
}

void three() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
  digitalWrite(SEG_G,LOW);
}

void four() {
  digitalWrite(SEG_A,LOW);
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,LOW);
  digitalWrite(SEG_G,LOW);
}

void five() {
  digitalWrite(SEG_A,HIGH);  
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,LOW);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
  digitalWrite(SEG_G,LOW);
}

void six() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,LOW);
  digitalWrite(SEG_G,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
}

void seven() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,LOW);
  digitalWrite(SEG_C,LOW);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,LOW);
  digitalWrite(SEG_G,LOW);
}

void eight() {
  digitalWrite(SEG_A,HIGH);
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
  digitalWrite(SEG_G,HIGH);
}

#include <Servo.h>

const int GATE1 = 6; // Entrance
const int GATE2 = 5;// Exit

Servo gate1;
Servo gate2;

void servomotorSetup() {
  pinMode(GATE1, OUTPUT);
  pinMode(GATE2, OUTPUT);
  gate1.attach(GATE1);
  gate2.attach(GATE2);
}
// Change servo's values according to what is needed
void servo_entrance_open() {
  gate1.write(175);
}

void servo_entrance_close() {
  gate1.write(72);
}

void servo_exit_open() {
  gate2.write(72);
}

void servo_exit_close() {
  gate2.write(175);
}

Whats the :

bool carEntered = 0;

I never used this bool statement?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.