// From https://randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide
#include <Stepper.h>
#include <AccelStepper.h>
#define steps 5
#define dir 4
#define redled 21
#define greenled 22
#define greenb 23
#define redb 34
int count =0; //number of people
int leaveG= 0;
int leaveR= 0;
//int i=0; //testing value
int a=0;
int b=0;
int c=0;
int d=0;
int e=0;
const int stepperrev = 200;
int p=2;
int o=1;
#define pot 2
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 4, 5, 18, 19);
void setup() {
Serial.begin(115200);
pinMode(redled, OUTPUT);
pinMode(greenled, OUTPUT);
pinMode(greenb, INPUT_PULLUP);
pinMode(redb, INPUT_PULLUP);
pinMode(steps, OUTPUT);
pinMode(dir, OUTPUT);
pinMode(pot,INPUT);
myStepper.setSpeed(60);
}
void loop (){
if(digitalRead(greenb) == 0){
while(1){
delay (100);
//Serial.print("insideG ");
if (digitalRead(greenb) == 1){
count+=10;
Serial.print("breakG ");
break;
}
}
//leaveR=0;
}
if(digitalRead(redb) == 0){
while(1){
delay (100);
//Serial.print("insideR ");
if (digitalRead(redb) == 1){
count=count-10;
Serial.print("breakR ");
break;
}
}
//leaveG=0;
}
Serial.println(count);
//10 for testing
if (count<10){
digitalWrite(greenled,HIGH);
digitalWrite(redled,LOW);
}
if (count==10){
digitalWrite(greenled,LOW);
digitalWrite(redled,HIGH);
}
if(count==0){
p=1;
if (a==1){
dec();
a=0;
}
//else nothing happens
}
if (count> 0 && count <= 20){
a=1;
if (b==1){
dec();
b=0;
}
if(p==1){
inc();
p=0;
}
//else nothing happens
}
if (count > 20 && count < 41){
b=1;
if (a==1){
inc();
a=0;
}
if (c==1){
dec();
c=0;
}
//else nothing happens
}
if (count > 40 && count < 61){
c=1;
if(b==1){
inc();
b=0;
}
if(d==1){
dec();
d=0;
}
//else nothing happens
}
if (count > 60 && count < 80){
d=1;
if(c==1){
inc();
c=0;
}
if(e==1){
dec();
e=0;
}
//else nothing happens
}
if (count >= 80){
e=1;
if (d==1){
inc();
d=0;
}
//else nothing happens
}
//i=i-10;
Serial.println(count);
}
void inc(){
digitalWrite(dir, HIGH);
for (int x=0; x < 40; x++ ){
digitalWrite(steps,HIGH);
delayMicroseconds(2000);
digitalWrite(steps,LOW);
delayMicroseconds(2000);
}
}
void dec(){
digitalWrite(dir, LOW);
for (int x=0; x < 40; x++ ){
digitalWrite(steps,HIGH);
delayMicroseconds(2000);
digitalWrite(steps,LOW);
delayMicroseconds(2000);
}
}