//------------------libs-------------------
#include <GyverSegment.h>
//------------------settings---------------
#define DIO_PIN 9 //disp dio
#define CLK_PIN 10 //disp clk
#define MOTOR_A 6 //...
#define MOTOR_B 7 //...
#define COMPRESSOR_FORCE 140
#define VALVE_A 5
#define VALVE_B 4
#define USERBUTTON 2
#define SENSOR 1
#define PRESSURE_BUTTON 3
//-----------------device-def--------------
Disp1637_4 disp(DIO_PIN, CLK_PIN);
//-----------------vars--------------------
volatile int i;
volatile unsigned int lastbut;
volatile unsigned int last_start;
bool state = false;
//-----------------code--------------------
void setup() {
pinMode(PRESSURE_BUTTON, INPUT_PULLUP);
if(SENSOR==1){
pinMode(USERBUTTON, INPUT);
attachInterrupt(digitalPinToInterrupt(USERBUTTON), userPress, RISING);
}else{
pinMode(USERBUTTON, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(USERBUTTON), userPress, FALLING);
}
attachInterrupt(digitalPinToInterrupt(PRESSURE_BUTTON), pressurePress, FALLING);
pinMode(MOTOR_A, OUTPUT);
pinMode(MOTOR_B, OUTPUT);
pinMode(VALVE_A, OUTPUT);
pinMode(VALVE_B, OUTPUT);
}
void loop() {
if (state) {
dishow(String(millis() - last_start));
last_start++;
delay(10);
}
}
//----------------funcs-------------------
void start_compressor(int val) {
analogWrite(MOTOR_A, val);
digitalWrite(MOTOR_B, LOW);
}
void dishow(String text) {
disp.clear();
disp.setCursor(0);
disp.print(text);
disp.update();
}
void userPress() {
if (lastbut + 100 < millis()) {
if (state) {
state = false;
digitalWrite(MOTOR_B, LOW);
digitalWrite(MOTOR_A, LOW);
digitalWrite(VALVE_A, LOW);
digitalWrite(VALVE_B, LOW);
} else {
digitalWrite(VALVE_A, LOW);
digitalWrite(VALVE_B, HIGH);
start_compressor(COMPRESSOR_FORCE);
state = true;
last_start = millis();
}
lastbut = millis();
}
}
void pressurePress() {
state = false;
digitalWrite(MOTOR_B, LOW);
digitalWrite(MOTOR_A, LOW);
digitalWrite(VALVE_A, LOW);
digitalWrite(VALVE_B, LOW);
}