post mo un code na ginamit mo baka di yan un updated
Good day TS, sorry medyo natagalan mag update. Ito pala yung code na ginamit ko revised from ver. 1 & 2. Ok naman ang result. Problema ko nalang kung paano i edit yung rates. Tapos automatic pause pala yung time ng client kapag hindi na sya naka connect. Pwede kayang magawan ng script yun sa scheduler? Para continues running time ang pag consume. Thank you!
#include <SPI.h>
#include <Wire.h>
#include <Entropy.h>
#include <Ethernet.h>
#include <TelnetClient.h>
#include <LiquidCrystal_I2C.h>
#define randomSeed(s) srandom(s)
unsigned int mins = 0;
unsigned int hours = 0;
unsigned int days = 0;
unsigned int newmins = 0;
unsigned int newhours = 0;
int buttonPress = 0;
int ledState = LOW;
int gate = 0;
int interval = 0;
int start = 0;
const int ledpin = 5;
const int coinpin = 2;
const int buttonpin = 3;
const int disablepin = 4;
volatile float coins = 0;
unsigned long startMillis = 0;
unsigned long currentMillis = 0;
unsigned long previousMillis = 0;
String script;
uint32_t seed_value;
char letters[36] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
LiquidCrystal_I2C lcd(0x27, 20, 4);
EthernetClient client;
telnetClient tc(client);
byte clientMAC[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress clientIp (192, 168, 3, 31);
//put here your router's ip address
IPAddress mikrotikRouterIp (192, 168, 3, 1);
void setup() {
pinMode(buttonpin, INPUT);
pinMode(ledpin, OUTPUT);
pinMode(disablepin, OUTPUT);
lcd.begin();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("initializing....");
lcd.setCursor(0, 2);
lcd.print("by hotspot");
delay(5000);
digitalWrite(disablepin, HIGH);
Serial.begin(9600);
while (!Serial) {
;
// wait for serial port to connect. Needed for Leonardo and Due
}
Entropy.initialize();
attachInterrupt(digitalPinToInterrupt(coinpin), coinInterrupt, RISING);
pinMode(buttonpin, INPUT);
pinMode(ledpin, OUTPUT);
pinMode(disablepin, OUTPUT);
lcd.clear ();
}
void coinInterrupt() {
coins ++;
startMillis = millis(); //initial start time
}
void blinker() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(ledpin, ledState);
}
}
void loop() {
if (gate == 0) {
digitalWrite(disablepin, LOW);
lcd.setCursor(5, 0);
lcd.print(" HotSpot");
lcd.setCursor(3, 2);
lcd.print(" Press Button ");
lcd.setCursor(5, 3);
lcd.print(" to Start ");
while (digitalRead(buttonpin) == LOW) {
interval = 1000;
blinker();
}
lcd.clear ();
gate = 1;
coins = 0;
}
if ((gate == 1) && (start == 0)) {
digitalWrite(disablepin, HIGH);
digitalWrite(ledpin, LOW);
}
if (coins < 1) {
//Serial.println("Please Insert Coin");
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(3, 1);
lcd.print(" Insert Coins ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
}
currentMillis = millis(); //get the current time
if ((coins > 0) && (currentMillis - startMillis >= 100)) {
Dito na po ako nalilito, hehe
if (coins < 5) {
mins = coins * 10; // 10min/peso
}
if (coins >= 5 && coins < 10) {
mins = coins * 12; // 12min/peso
}
if (coins >= 10 && coins < 15) {
mins = coins * 13; // 13min/peso
}
if (coins >= 15) {
mins = coins * 25; // 30min/peso
}
if (coins >= 20) {
mins = coins * 30; // 35min/peso
}
if (coins >= 30) {
mins = coins * 35; // 45min/peso
}
hours = floor(mins / 60);
days = floor(hours / 24);
newhours = hours - (days * 24);
newmins = mins - (hours * 60);
Serial.println(coins);
Serial.println(days);
Serial.println(newhours);
Serial.println(newmins);
lcd.setCursor(0, 0);
lcd.print(" Credit: ");
lcd.print(coins, 0);
lcd.print(".00 ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(days);
lcd.print(" day ");
lcd.print(newhours);
lcd.print(" hr ");
lcd.print(newmins);
lcd.print(" min");
}
currentMillis = millis(); //get the current time
if ((coins > 0) && (currentMillis - startMillis >= 12000)) {
lcd.setCursor(0, 2);
lcd.print(" Press Button to");
lcd.setCursor(0, 3);
lcd.print(" Generate Code");
}
currentMillis = millis(); //get the current time
if ((coins > 0) && (currentMillis - startMillis >= 12000)) {
digitalWrite(disablepin, LOW);
digitalWrite(ledpin, HIGH);
while (digitalRead(buttonpin) == LOW) {
interval = 150;
blinker();
lcd.clear();
//do nothing
}
digitalWrite(ledpin, LOW);
seed_value = Entropy.random();
//Serial.println(seed_value);
randomSeed(seed_value);
char c[2] = {letters[random(36)]};
char o[2] = {letters[random(36)]};
char d[2] = {letters[random(36)]};
char e[2] = {letters[random(36)]};
lcd.setCursor(0, 0);
lcd.print(" CODE GENERATED ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.print(c);
lcd.print(" ");
lcd.print(o);
lcd.print(" ");
lcd.print(d);
lcd.print(" ");
lcd.print(e);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
script = "/ip hotspot user add name=";
script += c;
script += o;
script += d;
script += e;
script += " limit-uptime=";
script += mins;
script += "m profile=hotspot";
int script_len = script.length() + 1;
char mscript[script_len];
script.toCharArray(mscript, script_len);
Ethernet.begin (clientMAC);
//want to use dhcp?
if (!Ethernet.begin (clientMAC)) {
Serial.println("\r\nDHCP error");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DCHP error");
lcd.setCursor(0, 1);
lcd.print(coins);
while (1);
}
tc.setPromptChar('>');
//PUT HERE YOUR USERNAME/PASSWORD
if (tc.login(mikrotikRouterIp, "admin", "")) {
delay(1000);
tc.sendCommand(mscript);
delay(5000);
tc.disconnect();
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(c);
lcd.print(" ");
lcd.print(o);
lcd.print(" ");
lcd.print(d);
lcd.print(" ");
lcd.print(e);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" THANK YOU ");
delay(10000);
lcd.clear();
coins = 0;
gate = 0;
start = 0;
digitalWrite(disablepin, HIGH);
}
}
}