/*
*/
#include <EEPROM.h>
int addressLO = 2; // NumA //*******
int addressHI = 6; // numB //*******
// *** TM1637 Display ***
#include <TM1637Display.h>
#define CLK 2 // pin 2
#define DIO 3
TM1637Display display(CLK, DIO);
#define UP_BUTTON 4
#define DOWN_BUTTON 5
#define SELECT_BUTTON 6
#define motor 8 // motor pin 8
float numA = 11;
float valA = 0;
int displayA = 0;
float numB = 1;
float valB = 0;
int displayB = 0;
bool menuMain = 1;
int menuState = 0; // Menu up-down
bool setInMenu = 1;
int menuX = 0; // 0 = off 1=Menu A, 2=Menu B 3=...
byte voltHi = 0;
// *** funcTime_OnOff() /////
const int ledPin = 12;
unsigned long previousMillis = 0; // เก็บเวลาครั้งสุดท้ายที่ LED เปลี่ยนสถานะ
bool ledState = LOW; // สถานะเริ่มต้นของ LED
////////////////////////////
void setup() {
Serial.begin(115200);
display.setBrightness(0x0f); // 0-4
display.showNumberDecEx(1234, false, 1);
pinMode(A0, INPUT);
pinMode(motor, OUTPUT); // pump
digitalWrite(motor, LOW);
delay(2000);
digitalWrite(motor, HIGH); delay(1500);
digitalWrite(motor, LOW);
pinMode(UP_BUTTON, INPUT_PULLUP);
pinMode(DOWN_BUTTON, INPUT_PULLUP);
pinMode(SELECT_BUTTON, INPUT_PULLUP);
//*************************************
EEPROM.put(addressLO, numA); delay(100); // *** xxxxx
EEPROM.put(addressHI, numB); delay(100); // *** xxxxx
EEPROM.get(addressLO, numA); delay(100);
EEPROM.get(addressHI, numB); delay(100);
//**************************************
}
//////////////////////////////
void loop() {
if ((setInMenu == 1) && (digitalRead(SELECT_BUTTON) == LOW)) {
setMenu(); // goto set menu
}
float volte = analogRead(A0); delay(10);
// *** Display /////////////////////////
volte = map(volte, 0, 1023, 100, 190);
display.showNumberDecEx(volte, false);
volte = volte / 10;
Serial.println(volte, 4); //*************
///////////////////////////////////////
if (volte >= (numA+numB-0.1)) { // *** >HI
digitalWrite(motor, HIGH); delay(100);
funcTime_OnOff();
voltHi = 1;
}
if ((volte > numA) && (voltHi == 1)) { // *** HI
digitalWrite(motor, HIGH);
funcTime_OnOff();
}
if (volte <= numA) { // *** LO
delay(2000);
digitalWrite(motor, LOW);
voltHi = 0;
digitalWrite(ledPin, LOW);
previousMillis = 0; // เก็บเวลาครั้งสุดท้ายที่ LED เปลี่ยนสถานะ
bool ledState = LOW;
}
} // *** end loop
//////////////////////////////////////////
void setMenu()
{
digitalWrite(motor, LOW);
int whileOUT = 0; // loop setmenu
//int menuX = 0; // 0 = off 1=Menu A, 2=Menu B 3=...
while (whileOUT == 0) {
Serial.println("inMenu");
bool up = digitalRead(UP_BUTTON);
bool down = digitalRead(DOWN_BUTTON);
bool select = digitalRead(SELECT_BUTTON);
if ((digitalRead(SELECT_BUTTON) == LOW) && (menuMain == 1)) {
delay(300);
display.showNumberHexEx(0xAbCd, 0, false, 4); // abcd
menuX = 1; // goto menu A
delay(300);
}
//// menu A /////////////////////////////////////////////
if ((digitalRead(SELECT_BUTTON) == LOW) && (menuX == 1)) {
delay(300);
display.clear();
display.showNumberHexEx(0xA, 0, true, 1); delay(1000); // A
display.showNumberDecEx(numA*10, false);
Serial.println(numA, 1); delay(300);
menuMain = 0; // off menuMain
menuState = 1; // goto up-down
menuX = 2; // goto menu B
}
if ((digitalRead(UP_BUTTON) == LOW) && (menuState == 1)) {
delay(300);
if (numA < 19) { // 19 volt
numA = numA + 0.1; delay(300);
Serial.println(numA, 1); //***
displayA = (numA * 10);
display.showNumberDecEx(displayA, false); ///*****
menuState = 1; // up
}
}
if ((digitalRead(DOWN_BUTTON) == LOW) && (menuState == 1)) {
delay(300);
if (numA > 11) { // 11 volt
numA = numA - 0.1; delay(300);
Serial.println(numA, 1);
displayA = (numA * 10); //******************
display.showNumberDecEx(displayA, false);
menuState = 1; // down
}
}
//// menu A /////////////////////////////////////////////
//// menu B /////////////////////////////////////////////
if ((digitalRead(SELECT_BUTTON) == LOW) && (menuX == 2)) {
delay(300);
display.clear(); ///*********************
display.showNumberHexEx(0xb, 0, true, 1); delay(1000);
display.showNumberDecEx(numB*10, false);
Serial.println(numB, 4); delay(300);
menuMain = 0; // off menuMain
menuState = 2; // goto up-down
menuX = 3; // goto menu eeprom exit
}
if ((digitalRead(UP_BUTTON) == LOW) && (menuState == 2)) {
delay(300);
if (numB < 6) {
numB = numB + 0.1; delay(300);
Serial.println(numB, 1); //***
displayB = (numB * 10);
display.showNumberDecEx(displayB, false); ///***** B___
menuState = 2; // up
}
}
if ((digitalRead(DOWN_BUTTON) == LOW) && (menuState == 2)) {
delay(300);
if (numB > 1) {
numB = numB - 0.1; delay(300);
Serial.println(numB, 1); //***
displayB = (numB * 10);
display.showNumberDecEx(displayB, false); ///********
menuState = 2; //down
}
}
//// menu B /////////////////////////////////////////////
//// menu eeprom - exit menu //////////////////////////////
if ((digitalRead(SELECT_BUTTON) == LOW) && (menuX == 3)) {
delay(300);
display.clear();
display.showNumberHexEx(0xE00E, 0, false, 4);
EEPROM.put(addressLO, numA); delay(200);
EEPROM.put(addressHI, numB); delay(200);
Serial.println("Write EEPROM Exit."); ///*******
menuMain = 1; // set goto menuMain
whileOUT = 1; // out menu goto Loop
}
//// menu eeprom ////////////////////////////////////////
} // **** in while....
} // *** setMenu
///////////////////////////////////////////////////////
// ******
/////////////////
void funcTime_OnOff()
{
const long ledOnTime = 10000;
const long ledOffTime = 4000;
Serial.println("time On Off"); //*******************
unsigned long currentMillis = millis(); // อ่านเวลาปัจจุบัน
if (ledState == HIGH && currentMillis - previousMillis >= ledOnTime) {
// ถ้า LED เปิดอยู่และเวลาผ่านไปเกิน 2
ledState = LOW;
previousMillis = currentMillis; // รีเซ็ตเวลาเริ่มต้น
digitalWrite(ledPin, ledState); // ปิด LED
} else if (ledState == LOW && currentMillis - previousMillis >= ledOffTime) {
// ถ้า LED ปิดอยู่และเวลาผ่านไปเกิน 1
ledState = HIGH;
previousMillis = currentMillis; // รีเซ็ตเวลาเริ่มต้น
digitalWrite(ledPin, ledState); // เปิด LED
}
}
////////////////
/////////////////////////////
//display.setBrightness(0x0f); // 0-4
//display.showNumberDecEx(1234, false, 1); delay(1500);
//display.showNumberHexEx(0xAbCd, 0, false, 4); delay(200);
//display.showNumberHexEx(0xA, 0, false, 1); delay(200);
//display.showNumberHexEx(0xd, 0, false, 4); delay(200);
//display.showNumberHexEx(0xAbCd, 0, false, 4);