/*
Nos_Pop_Millis_08
*/
// pin numbers
const int NosPopButton = 4;
const int NosPopLedRed = 5;
const int NosPopLedGreen = 6;
const int NosRelay = 7;
const int PopRelay = 8;
const int PopDoseIntakeSwitchPin = 9;
const int AirRelay = 10;
const int ExtraNosButton = 11;
const int ExtraPopButton = 12;
const int WaterPotPin = A0;
const int WaterSolLedPin = A2;
const int WaterPotSwitchPin = 2;
const int WaterPressurePin = A1;
const int WaterPumpLedPin = A3;
const int WaterPumpSwitchPin = 3;
// Variables will change:
int LedState = LOW;
int ExtraNosState = LOW;
int ExtraPopState = LOW;
int PopDoseIntakeValue = 0;
int ButtonState;
int ButtonStateExtraNos;
int ButtonStateExtraPop;
int lastButtonState = LOW;
int lastButtonStateExtraNos = LOW;
int lastButtonStateExtraPop = LOW;
int counter;
int WaterSolLedState = LOW;
int WaterPotSwitchState = 0;
int WaterPotValue = 0;
int WaterPressureValue = 0;
int WaterPumpLedState = LOW;
int WaterPumpSwitchState = 0;
int PopDoseIntakeSwitchState = LOW;
int Correction;
int CorrectionF;
// constants won't change
unsigned long TimeNosPocatecniPauza = 10;
unsigned long TimeNosOn = 10;
unsigned long TimeNosMezera = 110;
unsigned long TimePopPocatecniPauza = 20;
unsigned long TimePopOn = 12;
unsigned long TimePopMezera = 150;
unsigned long TimePopAirPocatecniPauza = 5;
unsigned long TimePopAirOn = 25;
unsigned long TimePopAirMezera = 130;
unsigned long TimeExtraNosPocatecniPauza = 1;
unsigned long TimeExtraNosOn = 10;
unsigned long TimeExtraPopPocatecniPauza = 1;
unsigned long TimeExtraPopOn = 12;
unsigned long lastDebounceTime = 0;
unsigned long lastDebounceTimeExtraNos = 0;
unsigned long lastDebounceTimeExtraPop = 0;
unsigned long debounceDelay = 50;
// Variables will change:
unsigned long timeNosZero = 0;
unsigned long timeNosCurent = 0;
unsigned long timeNosFromZero = 0;
unsigned long timeExtraNosZero = 0;
unsigned long timeExtraNosCurent = 0;
unsigned long timeExtraNosFromZero = 0;
unsigned long timePopZero = 0;
unsigned long timePopCurent = 0;
unsigned long timePopFromZero = 0;
unsigned long timePopAirZero = 0;
unsigned long timePopAirCurent = 0;
unsigned long timePopAirFromZero = 0;
unsigned long timeExtraPopZero = 0;
unsigned long timeExtraPopCurent = 0;
unsigned long timeExtraPopFromZero = 0;
unsigned long WaterPreviousMillis = 0;
//unsigned long Correction = 0;
void setup() {
pinMode(NosPopButton, INPUT);
pinMode(NosPopLedRed, OUTPUT);
pinMode(NosPopLedGreen, OUTPUT);
pinMode(NosRelay, OUTPUT);
pinMode(PopRelay, OUTPUT);
pinMode(AirRelay, OUTPUT);
pinMode(ExtraNosButton, INPUT);
pinMode(ExtraPopButton, INPUT);
pinMode (WaterPotPin, INPUT);
pinMode (WaterSolLedPin, OUTPUT);
pinMode (WaterPotSwitchPin, INPUT);
pinMode (WaterPressurePin, INPUT);
pinMode (WaterPumpLedPin, OUTPUT);
pinMode (WaterPumpSwitchPin, INPUT);
pinMode (PopDoseIntakeSwitchPin, INPUT);
// set initial states
//Serial.begin(9600);
digitalWrite(NosPopLedRed, HIGH);
digitalWrite(NosPopLedGreen, LOW);
digitalWrite(NosRelay, LOW);
digitalWrite(PopRelay, LOW);
digitalWrite(AirRelay, LOW);
TimeNosPocatecniPauza = TimeNosPocatecniPauza * 1000;
TimeNosOn = TimeNosOn * 1000;
TimeNosMezera = TimeNosMezera * 1000;
TimePopPocatecniPauza = TimePopPocatecniPauza * 1000;
TimePopOn = TimePopOn * 1000;
TimePopMezera = TimePopMezera * 1000;
TimePopAirPocatecniPauza = TimePopAirPocatecniPauza * 1000;
TimePopAirOn = TimePopAirOn * 1000;
TimePopAirMezera = TimePopAirMezera * 1000;
TimeExtraNosPocatecniPauza = TimeExtraNosPocatecniPauza * 1000;
TimeExtraNosOn = TimeExtraNosOn * 1000;
TimeExtraPopPocatecniPauza = TimeExtraPopPocatecniPauza * 1000;
TimeExtraPopOn = TimeExtraPopOn * 1000;
}
void loop() {
//-------------------NOS EXTRA START--------------------
int readExtraNos = digitalRead(ExtraNosButton);
if (readExtraNos != lastButtonStateExtraNos) {
lastDebounceTimeExtraNos = millis();
}
if ((millis() - lastDebounceTimeExtraNos) > debounceDelay) {
//Serial.println("readExtraNos = ");
//Serial.println(readExtraNos);
//Serial.println("ButtonStateExtraNos = ");
//Serial.println(ButtonStateExtraNos);
//Serial.println("Extra NOS STATE 0");
if (readExtraNos != ButtonStateExtraNos) {
ButtonStateExtraNos = readExtraNos;
if (ButtonStateExtraNos == HIGH) {
//Serial.println("Zapnuto");
ExtraNosState = ! ExtraNosState;
timeExtraNosZero = millis();
//Serial.println("timeExtraNosZero");
//Serial.println(timeExtraNosZero);
//delay(500);
//timeExtraNosCurent = millis();
}
}
}
lastButtonStateExtraNos = readExtraNos;
//if (ExtraNosState == 0) {
// Serial.println("Extra NOS STATE 0");
//}
if (ExtraNosState == 1) {
//Serial.println("Extra NOS STATE 1");
timeExtraNosCurent = millis();
//Serial.println("timeExtraNosCurent");
//Serial.println(timeExtraNosCurent);
//delay(50);
//timeExtraNosZero = millis();
timeExtraNosFromZero = timeExtraNosCurent - timeExtraNosZero;
// -----------------NOS--------------------
if (timeExtraNosFromZero > TimeExtraNosPocatecniPauza && timeExtraNosFromZero < TimeExtraNosPocatecniPauza + TimeExtraNosOn) {
//Serial.println("NOS ON");
digitalWrite(NosRelay, HIGH);
}
if (timeExtraNosFromZero > TimeExtraNosPocatecniPauza + TimeExtraNosOn) {
//Serial.println("NOS OFF");
digitalWrite(NosRelay, LOW);
ExtraNosState = 0;
}
}
//Serial.println("Relay status");
//Serial.println(NosRelay);
//-------------------NOS EXTRA END--------------------
//-------------------Pop EXTRA START--------------------
int readExtraPop = digitalRead(ExtraPopButton);
if (readExtraPop != lastButtonStateExtraPop) {
lastDebounceTimeExtraPop = millis();
}
if ((millis() - lastDebounceTimeExtraPop) > debounceDelay) {
if (readExtraPop != ButtonStateExtraPop) {
ButtonStateExtraPop = readExtraPop;
if (ButtonStateExtraPop == HIGH) {
//Serial.println("Zapnuto");
ExtraPopState = !ExtraPopState;
timeExtraPopZero = millis();
//timeExtraPopCurent = millis();
}
}
}
lastButtonStateExtraPop = readExtraPop;
//if (ExtraPopState == 0) {
//Serial.println("Extra NOS STATE 0");
//}
if (ExtraPopState == 1) {
//Serial.println("Extra NOS STATE 1");
timeExtraPopCurent = millis();
timeExtraPopFromZero = timeExtraPopCurent - timeExtraPopZero;
// -----------------NOS--------------------
if (timeExtraPopFromZero >= TimeExtraPopPocatecniPauza && timeExtraPopFromZero < TimeExtraPopPocatecniPauza + TimeExtraPopOn) {
//Serial.println("NOS ON");
digitalWrite(PopRelay, HIGH);
}
if (timeExtraPopFromZero >= TimeExtraPopPocatecniPauza + TimeExtraPopOn) {
//Serial.println("NOS OFF");
digitalWrite(PopRelay, LOW);
ExtraPopState = 0;
}
}
//-------------------Pop EXTRA END--------------------
//----------------------NOS and POP Button START---------------
int reading = digitalRead(NosPopButton);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != ButtonState) {
ButtonState = reading;
if (ButtonState == HIGH) {
LedState = !LedState;
timeNosZero = millis();
timePopZero = millis();
}
}
}
lastButtonState = reading;
if (LedState == 0) {
//Serial.println("Zapne cervena LED");
digitalWrite(NosPopLedRed, HIGH);
digitalWrite(NosPopLedGreen, LOW);
//digitalWrite(NosRelay, LOW);
//digitalWrite(PopRelay, LOW);
//digitalWrite(AirRelay, LOW);
}
if (LedState == 1) {
//Serial.println("zapne zelene LED");
digitalWrite(NosPopLedRed, LOW);
digitalWrite(NosPopLedGreen, HIGH);
timeNosCurent = millis();
timeNosFromZero = timeNosCurent - timeNosZero;
timePopCurent = millis();
timePopFromZero = timePopCurent - timePopZero;
timePopAirCurent = millis();
timePopAirFromZero = timePopAirCurent - timePopAirZero;
// -----------------NOS--------------------
if (timeNosFromZero >= TimeNosPocatecniPauza && timeNosFromZero < TimeNosPocatecniPauza + TimeNosOn) {
//Serial.println("NOS ON");
digitalWrite(NosRelay, HIGH);
}
if (timeNosFromZero >= TimeNosPocatecniPauza + TimeNosOn) {
//Serial.println("NOS mezera");
digitalWrite(NosRelay, LOW);
}
if (timeNosFromZero >= TimeNosPocatecniPauza + TimeNosOn + TimeNosMezera) {
//Serial.println("NOS navrat na zacatek");
timeNosZero = millis() - TimeNosPocatecniPauza;
}
//-----------------POP--------------------
//-----------------POP by NOS Intake--------------------
if ( PopDoseIntakeValue == 0 ) {
//Serial.println("PopDoseIntakeValue = 0, Airpum Off");
digitalWrite(AirRelay, LOW);
if (timePopFromZero >= TimePopPocatecniPauza && timePopFromZero < TimePopPocatecniPauza + TimePopOn) {
//Serial.println("POP ON");
digitalWrite(PopRelay, HIGH);
}
if (timePopFromZero >= TimePopPocatecniPauza + TimePopOn) {
//Serial.println("Pop mezera");
digitalWrite(PopRelay, LOW);
}
if (timePopFromZero >= TimePopPocatecniPauza + TimePopOn + TimePopMezera) {
//Serial.println("POP navrat na zacatek");
timePopZero = millis() - TimePopPocatecniPauza;
}
} else {
//-----------------POP by AIR Intake--------------------
//Serial.println("PopDoseIntakeValue = 1, Airpum On");
digitalWrite(PopRelay, LOW);
if (timePopAirFromZero >= TimePopAirPocatecniPauza && timePopAirFromZero < TimePopAirPocatecniPauza + TimePopAirOn) {
//Serial.println("POP ON");
digitalWrite(AirRelay, HIGH);
}
if (timePopAirFromZero >= TimePopAirPocatecniPauza + TimePopAirOn) {
//Serial.println("PopAir mezera");
digitalWrite(AirRelay, LOW);
}
if (timePopAirFromZero >= TimePopAirPocatecniPauza + TimePopAirOn + TimePopAirMezera) {
//Serial.println("POPAir navrat na zacatek");
timePopAirZero = millis() - TimePopAirPocatecniPauza;
}
}
}
// Switch between intake to POP dose. It switch NOS or AIR pump.
PopDoseIntakeSwitchState = digitalRead(PopDoseIntakeSwitchPin);
if (PopDoseIntakeSwitchState == HIGH) {
PopDoseIntakeValue = 1;
} else {
PopDoseIntakeValue = 0;
}
WaterPotSwitchState = digitalRead(WaterPotSwitchPin);
if (WaterPotSwitchState == HIGH) {
unsigned long WaterCurrentMillis = millis();
WaterPotValue = 1023 - analogRead(WaterPotPin);
Correction = (120 * (950 / (950 - WaterPotValue)));
if (WaterSolLedState == HIGH) {
//Serial.println("High");
CorrectionF = Correction-100;
} else {
CorrectionF = Correction + 350;
//Serial.println("Low");
}
//CorrectionF = Correction;
if (WaterPotValue > 950) {
WaterSolLedState = HIGH;
} else {
//if (WaterSolLedState == LOW) {
if (WaterCurrentMillis - WaterPreviousMillis >= WaterPotValue + CorrectionF) {
WaterPreviousMillis = WaterCurrentMillis;
if (WaterSolLedState == LOW) {
WaterSolLedState = HIGH;
//CorrectionF = Correction + 10;
} else {
WaterSolLedState = LOW;
}
}
}
} else {
WaterSolLedState = LOW;
}
digitalWrite(WaterSolLedPin, WaterSolLedState);
// Water pump controll by pressure
WaterPressureValue = analogRead(WaterPressurePin);
WaterPumpSwitchState = digitalRead(WaterPumpSwitchPin);
//Serial.println(WaterPressureValue);
if (WaterPumpSwitchState == HIGH) {
//pressure sensosor give 0,6-2,2v, that means 120-450
if (WaterPressureValue > 450) {
//Serial.println("HIGH Pressure, water pump OFF");
WaterPumpLedState = LOW;
} else {
//Serial.println("LOW Pressure, water pump ON");
WaterPumpLedState = HIGH;
}
} else {
WaterPumpLedState = LOW;
}
digitalWrite(WaterPumpLedPin, WaterPumpLedState);
}