#include #include LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 24, 4); //D4 =SDA D3=SCL // Copin Slot int coinPin = 2; // Coin slot pulse input int timePerCoin = 1; // 24(actual) Seconds per coin volatile int pulseCount = 0; int coinSlotStatus; unsigned long timerSeconds,timerSecondsS = 0; unsigned long lastPulseTime,lastPulseTimeS = 0; unsigned int creditCoin,creditCoinS = 0; int pulseCoin,pulseCoinS; boolean userBalance = false; boolean noCoin = false; #define buzzer 12 //Relay int relayPins[] = {11,10,9,8}; int totalRelays = 4; //Buttons const int buttonPins[] = {7,6,5,A3,A2,A1}; const int numButtons = 4; //Servo #include Servo servo1; Servo servo2; const uint8_t RELAY_ON = LOW; const uint8_t RELAY_OFF = HIGH; String btnFunction; int waterStart,displayNa; void setup() { Serial.begin(9600); pinMode(coinPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(coinPin), countPulse, FALLING); Serial.println("Coin Timer Ready..."); servo1.attach(3); servo2.attach(4); lcd.init(); // initializing the LCD lcd.backlight(); lcd.clear(); lcdDisplay(" WELCOME TO" ," AUTOMATED CAR WASH" , " MACHINE SYSTEM",""); delay(2000); pinMode(buzzer,OUTPUT); buzzMe(2); //Relay OFF for (int i = 0; i < totalRelays; i++) { pinMode(relayPins[i], OUTPUT); digitalWrite(relayPins[i], RELAY_OFF); // Make sure all relays are OFF initially } //Buttons for (int i = 0; i < numButtons; i++) { pinMode(buttonPins[i], INPUT_PULLUP); // Button between pin & GND } btnFunction="Ready"; } void loop() { displayNa+=1; if(displayNa>=100){ lcdDisplay("Selected: " + btnFunction , "Wash: " + String(creditCoin) ,"Soap: " + String(creditCoinS) ,""); displayNa=0; } //Button for (int i = 0; i < numButtons; i++) { int state = digitalRead(buttonPins[i]); if (state == LOW) { // pressed buzzMe(1); if(i==0){ Serial.println("0"); btnFunction="Soap"; }else if(i==1){ Serial.println("1"); btnFunction="Cancel"; }else if(i==2){ Serial.println("2"); btnFunction="Wash"; }else if(i==3){ Serial.println("3"); btnFunction="Start"; timerSeconds = timePerCoin * creditCoin; timerSecondsS = timePerCoin * creditCoinS; waterStart=1; digitalWrite(relayPins[0], RELAY_OFF); } } } if(!noCoin ){ noCoin = true; }else{ coinSlotStatus=digitalRead(coinPin); delay(30); if(coinSlotStatus == 0){ if(btnFunction=="Soap"){ pulseCoinS+=1; creditCoinS=pulseCoinS; }else{ pulseCoin+=1; creditCoin=pulseCoin; btnFunction="Water"; } delay(30); }else{ } } Serial.print("W:"); Serial.print(creditCoin); Serial.print("S:"); Serial.println(creditCoinS); if(btnFunction=="Start"){ // ----- TIMER COUNTDOWN ----- static unsigned long lastTick = 0; if (millis() - lastTick >= 1000) { lastTick = millis(); if( pulseCoin>0 || pulseCoinS >0){ lcd.setCursor(11, 1); lcd.print(timerSeconds); lcd.setCursor(11, 2); lcd.print(timerSecondsS); if(waterStart==1){ if (timerSeconds > 0) { timerSeconds--; digitalWrite(relayPins[3], RELAY_ON); // Relay ON } else { digitalWrite(relayPins[3], RELAY_OFF); // Relay OFF pulseCoin=0; creditCoin=pulseCoin; waterStart=0; } Serial.print("Time left Water : "); Serial.println(timerSeconds); }else{ if (timerSecondsS > 0) { timerSecondsS--; digitalWrite(relayPins[3], RELAY_ON); // Relay ON } else { digitalWrite(relayPins[3], RELAY_OFF); // Relay OFF pulseCoinS=0; creditCoinS=pulseCoinS; } Serial.print("Time left Soap : "); Serial.println(timerSecondsS); } }else{ btnFunction="Ready"; } } } if(btnFunction=="Ready"){ //Start Coin Relay digitalWrite(relayPins[0], RELAY_ON); // Relay ON } if(btnFunction=="Cancel"){ creditCoin=0;creditCoinS=0; } //Serial.println(btnFunction); //lcdDisplay("Selected: " + btnFunction , "Wash: " + String(creditCoin) ,"Soap: " + String(creditCoinS) ,""); }