Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Include Libraries
- #include <EEPROM.h> //For EEPROM
- #include <ESP8266TelnetClient.h> //For ESP Telnet
- #include <ESP8266WiFi.h> //For ESP WiFi Core
- #include <ESP8266WiFiMulti.h> //For ESP Wifi
- #include <LiquidCrystal_I2C.h> //For I2C LCD
- #include <Wire.h> //For I2C Communication
- //----------------------------- ▼ Global Variables ▼ -------------------------------
- IPAddress mikrotikRouterIp (192, 168, 22, 1);
- unsigned long temp;
- //WiFi
- const char* user = "admin";
- const char* pwd = "Secreto#020202";
- const char* ssid = "MikroTik Wifi";
- const char* password = "Secreto#020202";
- String M_command;
- unsigned long previousMillis = 0; // will store last time LED was updated
- const long interval = 10000;
- long lcdCoin = 0;
- unsigned long previousResetMillis = 0;
- bool resetNow = false;
- unsigned long startTime = 0;
- unsigned long checkTime = 0;
- bool displayCoinCount = false;
- int dummyCounter = 0;
- unsigned long debounceDelay = 0;
- bool activateButton = false;
- bool editMode = false;
- bool displayMainMessage = true;
- bool displayVouch = false;
- int buttonStateTest1;
- int lastButtonStateTest1 = LOW;
- unsigned long lastDebounceTimeTest1 = 0;
- int buttonStateTest2;
- int lastButtonStateTest2 = LOW;
- unsigned long lastDebounceTimeTest2 = 0;
- int buttonStateTest3;
- int lastButtonStateTest3 = LOW;
- unsigned long lastDebounceTimeTest3 = 0;
- long userCode;
- int perPisoMin = 5; //ILANG MINUTES
- long computation = perPisoMin * 60L;
- long hourPromo = 3600UL;
- long promoComp;
- long promoHour = 3600UL;
- unsigned long promoTime;
- int counterMap = 0;
- int counter = 0;
- int counterChange = -1;
- int coins = 0;
- int lastCoinCount = 0;
- long promoFinal;
- long inBet = 0;
- //Promo Data
- //promo prices
- int promo1 = 10;
- int promo2 = 15;
- int promo3 = 20;
- int promo4 = 30;
- int promo5 = 150;
- //promo hour
- int promoOne = 1;
- int promoTwo = 6;
- int promoThree = 12;
- int promoFour = 24;
- int promoFive = 168;
- //LCD
- #define LCD_I2C_ADDR 0x27
- #define LCD_ROWS 4
- #define LCD_COLS 20
- //Pinouts
- #define buttonPinTest1 D7
- #define buttonPinTest2 D3
- #define buttonPinTest3 D6
- #define LED_BUILTIN D4
- #define coinSlotPin D5
- #define BACKLIGHT_PIN 13 //backlight pin
- //EEPROM Settings
- #define eeAddressA 0
- #define eeAddressB 10
- #define eeAddressC 20
- #define eeAddressD 30
- #define eeAddressE 40
- #define eeAddressF 50
- #define eeAddressG 60
- #define eeAddressH 70
- #define eeAddressI 80
- #define eeAddressJ 90
- #define eeAddressK 100
- //----------------------------- ▲ Global Variables ▲ -------------------------------
- //----------------------------- ▼ Global Objects ▼ ---------------------------------
- //ESP WiFi Multi Object
- ESP8266WiFiMulti WiFiMulti;
- //Main ESP WiFi Object
- WiFiClient client;
- //ESP Telnet Object
- ESP8266telnetClient tc(client);
- //LCD Object
- LiquidCrystal_I2C lcd(LCD_I2C_ADDR, LCD_COLS, LCD_ROWS);
- //----------------------------- ▲ Global Objects ▲ ---------------------------------
- void retrieve_data_from_eeprom() {
- EEPROM.get(eeAddressA, promo1);
- EEPROM.get(eeAddressB, promoOne);
- EEPROM.get(eeAddressC, promo2);
- EEPROM.get(eeAddressD, promoTwo);
- EEPROM.get(eeAddressE, promo3);
- EEPROM.get(eeAddressF, promoThree);
- EEPROM.get(eeAddressG, promo4);
- EEPROM.get(eeAddressH, promoFour);
- EEPROM.get(eeAddressI, promo5);
- EEPROM.get(eeAddressJ, promoFive);
- EEPROM.get(eeAddressK, perPisoMin);
- }
- ICACHE_RAM_ATTR void coinInserted() {
- coins++;
- if (coins < promo1)
- {
- promoFinal = computation * coins;
- }
- else if (coins >= promo1 && coins < promo2)
- {
- promoTime = promoOne * promoHour;
- promoComp = coins - promo1;
- inBet = promoComp * computation;
- promoFinal = inBet + promoTime;
- }
- else if (coins >= promo2 && coins < promo3)
- {
- promoTime = promoTwo * promoHour;
- promoComp = coins - promo2;
- inBet = promoComp * computation;
- promoFinal = inBet + promoTime;
- }
- else if (coins >= promo3 && coins < promo4)
- {
- promoTime = promoThree * promoHour;
- promoComp = coins - promo3;
- inBet = promoComp * computation;
- promoFinal = inBet + promoTime;
- }
- else if (coins >= promo4 && coins < promo5)
- {
- //promo4 = 30;
- //60 modulo
- promoTime = promoFour * promoHour;
- promoComp = coins - promo4;
- inBet = promoComp * computation;
- promoFinal = inBet + promoTime;
- }
- else if (coins >= promo5)
- {
- promoTime = promoFive * promoHour;
- promoComp = coins - promo5;
- inBet = promoComp * computation;
- promoFinal = inBet + promoTime;
- }
- //Serial.println(promoFinal);
- }
- void setup() {
- //Initialize EEPROM
- EEPROM.begin(512);
- //Initialize Serial
- Serial.begin(115200);
- //Do Nothing until Serial doesnt get initialized
- while (!Serial) {
- ;
- }
- //Get Our Saved Promo Data Back
- retrieve_data_from_eeprom();
- computation = perPisoMin * 60L;
- //coins = 60;
- pinMode(coinSlotPin, INPUT);
- attachInterrupt(D5, coinInserted, RISING);
- pinMode(buttonPinTest1, INPUT);
- pinMode(buttonPinTest2, INPUT);
- pinMode(buttonPinTest3, INPUT);
- //Initiate the LCD
- lcd.begin();
- lcd.backlight();
- lcd.setCursor(5, 0);
- lcd.print(F("WELCOME TO"));
- lcd.setCursor(0, 1);
- lcd.print(F("JHUNDECK HOTSPOT"));
- digitalWrite(LED_BUILTIN, HIGH);
- delay(1000);
- // Serial.println();
- // Serial.println();
- // Serial.println("Wait for WI-Fi...");
- // while (WiFiMulti.run() != WL_CONNECTED)
- // {
- // // Serial.print(".");
- // delay(500);
- // }
- //
- // Serial.println("");
- // Serial.println("WiFi connected");
- // Serial.print("IP Address : ");
- // Serial.println(WiFi.localIP());
- // Serial.println("Connecting....");
- tc.setPromptChar('>');
- //manual login pagka may problema
- // char key = 0;
- // Serial.println("\r\npress enter to begin:");
- // do
- // {
- // key = Serial.read();
- // Serial.println(key);
- // }
- //
- // //automatic login
- // while (key <= 0);
- tc.login(mikrotikRouterIp, user, pwd);
- }
- void loop() {
- editRates();
- readBtnTest1();
- readBtnTest2();
- readBtnTest3();
- //Serial.println(counter);
- editModeCheck();
- displayCheck();
- noNegative();
- //Serial.println(lcdCoin);
- displayCoin();
- displayVoucher();
- computation = perPisoMin * 60L;
- userCode = random(10000, 99999);
- //Serial.println(promoFinal);
- //Serial.println(counter);
- }
- void readBtnTest1() {
- int reading = digitalRead(buttonPinTest1);
- if (reading != lastButtonStateTest1) {
- lastDebounceTimeTest1 = millis();
- }
- if ((millis() - lastDebounceTimeTest1) > debounceDelay) {
- if (reading != buttonStateTest1) {
- buttonStateTest1 = reading;
- if (buttonStateTest1 == HIGH)
- {
- counter++;
- }
- }
- }
- lastButtonStateTest1 = reading;
- }
- void readBtnTest2() {
- int reading = digitalRead(buttonPinTest2);
- if (reading != lastButtonStateTest2) {
- lastDebounceTimeTest2 = millis();
- }
- if ((millis() - lastDebounceTimeTest2) > debounceDelay) {
- if (reading != buttonStateTest2) {
- buttonStateTest2 = reading;
- if (buttonStateTest2 == HIGH)
- {
- counter--;
- }
- }
- }
- lastButtonStateTest2 = reading;
- }
- void readBtnTest3() {
- int reading = digitalRead(buttonPinTest3);
- if (reading != lastButtonStateTest3) {
- lastDebounceTimeTest3 = millis();
- }
- if ((millis() - lastDebounceTimeTest3) > debounceDelay) {
- if (reading != buttonStateTest3) {
- buttonStateTest3 = reading;
- if (buttonStateTest3 == HIGH)
- {
- counterChange++;
- //Serial.println(counterChange);
- }
- }
- }
- lastButtonStateTest3 = reading;
- }
- void booleanCheck() {
- if (counter == 5)
- {
- activateButton = true;
- }
- }
- void editModeCheck() {
- if (counterChange > 0 && displayMainMessage == true)
- {
- counterChange = 0;
- }
- if (coins > 0)
- {
- userCode = random(10000, 99999);
- displayMainMessage = false;
- displayCoinCount = true; //map
- if (counterChange == 1)
- {
- detachInterrupt(D5);
- displayVouch = true;
- displayVoucher();
- displayVouch = true;
- displayCoinCount = false;
- resetCountStart();
- lcdCoin = coins;
- coins = 0;
- }
- }
- if (displayVouch == true)
- {
- counterMap = 1;
- displayVouch = false;
- //Serial.println("Wait reset");
- }
- if (counterMap == 1 && displayVouch == false)
- {
- resetAfter(6);
- if (resetNow == true && displayCoinCount == false || counterChange == 2)
- {
- lcd.clear();
- //Serial.println("Reset ");
- resetVariable();
- counterMap = 0;
- //map666
- attachInterrupt(D5, coinInserted, RISING);
- }
- }
- }
- void editRates() {
- if (counter == 5 && activateButton == false && dummyCounter == 0)
- {
- //2242
- dummyCounter++;
- editMode = true;
- }
- else if (activateButton == true)
- {
- lcd.clear();
- displayMainMessage = false;
- counter = 0;
- activateButton = false;
- editMode = true;
- }
- if (editMode == true)
- {
- displayEditMode();
- displayMainMessage = false;
- }
- }
- void resetAfter(int sec) {
- unsigned long currentResetMillis = millis();
- sec *= 1000;
- if (currentResetMillis - previousResetMillis >= sec && !resetNow) {
- previousResetMillis = currentResetMillis;
- resetNow = true;
- ////Serial.println("Reset Now");
- }
- }
- void resetCountStart() {
- unsigned long currentResetMillis = millis();
- previousResetMillis = currentResetMillis;
- resetNow = false;
- }
- void displayCheck() {
- if (displayMainMessage == true)
- {
- booleanCheck();
- //55
- lcdCoin = 0;
- editMode = false;
- lcd.setCursor(0, 0);
- lcd.print(F("Jhundeck Wi-Fi Vendo"));
- lcd.setCursor(0, 1);
- lcd.print(F(" Promo Price/Hours "));
- lcd.setCursor(0, 2);
- lcd.print(promo1);
- lcd.print(F("/"));
- lcd.print(promoOne);
- lcd.print(F(" "));
- lcd.print(promo2);
- lcd.print(F("/"));
- lcd.print(promoTwo);
- lcd.print(F(" "));
- lcd.print(promo3);
- lcd.print(F("/"));
- lcd.print(promoThree);
- lcd.print(F(" "));
- lcd.setCursor(0, 3);
- lcd.print(promo4);
- lcd.print(F("/"));
- lcd.print(promoFour);
- lcd.print(F(" "));
- lcd.print(promo5);
- lcd.print(F("/"));
- lcd.print(promoFive);
- lcd.print(F(" "));
- }
- }
- void displayEditMode() {
- if (editMode == true)
- {
- //write eeprom
- if (counterChange == 0)
- {
- lcd.setCursor(0, 0);
- lcd.print(F("EDIT MINUTE PER PISO"));
- lcd.setCursor(0, 1);
- lcd.print(counter);
- lcd.print(F(" "));
- perPisoMin = counter;
- EEPROM.put(eeAddressK, perPisoMin);
- EEPROM.commit();
- }
- else if (counterChange == 1)
- {
- lcd.setCursor(0, 0);
- lcd.print(F(" EDIT PROMO 1 PRICE "));
- lcd.setCursor(0, 1);
- lcd.print(counter);
- lcd.print(F(" "));
- promo1 = counter;
- EEPROM.put(eeAddressA, promo1);
- EEPROM.commit();
- }
- else if (counterChange == 2)
- {
- lcd.setCursor(0, 0);
- lcd.print(F(" EDIT PROMO 1 HOURS "));
- lcd.setCursor(0, 1);
- lcd.print(counter);
- lcd.print(F(" "));
- promoOne = counter;
- EEPROM.put(eeAddressB, promoOne);
- EEPROM.commit();
- }
- else if (counterChange == 3)
- {
- lcd.setCursor(0, 0);
- lcd.print(F(" EDIT PROMO 2 PRICE "));
- lcd.setCursor(0, 1);
- lcd.print(counter);
- lcd.print(F(" "));
- promo2 = counter;
- EEPROM.put(eeAddressC, promo2);
- EEPROM.commit();
- }
- else if (counterChange == 4)
- {
- lcd.setCursor(0, 0);
- lcd.print(F(" EDIT PROMO 2 HOURS "));
- lcd.setCursor(0, 1);
- lcd.print(counter);
- lcd.print(F(" "));
- promoTwo = counter;
- EEPROM.put(eeAddressD, promoTwo);
- EEPROM.commit();
- }
- else if (counterChange == 5)
- {
- lcd.setCursor(0, 0);
- lcd.print(F( " EDIT PROMO 3 PRICE "));
- lcd.setCursor(0, 1);
- lcd.print(counter);
- lcd.print(F(" "));
- promo3 = counter;
- EEPROM.put(eeAddressE, promo3);
- EEPROM.commit();
- }
- else if (counterChange == 6)
- {
- lcd.setCursor(0, 0);
- lcd.print(F(" EDIT PROMO 3 HOURS "));
- lcd.setCursor(0, 1);
- lcd.print(counter);
- lcd.print(F(" "));
- promoThree = counter;
- EEPROM.put(eeAddressF, promoThree);
- EEPROM.commit();
- }
- else if (counterChange == 7)
- {
- lcd.setCursor(0, 0);
- lcd.print(F(" EDIT PROMO 4 PRICE "));
- lcd.setCursor(0, 1);
- lcd.print(counter);
- lcd.print(F(" "));
- promo4 = counter;
- EEPROM.put(eeAddressG, promo4);
- EEPROM.commit();
- }
- else if (counterChange == 8)
- {
- lcd.setCursor(0, 0);
- lcd.print(F(" EDIT PROMO 4 HOURS "));
- lcd.setCursor(0, 1);
- lcd.print(counter);
- lcd.print(F(" "));
- promoFour = counter;
- EEPROM.put(eeAddressH, promoFour);
- EEPROM.commit();
- }
- else if (counterChange == 9)
- {
- lcd.setCursor(0, 0);
- lcd.print(F(" EDIT PROMO 5 PRICE "));
- lcd.setCursor(0, 1);
- lcd.print(counter);
- lcd.print(F(" "));
- promo5 = counter;
- EEPROM.put(eeAddressI, promo5);
- EEPROM.commit();
- }
- else if (counterChange == 10)
- {
- lcd.setCursor(0, 0);
- lcd.print(F(" EDIT PROMO 5 HOURS "));
- lcd.setCursor(0, 1);
- lcd.print(counter);
- lcd.print(F(" "));
- promoFive = counter;
- EEPROM.put(eeAddressJ, promoFive);
- EEPROM.commit();
- }
- else if (counterChange == 11)
- {
- EEPROM.put(eeAddressA, promo1);
- EEPROM.put(eeAddressB, promoOne);
- EEPROM.put(eeAddressC, promo2);
- EEPROM.put(eeAddressD, promoTwo);
- EEPROM.put(eeAddressE, promo3);
- EEPROM.put(eeAddressF, promoThree);
- EEPROM.put(eeAddressG, promo4);
- EEPROM.put(eeAddressH, promoFour);
- EEPROM.put(eeAddressI, promo5);
- EEPROM.put(eeAddressJ, promoFive);
- EEPROM.put(eeAddressK, perPisoMin);
- EEPROM.commit();
- lcd.setCursor(0, 0);
- lcd.print(F(" PROMO 1 TO 5 PRICE "));
- lcd.setCursor(0, 1);
- lcd.print(F("AND HOURS ARE SAVED!"));
- lcd.setCursor(0, 2);
- lcd.print(F("PLEASE WAIT........."));
- lcd.setCursor(0, 3);
- lcd.print(F(" "));
- counterChange = 0;
- delay(3000);
- resetVariable();
- editMode = false;
- displayMainMessage = true;
- displayCheck();
- }
- }
- }
- void noNegative() {
- if (counter < 0)
- {
- counter = 0;
- }
- }
- void displayVoucher() {
- if (displayVouch)
- {
- // M_command += "/ip hotspot user add name=";
- // M_command += userCode;
- // M_command += " limit-uptime=";
- // M_command += promoFinal;
- // int command_len = M_command.length() + 1;
- // char M_F_command[command_len];
- // M_command.toCharArray(M_F_command, command_len);
- // tc.sendCommand(M_F_command);
- coins = 0;
- lcd.setCursor(0, 0);
- lcd.print(F("Your voucher code is"));
- lcd.setCursor(0, 1);
- lcd.print(F(" <<"));
- lcd.print(userCode);
- lcd.print(F(">> "));
- //map320
- //
- // lcd.setCursor(0, 1);
- // lcd.print(promoFinal);
- format(promoFinal);
- // M_command = "";
- // memset(M_F_command , 0, sizeof(M_F_command ));
- }
- }
- void resetVariable() {
- counterChange = 0;
- displayVouch = false;
- editMode = false;
- displayMainMessage = true;
- counter = 0;
- dummyCounter = 0;
- displayCoinCount = false;
- coins = 0;
- }
- void displayCoin() {
- if (displayCoinCount)
- {
- lcd.setCursor(0, 0);
- lcd.print(F("Coins Inserted : "));
- lcd.setCursor(0, 1);
- lcd.print(coins);
- lcd.print(F(" "));
- lcdCoin = coins;
- // lcd.setCursor(4, 0);
- // // checkPromo();
- //
- // lcd.print(promoFinal);
- temp = promoFinal;
- format(promoFinal);
- }
- }
- void checkPromo() {
- // if (lcdCoin < promo1)
- // {
- // promoFinal = computation * lcdCoin;
- // }
- // else if (lcdCoin >= promo1 && lcdCoin < promo2)
- // {
- // promoTime = promoOne * promoHour;
- // promoComp = lcdCoin % promo1; //40 yung coin count, pumasok sa coin count na 30 tas may sampong piso na per rate na in between
- // inBetween = promoComp * computation; //REMAINDER MULTIPLY MO SA PRESYO PER PISO TAS ADD MO YUNG REMAINDER
- // promoFinal = inBetween + promoTime;
- // }
- // else if (lcdCoin >= promo2 && lcdCoin < promo3)
- // {
- // promoTime = promoTwo * promoHour;
- // promoComp = lcdCoin % promo2; //40 yung coin count, pumasok sa coin count na 30 tas may sampong piso na per rate na in between
- // inBetween = promoComp * computation; //REMAINDER MULTIPLY MO SA PRESYO PER PISO TAS ADD MO YUNG REMAINDER
- // promoFinal = inBetween + promoTime;
- //
- // }
- // else if (lcdCoin >= promo3 && lcdCoin < promo4)
- // {
- // promoComp = lcdCoin % promo3; //40 yung coin count, pumasok sa coin count na 30 tas may sampong piso na per rate na in between
- // inBetween = promoComp * computation; //REMAINDER MULTIPLY MO SA PRESYO PER PISO TAS ADD MO YUNG REMAINDER
- // promoTime = promoThree * promoHour;
- // promoFinal = inBetween + promoTime; //FINAL SHIT
- // }
- // else if (lcdCoin == promo4)
- // {
- // promoTime = promoFour * promoHour;
- // promoFinal = inBetween + promoTime;
- // }
- // else if (lcdCoin >= promo4 && lcdCoin < promo5)
- // {
- // promoComp = lcdCoin % promo4;
- // inBetween = promoComp * computation;
- // promoTime = promoFour * promoHour;
- // promoFinal = inBetween + promoTime;
- // }
- // else if (lcdCoin >= promo5)
- // {
- // promoComp = lcdCoin % promo5; //40 yung coin count, pumasok sa coin count na 30 tas may sampong piso na per rate na in between
- // inBetween = promoComp * computation; //REMAINDER MULTIPLY MO SA PRESYO PER PISO TAS ADD MO YUNG REMAINDER
- // promoTime = promoFive * promoHour;
- // promoFinal = inBetween + promoTime; //FINAL SHIT
- // }
- }
- void format( long seconds) {
- long W = seconds / 604800;
- seconds = seconds % 604800;
- long D = seconds / 86400;
- seconds = seconds % 86400; //map999
- long H = seconds / 3600;
- seconds = seconds % 3600;
- long M = seconds / 60;
- long S = seconds % 60;
- lcd.setCursor(0, 2);
- lcd.print(F("Voucher Duration : "));
- lcd.setCursor(0, 3);
- lcd.print(W);
- lcd.print(F("W"));
- lcd.print(F("-"));
- lcd.print(D);
- lcd.print(F("D"));
- lcd.print(F("-"));
- lcd.print(H);
- lcd.print(F("H"));
- lcd.print(F(":"));
- lcd.print(M);
- lcd.print(F("M"));
- lcd.print(F(" "));
- }
Add Comment
Please, Sign In to add comment