Hi,
I have done programming in various languages, so I can say that I have experience in programming. But, I haven't used Arduino for a while and now I have to do a project using Arduino.
I have written a code for a barrier which can be used to control the number of people in a shop. If the number of people inside the shop is less than the maximum number allowed, barrier will let the customer enter the shop.
Moreover, barrier can be used in different configurations such as; it can be used as both entrance and exit(if the barrier is set to neither entrance or exit), or only entrance(if the barrier is set to entrance), or only exit(if the barrier is set to exit). This configuration will be determined by choosing one of the 3 states of a switch. Also, considering that barrier may be placed on the right side or left, there is another switch which determines which side it is placed(if placedOnLeftSide is set, then the barrier is placed on the left side).
There is also a laser sensor which can determine if someone passed the barrier when the barrier is lowered. The sensor also triggers an alarm led and a buzzer if someone tries to pass the barrier while it is lowering or raising or raised already.
But, I couldn't make the code work properly. Since, I haven't used Arduino for some time I may be doing something wrong. I want to ask if you can check my code and tell me if it is correct. I have been struggling to make this code work for a couple of days, but I couldn't.
For example, even though the laser of the sensor I connected to the pin 33 (accidentSensor) is not interrupted(it should be LOW), I see that both alarmBuzzer and alarmRed turns on. I can't find any meaning to this.
I attached the code file, and also pasting it here. Thank you for any contributions.
The Code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(41, 40, 39, 38, 37, 36);
int lowerBarrier = 26;
int raiseBarrier = 27;
int barrierRaised = 28;
int barrierLowered = 29;
int stateEntrance = 30;
int stateExit = 31;
int placedOnLeftSide = 32;
int accidentSensor = 33;
int TouchButtonFront = 34;
int TouchButtonRear = 35;
int alarmBuzzer = 36;
int alarmLED = 37;
bool barrierIsLowering = false;
bool barrierIsRaising = false;
bool enteringRequest = false;
bool exitingRequest = false;
bool firstRun = true;
int maxNumberOfPeople = 10;
int numberOfPeopleInside = 0;
void shopIsFull(){
lcd.clear();
lcd.home();
lcd.print(" SHOP IS FULL. PLEASE WAIT.");
}
void youCanPass(){
lcd.clear();
lcd.home();
lcd.print("PASS AFTER BARRIER IS LOWERED");
}
void byeBye(){
lcd.clear();
lcd.home();
lcd.print(" THANK YOU FOR VISITING ");
}
void defaultScreen(){
lcd.clear();
lcd.home();
lcd.print("NUMBER OF PEOPLE INSIDE: ");
}
bool enterRequest(){
if(numberOfPeopleInside < maxNumberOfPeople){
digitalWrite(lowerBarrier, HIGH);
barrierIsLowering = true;
youCanPass();
}else{
shopIsFull();
}
return true;
}
bool exitRequest(){
byeBye();
digitalWrite(lowerBarrier, HIGH);
barrierIsLowering = true;
return true;
}
void setup() {
lcd.begin(16, 2);
pinMode(lowerBarrier, OUTPUT);
pinMode(raiseBarrier, OUTPUT);
pinMode(barrierLowered, INPUT);
pinMode(barrierRaised, INPUT);
pinMode(stateEntrance, INPUT);
pinMode(stateExit, INPUT);
pinMode(placedOnLeftSide, INPUT);
pinMode(accidentSensor, INPUT);
pinMode(TouchButtonFront, INPUT);
pinMode(TouchButtonRear, INPUT);
pinMode(alarmBuzzer, OUTPUT);
pinMode(alarmLED, OUTPUT);
barrierIsLowering = false;
barrierIsRaising = false;
enteringRequest = false;
exitingRequest = false;
firstRun = true;
maxNumberOfPeople = 10;
numberOfPeopleInside = 0;
if(firstRun == true){
if(digitalRead(barrierRaised) == LOW){
digitalWrite(raiseBarrier, HIGH);
barrierIsRaising = true;
firstRun = false;
}
}
}
void loop() {
if(barrierIsLowering == false && barrierIsRaising == false){
if(digitalRead(placedOnLeftSide) == HIGH){ // The system is placed on the left side
if(digitalRead(stateEntrance) == LOW && digitalRead(stateExit) == LOW){ // Entrance and exit can be done on the same gate
if(digitalRead(TouchButtonFront) == HIGH && digitalRead(barrierRaised) == HIGH){ // Entering request
enteringRequest = enterRequest();
}else if(digitalRead(TouchButtonRear) == HIGH && digitalRead(barrierRaised) == HIGH){ // Exitting request
exitingRequest = exitRequest();
}
}else if(digitalRead(stateEntrance) == HIGH){ // Only entrance can be done on the gate
if(digitalRead(TouchButtonFront) == HIGH && digitalRead(barrierRaised) == HIGH){ // Entering request
enteringRequest = enterRequest();
}
}else if(digitalRead(stateExit) == HIGH){ // Only exitting can be done on the gate
if(digitalRead(TouchButtonRear) == HIGH && digitalRead(barrierRaised) == HIGH){ // Exitting request
exitingRequest = exitRequest();
}
}
}else if(digitalRead(placedOnLeftSide) == LOW){ // The system is placed on the right side
if(digitalRead(stateEntrance) == LOW && digitalRead(stateExit) == LOW){ // Entrance and exit can be done on the same gate
if(digitalRead(TouchButtonFront) == HIGH && digitalRead(barrierRaised) == HIGH){ // Exitting request
exitingRequest = exitRequest();
}else if(digitalRead(TouchButtonRear) == HIGH && digitalRead(barrierRaised) == HIGH){ // Entering request
enteringRequest = enterRequest();
}
}else if(digitalRead(stateEntrance) == HIGH){ // Only entrance can be done on the gate
if(digitalRead(TouchButtonRear) == HIGH && digitalRead(barrierRaised) == HIGH){ // Entering request
enteringRequest = enterRequest();
}
}else if(digitalRead(stateExit) == HIGH){ // Only exitting can be done on the gate
if(digitalRead(TouchButtonFront) == HIGH && digitalRead(barrierRaised) == HIGH){ // Exitting request
exitingRequest = exitRequest();
}
}
}
}
if(barrierIsLowering == true && digitalRead(barrierLowered) == HIGH){
digitalWrite(lowerBarrier, LOW);
barrierIsLowering = false;
}
if(barrierIsRaising == true && digitalRead(barrierRaised) == HIGH){
digitalWrite(raiseBarrier, LOW);
barrierIsRaising = false;
if(enteringRequest == true){
numberOfPeopleInside++;
enteringRequest = false;
}
if(exitingRequest == true){
numberOfPeopleInside--;
exitingRequest = false;
}
defaultScreen();
}
if(digitalRead(accidentSensor) == HIGH){
if(barrierIsLowering == true || barrierIsRaising == true){
digitalWrite(lowerBarrier, LOW);
barrierIsLowering = false;
digitalWrite(raiseBarrier, LOW);
barrierIsRaising = false;
digitalWrite(alarmBuzzer, HIGH);
digitalWrite(alarmLED, HIGH);
}else if(digitalRead(barrierRaised) == HIGH){
digitalWrite(alarmBuzzer, HIGH);
digitalWrite(alarmLED, HIGH);
}else if(digitalRead(barrierLowered) == HIGH){
delay(5000);
digitalWrite(raiseBarrier, HIGH);
barrierIsRaising = true;
}
}
if(barrierIsLowering == true && barrierIsRaising == true){
digitalWrite(lowerBarrier, LOW);
digitalWrite(raiseBarrier, LOW);
barrierIsLowering = false;
barrierIsRaising = false;
}
}
BarrierProject_Updated_Again.ino (5.6 KB)