diff --git a/digital-clock.ino b/digital-clock.ino index f40cec7..0a94a36 100644 --- a/digital-clock.ino +++ b/digital-clock.ino @@ -13,6 +13,12 @@ /*** 引入关键库 ****/ #include "ovo.h" +/*** 是否开启debug模式 ****/ + +//去掉下一行的注释以开启debug模式 +//#define DEBUG_MODE + + /*** 定义初始参数 ****/ //小组组号 @@ -59,24 +65,46 @@ void setup(){ switch_ini(); //初始化串口,方便debug Serial.begin(115200); +#ifdef DEBUG_MODE + //初始化板载led,作为debug的指示灯 + pinMode(LED_BUILTIN, OUTPUT); +#endif } /*** 实例化组件 ****/ +#ifdef DEBUG_MODE + +//时钟显示屏实例化 +Debug_DigitalClock clock(GROUP_ID); + + +#else + //时钟显示屏实例化 DigitalClock clock(GROUP_ID); -//开关组件实例化 -Switch swi(SWI_OFF), reset(SWI_RESET); +#endif +//开关组件实例化 +Switch swi(SWI_OFF), reset(SWI_RESET); /*** 主循环程序 ****/ void loop(){ /*** 主要控制逻辑 ****/ +#ifdef DEBUG_MODE + //如果reset键或开关键被按下,板载led亮 + if(reset.isPressed() == true || swi.isPressed() == true) { + digitalWrite(LED_BUILTIN, HIGH); + }else{ + digitalWrite(LED_BUILTIN, LOW); + } + +#else //如果reset键被按下,重置时钟 if(reset.isPressed() == true) { clock.reset(); @@ -87,7 +115,7 @@ void loop(){ //如果开关打开,则开始或停止计时 if(swi.getStatus() == true) clock.show(); else clock.hide(); - +#endif /*** 守护进程 ****/ clock.core(); diff --git a/digital-screen.h b/digital-screen.h index 3f6e75a..cf8ed21 100644 --- a/digital-screen.h +++ b/digital-screen.h @@ -175,4 +175,106 @@ void digital_clock_ini(){ +#ifdef DEBUG_MODE + +class Debug_DigitalClock{ + +public: + + Debug_DigitalClock(int group = 22){ + + this->_group = group; + _ice = 0; + _cnt = 0; + }; + + + + /** + * control digital screens + * + * @Author yimian + * @param int num # 待显示数字 + * @return void + */ + inline void digital_show(int num){ + + if(num == -1 || _ice == 1){ + //digital_show_1(15); + //digital_show_2(15); + return; + } + + digital_show_1(num % 10); + digital_show_2(num % 10); + } + + + + void core(){ + + setInterval([&](){ + this->digital_show(this->_cnt % (this->_group + 1)); + if(this->_ice != 1) this->_cnt++; + }, INTERVAL_TIME); + } + + inline void hide(){ + this->_ice = 1; + } + + inline void show(){ + this->_ice = 0; + } + + inline void change(){ + this->_ice = !(this->_ice); + } + + inline void reset(){ + this->_cnt = 0; + } + +private: + + int _group; + int _ice; + unsigned int _cnt; + + /** + * control digital screen 1 + * + * @Author yimian + * @param int num # 待显示数字 + * @return void + */ + void digital_show_1(int num){ + + digitalWrite(DIG_1_1, !!(num & (0x01<<0))); + digitalWrite(DIG_1_2, !!(num & (0x01<<1))); + digitalWrite(DIG_1_3, !!(num & (0x01<<2))); + digitalWrite(DIG_1_4, !!(num & (0x01<<3))); + } + + + /** + * control digital screen 2 + * + * @Author yimian + * @param int num # 待显示数字 + * @return void + */ + void digital_show_2(int num){ + + digitalWrite(DIG_2_1, !!(num & (0x01<<0))); + digitalWrite(DIG_2_2, !!(num & (0x01<<1))); + digitalWrite(DIG_2_3, !!(num & (0x01<<2))); + digitalWrite(DIG_2_4, !!(num & (0x01<<3))); + } + + +}; + +#endif + #endif