#include <TM1637Display.h>
#include <ezButton.h>
const int DISPLAY1_CLK = 2;
const int DISPLAY1_DIO = 3;
const int DISPLAY2_CLK = 4;
const int DISPLAY2_DIO = 5;
const int INFLATE_PIN = 6;
const int DEFLATE_PIN = 7;
ezButton Increase_Button(8);
ezButton Decrease_Button(9);
const int PRESSURE_SENSOR_PIN = A0;
TM1637Display display1(DISPLAY1_CLK, DISPLAY1_DIO);
TM1637Display display2(DISPLAY2_CLK, DISPLAY2_DIO);
int setpoint = 200;
int OnTime = 3000;
int pressure = 0;
int zeropressure = 0;
int current_pressure = 0;
unsigned long previousMillis = 0;
int inFlatestate = LOW;
int deFlatestate = LOW;
int InflationComplete = LOW;
void setup() {
Serial.begin(9600);
display1.setBrightness(0x0f);
display2.setBrightness(0x0f);
Increase_Button.setDebounceTime(80); // set debounce time to 50 milliseconds
Decrease_Button.setDebounceTime(80); // set debounce time to 50 milliseconds
Increase_Button.setCountMode(COUNT_RISING);
Decrease_Button.setCountMode(COUNT_RISING);
pinMode(INFLATE_PIN, OUTPUT);
pinMode(DEFLATE_PIN, OUTPUT);
zeropressure = analogRead(PRESSURE_SENSOR_PIN);
}
void loop() {
Increase_Button.loop();
Decrease_Button.loop();
unsigned long currentMillis = millis();
unsigned long btn1Count = Increase_Button.getCount();
unsigned long btn2Count = Decrease_Button.getCount();
setpoint=200+10*btn1Count-10*btn2Count;
btn1Count=0;
btn2Count=0;
if ((inFlatestate == LOW) && (deFlatestate == LOW)) {
pressure = analogRead(PRESSURE_SENSOR_PIN)-zeropressure;
current_pressure = (pressure * 418.56) / 1023.0;
}
display1.showNumberDec(setpoint / 1, false);
display2.showNumberDec(current_pressure, false);
currentMillis = millis();
timeInterval();
if ((currentMillis - previousMillis >= OnTime ) && (InflationComplete == LOW)) {
previousMillis = currentMillis;
if (setpoint >= current_pressure) {
if (inFlatestate == LOW) {
inFlatestate = HIGH;
} else {
inFlatestate = LOW;
}
}
else if (current_pressure > setpoint) {
if (deFlatestate == LOW) {
deFlatestate = HIGH;
} else {
deFlatestate = LOW;
}
}
digitalWrite(DEFLATE_PIN, deFlatestate);
digitalWrite(INFLATE_PIN, inFlatestate);
}
if (abs(setpoint - current_pressure) <= 5) {
//Serial.println("Tyre Inflated to correct pressure");
deFlatestate = LOW;
inFlatestate =LOW;
digitalWrite(DEFLATE_PIN, deFlatestate);
digitalWrite(INFLATE_PIN, inFlatestate);
InflationComplete = HIGH;
}
else if (abs(setpoint - current_pressure) > 5) {
InflationComplete = LOW;
}
}
void timeInterval() {
if (abs(setpoint - current_pressure) >= 60) {
OnTime = 3000;
}
else if ((abs(setpoint - current_pressure) >= 20) && (abs(setpoint - current_pressure) < 60)) {
OnTime =1000;
}
}