#include <Wire.h>
#include <Keypad.h>
#include "Declares.h"
#include "Data.h"
#include "Menu.h"
#include "System.h"
#include "Inputs.h"
#include "Display.h"
#include "Normal.h"
#include "Timer1_lib.h"
System_Class SYSTEM;
Setting_Class SETTING;
Calibrate_Class CALIBRATE;
Normal_Class NORMAL;
POTMETER_Class POTMETER;
Global_Class GLOBAL;
Menu_Class2 MENU;
Keypad_Class_4x4 KeyPad_4x4;
Keypad_Class_4x5 KeyPad_4x5;
Paper_Size_Class PAPER_SIZE;
TIMER1_ TIMER_Main;
void setup()
{
Serial.begin(9600);
#if Pr_Type == 0
ProjectType = PT_WOKWI ; //{PT_WOKWI, PT_ARDUINO}
#elif Pr_Type == 1
ProjectType = PT_ARDUINO ; //{PT_WOKWI, PT_ARDUINO}
#endif
#if Save_Type == 0
Saving_Type = ST_NEW; //{ST_NEW, ST_UPDATE}
#elif Save_Type == 1
Saving_Type = ST_UPDATE; //{ST_NEW, ST_UPDATE}
#endif
#if keypad_Type == 0
Keypad_Type = KP_4X4; //{KP_4X4, KP_4X5}
#elif keypad_Type == 1
Keypad_Type = KP_4X5; //{KP_4X4, KP_4X5}
#endif
TIMER_Main.SetTime = 50;
Display_Sys.Setup();
SYSTEM.Setup();
NORMAL.Setup();
POTMETER.Setup(A0, 0);
MENU.Setup();
GLOBAL.Setup();
SETTING.Setup();
Active_Status = S_SYSTEM;
Display_Sys.Free_Mem();
OCR0A = 0xAF;
TIMSK0 |= _BV(OCIE0A);
delay(500);
}
SIGNAL(TIMER0_COMPA_vect)
{
POTMETER.Interupt_Loop();
}
//// ****************************Loop*******************
void loop()
{
NORMAL.Disp_Loop();
if (TIMER_Main.Trigger())
{
Up_Cl();
switch(Keypad_Type)
{
case KP_4X4:
KeyPad_4x4.Getkeycodes();
break;
case KP_4X5:
KeyPad_4x5.Getkeycodes();
break;
}
switch (Active_Status)
{
case S_SYSTEM:
SYSTEM.Mainloop();
break;
case S_SETTING:
SETTING.Mainloop();
break;
case S_MENU:
MENU.Mainloop();
break;
case S_CALIBRATE:
CALIBRATE.Mainloop();
break;
case S_NORMAL:
NORMAL.Mainloop(POTMETER.Get_Rawval());
break;
case S_POTMETER:
POTMETER.Mainloop();
break;
case S_GLOBAL:
GLOBAL.Mainloop();
break;
case S_PAPER:
PAPER_SIZE.Mainloop();
break;
}
}
}
void Up_Cl()
{
if (Active_Status != S_GLOBAL && GLOBAL.St_Status)
{
GLOBAL.Close();
}
if (Active_Status != S_SETTING && SETTING.St_Status)
{
SETTING.Close();
}
if (Active_Status != S_SYSTEM && SYSTEM.St_Status)
{
SYSTEM.Close();
}
if (Active_Status != S_NORMAL && NORMAL.St_Status)
{
NORMAL.Close();
}
if (Active_Status != S_CALIBRATE && CALIBRATE.St_Status)
{
CALIBRATE.Close();
}
if (Active_Status != S_POTMETER && POTMETER.St_Status)
{
POTMETER.Close();
}
if (Active_Status != S_MENU && MENU.St_Status)
{
MENU.Close();
}
if (Active_Status != S_PAPER && PAPER_SIZE.St_Status)
{
PAPER_SIZE.Close();
}
}