#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <EEPROM.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // initalize the display
//U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE);
// init pin
#define TEST 44 //STOP
#define SET 49 //ESC
#define ZERO 46 //DOWN
#define CAL 48 //UP
#define ENTER 47 //PRINT
int progress = 0;
bool in_progress = false;
bool in_home = false;
bool in_pretest = false;
bool in_test = false;
bool is_test = false;
bool in_preprint = false;
bool in_print = false;
bool in_prezero = false;
bool in_zero = false;
bool in_pascal = false;
bool in_precal = false;
bool in_cal = false;
bool in_set = false;
bool in_set_gas = false;
bool in_set_time = false;
bool in_set_bengkel = false;
bool in_set_bengkel_nama = false;
bool in_set_bengkel_alamat = false;
bool in_set_bengkel_penguji = false;
bool in_set_pas_old = false;
bool in_set_pas_new = false;
int iset = 1;
int iset_gas = 1;
String datetime = "";
int iset_time = 1;
int iDay = 0;
int iMonth = 0;
int iYear = 0;
int iHour = 0;
int iMinute = 0;
int iSecond = 0;
bool isTimeSet = false;
int iset_bengkel = 1;
bool isBengkelSet = false;
int iset_nama = 1;
bool isNamaSet = false;
int iset_alamat = 1;
bool isAlamatSet = false;
int iset_penguji = 1;
bool isPengujiSet = false;
int iset_cal = 1;
bool isCalSet = false;
int iset_cal_gas = 1;
int iset_pas = 1;
bool isPasSet = false;
byte datas[50];
int iType = 0;
int iHeat = 1;
int16_t iHC;
int16_t iCO;
int16_t iCO2;
int16_t iO2;
int16_t iLamda;
int16_t iAFR;
String sType = "";
String sHC = "";
String sCO = "";
String sCO2 = "";
String sO2 = "";
String sLamda = "";
String sAFR = "";
String sBengkel = "";
String sAlamat1 = "";
String sAlamat2 = "";
String sPenguji = "";
String sPass = "12345";
int eepromOffset = 0;
int eepromOffsetPas;
char hurufs[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int iset_huruf = 0;
int ih_nama[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int ih_alamat1[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int ih_alamat2[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int ih_penguji[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int ih_cal[4] = {0,0,0,0};
int ih_pas[5] = {0,0,0,0,0};
union ArrayToInteger {
int16_t integer;
byte array[2];
};
void draw_loading()
{
u8g2.drawStr(30, 50, "Loading...");
u8g2.drawFrame(5, 10, 118, 20);
u8g2.drawBox(10, 15, progress, 10);
}
void draw_home()
{
u8g2.drawFrame(5, 5, 118, 45);
u8g2.setFont(u8g2_font_t0_14_tf);
u8g2.drawStr(20, 18, "AUTOMOTIVE");
u8g2.drawStr(20, 32, "EMISSION");
u8g2.drawStr(20, 46, "ANALYZER");
u8g2.setFont(u8g2_font_4x6_tf);
u8g2.setFont(u8g2_font_tiny5_tf);
u8g2.drawStr(50, 60, "imtech");
}
void draw_pretest()
{
u8g2.setFont(u8g2_font_6x12_tf);
if(iHeat==0){
u8g2.drawStr(7, 30, "Press TEST to Start");
} else {
u8g2.drawStr(7, 30, " ... WARMING ... ");
delay(1000);
datas[2+3] = 1;
//Ndir_ReadData();
GetAllValues();
}
}
void draw_test()
{
//u8g2.setFont(u8g2_font_5x8_tf);
u8g2.setFont(u8g2_font_4x6_tf);
u8g2.drawStr(5, 10, "FUEL TYPE");
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 20, "HC");
u8g2.drawStr(5, 30, "CO");
u8g2.drawStr(5, 40, "CO");
u8g2.setFont(u8g2_font_4x6_tf);
u8g2.drawStr(18, 40, "2");
u8g2.setFont(u8g2_font_6x10_tf);
u8g2.drawStr(5, 50, "O");
u8g2.setFont(u8g2_font_4x6_tf);
u8g2.drawStr(12, 50, "2");
u8g2.setFont(u8g2_font_4x6_tf);
u8g2.drawStr(5, 60, "Lamda : ");
u8g2.drawStr(75, 60, "AFR : ");
u8g2.drawStr(50, 10, ":");
u8g2.drawStr(50, 20, ":");
u8g2.drawStr(50, 30, ":");
u8g2.drawStr(50, 40, ":");
u8g2.drawStr(50, 50, ":");
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(60, 10, sType.c_str());
u8g2.drawStr(60, 20, sHC.c_str());
u8g2.drawStr(60, 30, sCO.c_str());
u8g2.drawStr(60, 40, sCO2.c_str());
u8g2.drawStr(60, 50, sO2.c_str());
u8g2.drawStr(35, 60, sLamda.c_str());
u8g2.drawStr(95, 60, sAFR.c_str());
u8g2.setFont(u8g2_font_6x10_tf);
u8g2.drawStr(100, 18, "ppm");
u8g2.drawStr(100, 30, "%");
u8g2.drawStr(100, 40, "%");
u8g2.drawStr(100, 50, "%");
}
void draw_preprint()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 30, "Press ENTER to Print");
}
void draw_print()
{
u8g2.drawStr(30, 50, "Printing...");
u8g2.drawFrame(5, 10, 118, 20);
u8g2.drawBox(10, 15, progress, 10);
if(progress==20){
//printing_header();
}
if(progress==40){
//printing_result();
}
if(progress==60){
//printing_footer();
}
}
void draw_prezero()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(7, 30, "Press ZERO to Start");
}
void draw_zero()
{
u8g2.drawStr(30, 50, "Zeroing...");
u8g2.drawFrame(5, 10, 118, 20);
u8g2.drawBox(10, 15, progress, 10);
}
void draw_pascal()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 10, "PASSWORD :");
u8g2.drawStr(35, 30, " ");
u8g2.drawStr(35, 35, " ");
u8g2.drawStr(50, 55, "OK");
u8g2.drawStr(50, 57, " ");
draw_pas();
}
void draw_precal()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 10, "KALIBRASI :");
u8g2.drawStr(15, 25, "GAS = ");
u8g2.drawStr(15, 38, "Value = ");
u8g2.drawStr(50, 55, "START");
u8g2.drawStr(50, 57, " ");
if(iset_cal_gas==1){
u8g2.drawStr(64, 25, "HC");
}
else if(iset_cal_gas==2){
u8g2.drawStr(64, 25, "CO");
}
else if(iset_cal_gas==3){
u8g2.drawStr(64, 25, "CO2");
}
else if(iset_cal_gas==4){
u8g2.drawStr(64, 25, "O2");
}
else if(iset_cal_gas==5){
u8g2.drawStr(64, 25, "NO");
}
String sv;
sv = String(ih_cal[0]); u8g2.drawStr(63, 38, sv.c_str());
sv = String(ih_cal[1]); u8g2.drawStr(69, 38, sv.c_str());
sv = String(ih_cal[2]); u8g2.drawStr(75, 38, sv.c_str());
sv = String(ih_cal[3]); u8g2.drawStr(81, 38, sv.c_str());
if(iset_cal==1){
if(isCalSet==false) { u8g2.drawStr(15, 27, "___"); } else { u8g2.drawStr(115, 25, "*"); }
} else if(iset_cal==2){
if(isCalSet==false) { u8g2.drawStr(64, 40, "_"); } else { u8g2.drawStr(64, 46, "*"); }
} else if(iset_cal==3){
if(isCalSet==false) { u8g2.drawStr(70, 40, "_"); } else { u8g2.drawStr(70, 46, "*"); }
} else if(iset_cal==4){
if(isCalSet==false) { u8g2.drawStr(76, 40, "_"); } else { u8g2.drawStr(76, 46, "*"); }
} else if(iset_cal==5){
if(isCalSet==false) { u8g2.drawStr(82, 40, "_"); } else { u8g2.drawStr(82, 46, "*"); }
} else if(iset_cal==6){
u8g2.drawStr(50, 57, "_____");
}
}
void draw_cal()
{
u8g2.drawStr(30, 50, "Kalibrasi...");
u8g2.drawFrame(5, 10, 118, 20);
u8g2.drawBox(10, 15, progress, 10);
}
void draw_set()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 10, "SETTING :");
u8g2.drawStr(30, 25, "GAS");
u8g2.drawStr(30, 35, "Date & Time");
u8g2.drawStr(30, 45, "Bengkel");
u8g2.drawStr(30, 55, "Password");
if(iset==1){
u8g2.drawStr(15, 25, "->");
} else if(iset==2){
u8g2.drawStr(15, 35, "->");
} else if(iset==3){
u8g2.drawStr(15, 45, "->");
} else if(iset==4){
u8g2.drawStr(15, 55, "->");
}
}
void draw_set_gas()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 10, "SET FUEL TYPE :");
u8g2.drawStr(30, 25, "Gasoline");
u8g2.drawStr(30, 37, "LPG");
u8g2.drawStr(30, 49, "CNG");
u8g2.drawStr(30, 61, "Ethanol");
if(iset_gas==0){
u8g2.drawStr(15, 25, "->");
} else if(iset_gas==1){
u8g2.drawStr(15, 37, "->");
} else if(iset_gas==2){
u8g2.drawStr(15, 49, "->");
} else if(iset_gas==3){
u8g2.drawStr(15, 61, "->");
}
if(iType==0){
u8g2.drawStr(5, 25, "*");
} else if(iType==1){
u8g2.drawStr(5, 37, "*");
} else if(iType==2){
u8g2.drawStr(5, 49, "*");
} else if(iType==3){
u8g2.drawStr(5, 61, "*");
}
}
void draw_set_time()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 10, "SET DATE TIME :");
u8g2.drawStr(10, 30, String(iDay).c_str());
u8g2.drawStr(22, 30, "-");
u8g2.drawStr(28, 30, String(iMonth).c_str());
u8g2.drawStr(40, 30, "-");
u8g2.drawStr(46, 30, String(iYear).c_str());
u8g2.drawStr(76, 30, String(iHour).c_str());
u8g2.drawStr(88, 30, ":");
u8g2.drawStr(94, 30, String(iMinute).c_str());
u8g2.drawStr(106, 30, ":");
u8g2.drawStr(112, 30, String(iSecond).c_str());
u8g2.drawStr(10, 32, " ");
u8g2.drawStr(50, 50, "SAVE");
u8g2.drawStr(50, 52, " ");
if(iset_time==1){
if(isTimeSet==false){ u8g2.drawStr(10, 32, "__"); } else { u8g2.drawStr(10, 37, "++"); }
}
else if(iset_time==2){
if(isTimeSet==false){ u8g2.drawStr(28, 32, "__"); } else { u8g2.drawStr(28, 37, "++"); }
}
else if(iset_time==3){
if(isTimeSet==false){ u8g2.drawStr(46, 32, "____"); } else { u8g2.drawStr(46, 37, "++++"); }
}
else if(iset_time==4){
if(isTimeSet==false){ u8g2.drawStr(76, 32, "__"); } else { u8g2.drawStr(76, 37, "++"); }
}
else if(iset_time==5){
if(isTimeSet==false){ u8g2.drawStr(94, 32, "__"); } else { u8g2.drawStr(94, 37, "++"); }
}
else if(iset_time==6){
if(isTimeSet==false){ u8g2.drawStr(112, 32, "__"); } else { u8g2.drawStr(112, 37, "++"); }
}
else if(iset_time==7){
u8g2.drawStr(50, 52, "____");
}
}
void draw_set_bengkel()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 10, "SETTING BENGKEL :");
u8g2.drawStr(30, 25, "Nama");
u8g2.drawStr(30, 40, "Alamat");
u8g2.drawStr(30, 55, "Penguji");
if(iset_bengkel==1){
u8g2.drawStr(15, 25, "->");
} else if(iset_bengkel==2){
u8g2.drawStr(15, 40, "->");
} else if(iset_bengkel==3){
u8g2.drawStr(15, 55, "->");
}
}
void draw_set_bengkel_nama()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 10, "SET NAMA BENGKEL :");
for (int i = 0; i < 20; i++) {
String str(hurufs[ih_nama[i]]);
u8g2.drawStr(5 + (i*6), 30, str.c_str());
}
u8g2.drawStr(5, 32, " ");
if(iset_nama==21){
u8g2.drawStr(50, 52, "____");
} else {
if(isNamaSet==false){ u8g2.drawStr((6*(iset_nama-1))+5, 32, "_"); } else { u8g2.drawStr((6*(iset_nama-1))+5, 37, "+"); }
}
u8g2.drawStr(50, 50, "SAVE");
u8g2.drawStr(46, 52, " ");
}
void draw_set_bengkel_alamat()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 10, "SET ALAMAT BENGKEL :");
for (int i = 0; i < 20; i++) {
String str(hurufs[ih_alamat1[i]]);
u8g2.drawStr(5 + (i*6), 25, str.c_str());
}
u8g2.drawStr(5, 26, " ");
for (int i = 0; i < 20; i++) {
String str(hurufs[ih_alamat2[i]]);
u8g2.drawStr(5 + (i*6), 40, str.c_str());
}
u8g2.drawStr(5, 41, " ");
if(iset_alamat==41){
u8g2.drawStr(50, 57, "____");
} else {
if(isAlamatSet==false)
{
if(iset_alamat < 21)
{
u8g2.drawStr((6*(iset_alamat-1))+5, 26, "_");
} else {
u8g2.drawStr((6*(iset_alamat-21))+5, 41, "_");
}
}
else
{
if(iset_alamat < 21)
{
u8g2.drawStr((6*(iset_alamat-1))+5, 32, "+");
} else {
u8g2.drawStr((6*(iset_alamat-21))+5, 47, "+");
}
}
}
u8g2.drawStr(50, 55, "SAVE");
u8g2.drawStr(46, 57, " ");
}
void draw_set_bengkel_penguji()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 10, "SET NAMA PENGUJI :");
for (int i = 0; i < 20; i++) {
String str(hurufs[ih_penguji[i]]);
u8g2.drawStr(5 + (i*6), 30, str.c_str());
}
u8g2.drawStr(5, 32, " ");
if(iset_penguji==21){
u8g2.drawStr(50, 52, "____");
} else {
if(isPengujiSet==false){ u8g2.drawStr((6*(iset_penguji-1))+5, 32, "_"); } else { u8g2.drawStr((6*(iset_penguji-1))+5, 37, "+"); }
}
u8g2.drawStr(50, 50, "SAVE");
u8g2.drawStr(46, 52, " ");
}
void draw_set_pas_old()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 10, "OLD PASSWORD :");
u8g2.drawStr(35, 30, " ");
u8g2.drawStr(35, 35, " ");
u8g2.drawStr(50, 55, "OK");
u8g2.drawStr(50, 57, " ");
draw_pas();
}
void draw_set_pas_new()
{
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(5, 10, "SET PASSWORD :");
u8g2.drawStr(35, 30, " ");
u8g2.drawStr(35, 35, " ");
u8g2.drawStr(50, 55, "OK");
u8g2.drawStr(50, 57, " ");
draw_pas();
}
void draw_pas()
{
String sv;
sv = String(ih_pas[0]); u8g2.drawStr(35, 30, sv.c_str());
sv = String(ih_pas[1]); u8g2.drawStr(41, 30, sv.c_str());
sv = String(ih_pas[2]); u8g2.drawStr(47, 30, sv.c_str());
sv = String(ih_pas[3]); u8g2.drawStr(53, 30, sv.c_str());
sv = String(ih_pas[4]); u8g2.drawStr(59, 30, sv.c_str());
if(iset_pas==1){
if(isPasSet==false) { u8g2.drawStr(35, 35, "_"); } else { u8g2.drawStr(35, 41, "*"); }
} else if(iset_pas==2){
if(isPasSet==false) { u8g2.drawStr(41, 35, "_"); } else { u8g2.drawStr(41, 41, "*"); }
} else if(iset_pas==3){
if(isPasSet==false) { u8g2.drawStr(47, 35, "_"); } else { u8g2.drawStr(47, 41, "*"); }
} else if(iset_pas==4){
if(isPasSet==false) { u8g2.drawStr(53, 35, "_"); } else { u8g2.drawStr(53, 41, "*"); }
} else if(iset_pas==5){
if(isPasSet==false) { u8g2.drawStr(59, 35, "_"); } else { u8g2.drawStr(59, 41, "*"); }
} else if(iset_pas==6){
u8g2.drawStr(50, 57, "__");
}
}
void setup() {
// put your setup code here, to run once:
u8g2.begin(); // initialize u8g2 drawing
// put your setup code here, to run once:
pinMode(TEST, INPUT); digitalWrite(TEST, HIGH);
pinMode(SET, INPUT); digitalWrite(SET, HIGH);
pinMode(ZERO, INPUT); digitalWrite(ZERO, HIGH);
pinMode(CAL, INPUT); digitalWrite(CAL, HIGH);
pinMode(ENTER, INPUT); digitalWrite(ENTER, HIGH);
ReadSetBengkel();
in_progress = true;
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
u8g2.clearBuffer(); // clear U8G2 drawing buffer
do
{
//delay(3000);
if(in_progress==true){
draw_loading();
}
else if(in_home==true){
draw_home();
}
else if(in_pretest==true){
draw_pretest();
}
else if(in_test==true){
draw_test();
}
else if(in_preprint==true){
draw_preprint();
}
else if(in_print==true){
draw_print();
}
else if(in_prezero==true){
draw_prezero();
}
else if(in_zero==true){
draw_zero();
}
else if(in_pascal==true){
draw_pascal();
}
else if(in_precal==true){
draw_precal();
}
else if(in_cal==true){
draw_cal();
}
else if(in_set==true){
draw_set();
}
else if(in_set_gas==true){
draw_set_gas();
}
else if(in_set_time==true){
draw_set_time();
}
else if(in_set_bengkel==true){
draw_set_bengkel();
}
else if(in_set_bengkel_nama==true){
draw_set_bengkel_nama();
}
else if(in_set_bengkel_alamat==true){
draw_set_bengkel_alamat();
}
else if(in_set_bengkel_penguji==true){
draw_set_bengkel_penguji();
}
else if(in_set_pas_old==true){
draw_set_pas_old();
}
else if(in_set_pas_new==true){
draw_set_pas_new();
}
} while(u8g2.nextPage());
if (in_progress==true){
if (progress < 108) {
progress++;
} else {
//progress = 0;
in_progress = false;
in_home = true;
}
} else {
if(in_home==true){
if(digitalRead(TEST)==0){
delay(500);
in_home = false;
in_pretest = true;
//delay(3500);
//Ndir_ReadData();
//Ndir_ReadData();
//GetAllValues();
}
if(digitalRead(ZERO)==0){
delay(150);
in_home = false;
in_prezero = true;
}
if(digitalRead(CAL)==0){
delay(150);
iset_pas = 1;
ih_pas[0] = 0;ih_pas[1] = 0;ih_pas[2] = 0;ih_pas[3] = 0;ih_pas[4] = 0;
in_home = false;
in_pascal = true;
}
if(digitalRead(SET)==0){
delay(500);
in_home = false;
in_set = true;
}
}
else if(in_pretest==true){
if(digitalRead(TEST)==0){
delay(150);
if(iHeat==0){
in_pretest = false;
in_test = true;
is_test = true;
// hidupkan pompa, matikan selenoid
//digitalWrite(PUMP, 1);
//digitalWrite(SEL, 0);
}
}
if(digitalRead(SET)==0){
delay(150);
in_pretest = false;
in_home = true;
}
}
else if(in_test==true){
if(is_test==true){
//Ndir_ReadData();
//GetAllValues();
}
if(digitalRead(TEST)==0){
delay(100);
if(is_test==false){
is_test = true;
} else if(is_test==true){
is_test = false;
}
}
if(digitalRead(SET)==0){
delay(150);
is_test = false;
in_test = false;
in_home = true;
// matikan pompa, matikan selenoid
//digitalWrite(PUMP, 0);
//digitalWrite(SEL, 0);
}
if(digitalRead(ENTER)==0){
delay(100);
is_test = false;
in_test = false;
in_preprint = true;
}
}
else if(in_preprint==true){
if(digitalRead(ENTER)==0){
delay(100);
in_preprint = false;
in_print = true;
progress = 0;
}
if(digitalRead(SET)==0){
delay(150);
in_preprint = false;
in_home = true;
}
}
else if(in_print==true){
if (progress < 108) {
progress++;
} else {
in_print = false;
in_home = true;
}
if(digitalRead(SET)==0){
delay(150);
in_print = false;
in_home = true;
}
}
else if(in_prezero==true){
if(digitalRead(ZERO)==0){
delay(100);
//Ndir_Zero();
in_prezero = false;
in_zero = true;
progress = 0;
// hidupkan pompa, hidupkan selenoid
//digitalWrite(PUMP, 1);
//digitalWrite(SEL, 1);
}
if(digitalRead(SET)==0){
delay(500);
in_prezero = false;
in_home = true;
}
}
else if(in_zero==true){
if (progress < 108) {
progress++;
delay(1000);
} else {
in_zero = false;
in_home = true;
// matikan pompa, matikan selenoid
//digitalWrite(PUMP, 0);
//digitalWrite(SEL, 0);
}
if(digitalRead(SET)==0){
delay(150);
in_zero = false;
in_home = true;
// matikan pompa, matikan selenoid
//digitalWrite(PUMP, 0);
//digitalWrite(SEL, 0);
}
}
else if(in_set==true){
if(digitalRead(ZERO)==0){
delay(100);
iset = iset + 1;
if(iset==5){
iset = 1;
}
}
if(digitalRead(CAL)==0){
delay(100);
iset = iset - 1;
if(iset==0){
iset = 4;
}
}
if(digitalRead(ENTER)==0){
delay(100);
in_set = false;
if(iset==1){
in_set_gas = true;
iset_gas = iType;
} else if(iset==2){
in_set_time = true;
//Time dnow = rtc.getTime();
//iDay = dnow.date;
//iMonth = dnow.mon;
//iYear = dnow.year;
//iHour = dnow.hour;
//iMinute = dnow.min;
//iSecond = dnow.sec;
iset_time = 1;
} else if(iset==3){
in_set_bengkel = true;
iset_bengkel = 1;
} else if(iset==4){
in_set_pas_old = true;
iset_pas = 1;
ih_pas[0] = 0;ih_pas[1] = 0;ih_pas[2] = 0;ih_pas[3] = 0;ih_pas[4] = 0;
}
}
if(digitalRead(SET)==0){
delay(500);
in_set = false;
in_home = true;
}
}
else if(in_set_gas==true){
if(digitalRead(ZERO)==0){
delay(100);
iset_gas = iset_gas + 1;
if(iset_gas==4){
iset_gas = 0;
}
}
if(digitalRead(CAL)==0){
delay(100);
iset_gas = iset_gas - 1;
if(iset_gas==-1){
iset_gas = 3;
}
}
if(digitalRead(ENTER)==0){
delay(100);
//Ndir_SetFuel(iset_gas);
iType = iset_gas;
}
if(digitalRead(SET)==0){
delay(500);
in_set_gas = false;
in_set = true;
}
}
else if(in_set_time==true){
if(digitalRead(ZERO)==0){
delay(100);
if(isTimeSet==false){
iset_time = iset_time + 1;
if(iset_time==8){
iset_time = 1;
}
} else {
if(iset_time==1){
iDay = iDay - 1; if(iDay<1) { iDay = 31; }
}
else if(iset_time==2){
iMonth = iMonth - 1; if(iMonth<1) { iMonth = 12; }
}
else if(iset_time==3){
iYear = iYear - 1;
}
else if(iset_time==4){
iHour = iHour - 1; if(iHour<0) { iHour = 23; }
}
else if(iset_time==5){
iMinute = iMinute - 1; if(iMinute<0) { iMinute = 59; }
}
else if(iset_time==6){
iSecond = iSecond - 1; if(iSecond<0) { iSecond = 59; }
}
}
}
if(digitalRead(CAL)==0){
delay(100);
if(isTimeSet==false){
iset_time = iset_time - 1;
if(iset_time==0){
iset_time = 7;
}
} else {
if(iset_time==1){
iDay = iDay + 1; if(iDay>31) { iDay = 1; }
}
else if(iset_time==2){
iMonth = iMonth + 1; if(iMonth>12) { iMonth = 1; }
}
else if(iset_time==3){
iYear = iYear + 1;
}
else if(iset_time==4){
iHour = iHour + 1; if(iHour>23) { iHour = 0; }
}
else if(iset_time==5){
iMinute = iMinute + 1; if(iMinute>59) { iMinute = 0; }
}
else if(iset_time==6){
iSecond = iSecond + 1; if(iSecond>59) { iSecond = 0; }
}
}
}
if(digitalRead(ENTER)==0){
delay(100);
if(iset_time==7){
// set RTC
//rtc.setDate(iDay,iMonth,iYear);
//rtc.setTime(iHour,iMinute,iSecond);
in_set_time = false;
in_set = true;
} else {
if(isTimeSet==false){
isTimeSet = true;
} else {
isTimeSet = false;
}
}
}
if(digitalRead(SET)==0){
delay(500);
in_set_time = false;
in_set = true;
}
}
else if(in_set_bengkel==true){
if(digitalRead(ZERO)==0){
delay(100);
iset_bengkel = iset_bengkel + 1;
if(iset_bengkel==4){
iset_bengkel = 1;
}
}
if(digitalRead(CAL)==0){
delay(100);
iset_bengkel = iset_bengkel - 1;
if(iset_bengkel==0){
iset_bengkel = 3;
}
}
if(digitalRead(ENTER)==0){
delay(100);
in_set_bengkel = false;
if(iset_bengkel==1){
in_set_bengkel_nama = true;
} else if(iset_bengkel==2){
in_set_bengkel_alamat = true;
} else if(iset_bengkel==3){
in_set_bengkel_penguji = true;
}
}
if(digitalRead(SET)==0){
delay(500);
in_set_bengkel = false;
in_set = true;
}
}
else if(in_set_bengkel_nama==true){
if(digitalRead(ZERO)==0){
delay(100);
if(isNamaSet==false){
iset_nama = iset_nama + 1;
if(iset_nama==22){
iset_nama = 1;
}
} else {
iset_huruf = iset_huruf + 1;
if(iset_huruf>37){
iset_huruf = 0;
}
ih_nama[iset_nama-1] = iset_huruf;
}
}
if(digitalRead(CAL)==0){
delay(100);
if(isNamaSet==false){
iset_nama = iset_nama - 1;
if(iset_nama==0){
iset_nama = 21;
}
} else {
iset_huruf = iset_huruf - 1;
if(iset_huruf<0){
iset_huruf = 37;
}
ih_nama[iset_nama-1] = iset_huruf;
}
}
if(digitalRead(ENTER)==0){
delay(100);
if(iset_nama==21){
// set nama
SaveSetBengkel();
in_set_bengkel_nama = false;
in_set_bengkel = true;
} else {
if(isNamaSet==false){
isNamaSet = true;
iset_huruf = ih_nama[iset_nama-1];
} else {
isNamaSet = false;
}
}
}
if(digitalRead(SET)==0){
delay(500);
in_set_bengkel_nama = false;
in_set_bengkel = true;
}
}
else if(in_set_bengkel_alamat==true){
if(digitalRead(ZERO)==0){
delay(100);
if(isAlamatSet==false){
iset_alamat = iset_alamat + 1;
if(iset_alamat==42){
iset_alamat = 1;
}
} else {
iset_huruf = iset_huruf + 1;
if(iset_huruf>37){
iset_huruf = 0;
}
if(iset_alamat < 21)
{
ih_alamat1[iset_alamat-1] = iset_huruf;
} else {
ih_alamat2[iset_alamat-21] = iset_huruf;
}
}
}
if(digitalRead(CAL)==0){
delay(100);
if(isAlamatSet==false){
iset_alamat = iset_alamat - 1;
if(iset_alamat==0){
iset_alamat = 41;
}
} else {
iset_huruf = iset_huruf - 1;
if(iset_huruf<0){
iset_huruf = 37;
}
if(iset_alamat < 21)
{
ih_alamat1[iset_alamat-1] = iset_huruf;
} else {
ih_alamat2[iset_alamat-21] = iset_huruf;
}
}
}
if(digitalRead(ENTER)==0){
delay(100);
if(iset_alamat==41){
// set alamat
SaveSetBengkel();
in_set_bengkel_alamat = false;
in_set_bengkel = true;
} else {
if(isAlamatSet==false){
isAlamatSet = true;
if(iset_alamat < 21)
{
iset_huruf = ih_alamat1[iset_alamat-1];
} else {
iset_huruf = ih_alamat2[iset_alamat-21];
}
} else {
isAlamatSet = false;
}
}
}
if(digitalRead(SET)==0){
delay(500);
in_set_bengkel_alamat = false;
in_set_bengkel = true;
}
}
else if(in_set_bengkel_penguji==true){
if(digitalRead(ZERO)==0){
delay(100);
if(isPengujiSet==false){
iset_penguji = iset_penguji + 1;
if(iset_penguji==22){
iset_penguji = 1;
}
} else {
iset_huruf = iset_huruf + 1;
if(iset_huruf>37){
iset_huruf = 0;
}
ih_penguji[iset_penguji-1] = iset_huruf;
}
}
if(digitalRead(CAL)==0){
delay(100);
if(isPengujiSet==false){
iset_penguji = iset_penguji - 1;
if(iset_penguji==0){
iset_penguji = 21;
}
} else {
iset_huruf = iset_huruf - 1;
if(iset_huruf<0){
iset_huruf = 37;
}
ih_penguji[iset_penguji-1] = iset_huruf;
}
}
if(digitalRead(ENTER)==0){
delay(100);
if(iset_penguji==21){
// set penguji
SaveSetBengkel();
in_set_bengkel_penguji = false;
in_set_bengkel = true;
} else {
if(isPengujiSet==false){
isPengujiSet = true;
iset_huruf = ih_penguji[iset_penguji-1];
} else {
isPengujiSet = false;
}
}
}
if(digitalRead(SET)==0){
delay(500);
in_set_bengkel_penguji = false;
in_set_bengkel = true;
}
}
else if(in_pascal==true || in_set_pas_old==true || in_set_pas_new==true){
if(digitalRead(ZERO)==0){
delay(100);
if(isPasSet==false){
iset_pas = iset_pas + 1;
if(iset_pas==7){
iset_pas = 1;
}
} else {
if(iset_pas==1){ ih_pas[0] = ih_pas[0] + 1; if(ih_pas[0]>9) { ih_pas[0] = 0; } }
else if(iset_pas==2){ ih_pas[1] = ih_pas[1] + 1; if(ih_pas[1]>9) { ih_pas[1] = 0; } }
else if(iset_pas==3){ ih_pas[2] = ih_pas[2] + 1; if(ih_pas[2]>9) { ih_pas[2] = 0; } }
else if(iset_pas==4){ ih_pas[3] = ih_pas[3] + 1; if(ih_pas[3]>9) { ih_pas[3] = 0; } }
else if(iset_pas==5){ ih_pas[4] = ih_pas[4] + 1; if(ih_pas[4]>9) { ih_pas[4] = 0; } }
}
}
if(digitalRead(CAL)==0){
delay(100);
if(isPasSet==false){
iset_pas = iset_pas - 1;
if(iset_pas==0){
iset_pas = 6;
}
} else {
if(iset_pas==1){ ih_pas[0] = ih_pas[0] - 1; if(ih_pas[0]<0) { ih_pas[0] = 9; } }
else if(iset_pas==2){ ih_pas[1] = ih_pas[1] - 1; if(ih_pas[1]<0) { ih_pas[1] = 9; } }
else if(iset_pas==3){ ih_pas[2] = ih_pas[2] - 1; if(ih_pas[2]<0) { ih_pas[2] = 9; } }
else if(iset_pas==4){ ih_pas[3] = ih_pas[3] - 1; if(ih_pas[3]<0) { ih_pas[3] = 9; } }
else if(iset_pas==5){ ih_pas[4] = ih_pas[4] - 1; if(ih_pas[4]<0) { ih_pas[4] = 9; } }
}
}
if(digitalRead(ENTER)==0){
delay(100);
if(iset_pas==6){
String spas = "";
for (int i = 0; i < 5; i++)
{
String str1(ih_pas[i]);
spas = spas + str1;
}
if(in_pascal==true){
//Serial.print("spas : "); Serial.println(spas);
//Serial.print("sPass : "); Serial.println(sPass);
if(spas==sPass){
// start kalibrasi
in_pascal = false;
in_precal = true;
}
}
else if(in_set_pas_old==true){
if(spas==sPass){
iset_pas = 1;
ih_pas[0] = 0;ih_pas[1] = 0;ih_pas[2] = 0;ih_pas[3] = 0;ih_pas[4] = 0;
in_set_pas_old = false;
in_set_pas_new = true;
}
}
else if(in_set_pas_new==true){
SaveSetPass();
in_set_pas_new = false;
in_set = true;
}
} else {
if(isPasSet==false){
isPasSet = true;
} else {
isPasSet = false;
}
}
}
if(digitalRead(SET)==0){
delay(500);
if(in_pascal==true){
in_pascal = false;
in_home = true;
}
else if(in_set_pas_old==true || in_set_pas_new==true){
in_set_pas_old = false;
in_set_pas_new = false;
in_set = true;
}
}
}
else if(in_precal==true){
if(digitalRead(ZERO)==0){
delay(100);
if(isCalSet==false){
iset_cal = iset_cal + 1;
if(iset_cal==7){
iset_cal = 1;
}
} else {
if(iset_cal==1){
iset_cal_gas = iset_cal_gas + 1;
if(iset_cal_gas == 6){
iset_cal_gas = 1;
}
} else {
if(iset_cal==2){ ih_cal[0] = ih_cal[0] + 1; if(ih_cal[0]>9) { ih_cal[0] = 0; } }
else if(iset_cal==3){ ih_cal[1] = ih_cal[1] + 1; if(ih_cal[1]>9) { ih_cal[1] = 0; } }
else if(iset_cal==4){ ih_cal[2] = ih_cal[2] + 1; if(ih_cal[2]>9) { ih_cal[2] = 0; } }
else if(iset_cal==5){ ih_cal[3] = ih_cal[3] + 1; if(ih_cal[3]>9) { ih_cal[3] = 0; } }
}
}
}
if(digitalRead(CAL)==0){
delay(100);
if(isCalSet==false){
iset_cal = iset_cal - 1;
if(iset_cal==0){
iset_cal = 6;
}
} else {
if(iset_cal==1){
iset_cal_gas = iset_cal_gas - 1;
if(iset_cal_gas == 0){
iset_cal_gas = 5;
}
} else {
if(iset_cal==2){ ih_cal[0] = ih_cal[0] - 1; if(ih_cal[0]<0) { ih_cal[0] = 9; } }
else if(iset_cal==3){ ih_cal[1] = ih_cal[1] - 1; if(ih_cal[1]<0) { ih_cal[1] = 9; } }
else if(iset_cal==4){ ih_cal[2] = ih_cal[2] - 1; if(ih_cal[2]<0) { ih_cal[2] = 9; } }
else if(iset_cal==5){ ih_cal[3] = ih_cal[3] - 1; if(ih_cal[3]<0) { ih_cal[3] = 9; } }
}
}
}
if(digitalRead(ENTER)==0){
delay(100);
if(iset_cal==6){
// start kalibrasi
// get gas code
byte igas = iset_cal_gas;
// get cal value
int vcal = (ih_cal[0] * 1000) + (ih_cal[1] * 100) + (ih_cal[2] * 10) + (ih_cal[3] * 1);
// send command
//Ndir_Cal(igas, vcal);
progress = 0;
in_precal = false;
in_cal = true;
} else {
if(isCalSet==false){
isCalSet = true;
} else {
isCalSet = false;
}
}
}
if(digitalRead(SET)==0){
delay(500);
in_precal = false;
in_home = true;
}
}
else if(in_cal==true){
if (progress < 108) {
progress++;
} else {
in_cal = false;
in_home = true;
}
if(digitalRead(SET)==0){
delay(100);
in_cal = false;
in_home = true;
}
}
//delay(1000);
}
u8g2.sendBuffer(); // send U8G2 buffer to the display
}
void ReadSetBengkel(){
// Reading Eeprom
eepromOffset = 0;
int newStr1AddrOffset = readStringFromEEPROM(eepromOffset, &sBengkel);
int newStr2AddrOffset = readStringFromEEPROM(newStr1AddrOffset, &sAlamat1);
int newStr3AddrOffset = readStringFromEEPROM(newStr2AddrOffset, &sAlamat2);
eepromOffsetPas = readStringFromEEPROM(newStr3AddrOffset, &sPenguji);
readStringFromEEPROM(eepromOffsetPas, &sPass);
//Serial.print("sPass : "); Serial.println(sPass);
if(sPass.length() > 5){
sPass = "00000";
}
//Serial.print("sPass : "); Serial.println(sPass);
int str_len = sBengkel.length() + 1;
//char char_array[str_len];
//sBengkel.toCharArray(char_array, str_len);
for (int i = 0; i < str_len; i++)
{
for (int j = 0; j < 37; j++)
{
if(hurufs[j]==sBengkel[i]){
ih_nama[i] = j;
}
}
}
str_len = sAlamat1.length() + 1;
//char_array[str_len];
//sAlamat1.toCharArray(char_array, str_len);
for (int i = 0; i < str_len; i++)
{
for (int j = 0; j < 37; j++)
{
if(hurufs[j]==sAlamat1[i]){
ih_alamat1[i] = j;
}
}
}
str_len = sAlamat2.length() + 1;
//char_array[str_len];
//sAlamat2.toCharArray(char_array, str_len);
for (int i = 0; i < str_len; i++)
{
for (int j = 0; j < 37; j++)
{
if(hurufs[j]==sAlamat2[i]){
ih_alamat2[i] = j;
}
}
}
str_len = sPenguji.length() + 1;
//char_array[str_len];
//sPenguji.toCharArray(char_array, str_len);
for (int i = 0; i < str_len; i++)
{
for (int j = 0; j < 37; j++)
{
if(hurufs[j]==sPenguji[i]){
ih_penguji[i] = j;
}
}
}
}
void SaveSetBengkel(){
sBengkel = "";
sAlamat1 = "";
sAlamat2 = "";
sPenguji = "";
for (int i = 0; i < 20; i++)
{
String str1(hurufs[ih_nama[i]]);
sBengkel = sBengkel + str1;
String str2(hurufs[ih_alamat1[i]]);
sAlamat1 = sAlamat1 + str2;
String str3(hurufs[ih_alamat2[i]]);
sAlamat2 = sAlamat2 + str3;
String str4(hurufs[ih_penguji[i]]);
sPenguji = sPenguji + str4;
}
eepromOffset = 0;
int str1AddrOffset = writeStringToEEPROM(eepromOffset, sBengkel);
int str2AddrOffset = writeStringToEEPROM(str1AddrOffset, sAlamat1);
int str3AddrOffset = writeStringToEEPROM(str2AddrOffset, sAlamat2);
eepromOffsetPas = writeStringToEEPROM(str3AddrOffset, sPenguji);
}
void SaveSetPass(){
sPass = "";
for (int i = 0; i < 5; i++)
{
String str1(ih_pas[i]);
sPass = sPass + str1;
}
Serial.print("new pass : ");
Serial.println(sPass);
writeStringToEEPROM(eepromOffsetPas, sPass);
}
int writeStringToEEPROM(int addrOffset, const String &strToWrite)
{
byte len = strToWrite.length();
EEPROM.write(addrOffset, len);
for (int i = 0; i < len; i++)
{
EEPROM.write(addrOffset + 1 + i, strToWrite[i]);
}
return addrOffset + 1 + len;
}
int readStringFromEEPROM(int addrOffset, String *strToRead)
{
int newStrLen = EEPROM.read(addrOffset);
char data[newStrLen + 1];
for (int i = 0; i < newStrLen; i++)
{
data[i] = EEPROM.read(addrOffset + 1 + i);
}
data[newStrLen] = '\0';
*strToRead = String(data);
return addrOffset + 1 + newStrLen;
}
void GetAllValues()
{
iType = datas[0+3];
iHeat = datas[2+3];
iHC = GetValue(5,6);
iCO = GetValue(7,8);
iCO2 = GetValue(9,10);
iO2 = GetValue(11,12);
iLamda = GetValue(19,20);
iAFR = GetValue(35,36);
//GetAllString();
}
int16_t GetValue(int b0, int b1)
{
ArrayToInteger converter;
converter.array[0]=datas[b1+3];
converter.array[1]=datas[b0+3];
return converter.integer;
}