From cacf637c4b3392097099f404ff34f311514912ac Mon Sep 17 00:00:00 2001 From: IoTcat Date: Mon, 8 Apr 2019 17:47:26 +0800 Subject: [PATCH] ini --- digital-clock.ino | 20 ++++++ digital-screen.h | 171 ++++++++++++++++++++++++++++++++++++++++++++++ ovo.h | 124 +++++++++++++++++++++++++++++++++ 3 files changed, 315 insertions(+) create mode 100644 digital-clock.ino create mode 100644 digital-screen.h create mode 100644 ovo.h diff --git a/digital-clock.ino b/digital-clock.ino new file mode 100644 index 0000000..8321d19 --- /dev/null +++ b/digital-clock.ino @@ -0,0 +1,20 @@ +#include "ovo.h" +#include "digital-screen.h" + + + + +void setup(){ + digital_clock_ini(); +} + +DigitalClock dig(22); + +void loop(){ + + dig.core(); + dig.hide(); + dig.show(); + +} + diff --git a/digital-screen.h b/digital-screen.h new file mode 100644 index 0000000..da408d4 --- /dev/null +++ b/digital-screen.h @@ -0,0 +1,171 @@ + +/** + * digital-screen Functions + * + * @category digital-screen + * @package digital-screen.h + * @copyright Copyright (c) 2019 EEENeko (https://github.com/eeeneko) + * @license GNU General Public License 2.0 + * @version 0.0.1 + */ + + +#ifndef _DIGITAL_SCREEN_H +#define _DIGITAL_SCREEN_H + +#include "ovo.h" + + +#ifndef DIG_1_1 +#define DIG_1_1 9 +#endif + +#ifndef DIG_1_2 +#define DIG_1_2 10 +#endif + +#ifndef DIG_1_3 +#define DIG_1_3 11 +#endif + +#ifndef DIG_1_4 +#define DIG_1_4 12 +#endif + +#ifndef DIG_2_1 +#define DIG_2_1 5 +#endif + +#ifndef DIG_2_2 +#define DIG_2_2 6 +#endif + +#ifndef DIG_2_3 +#define DIG_2_3 7 +#endif + +#ifndef DIG_2_4 +#define DIG_2_4 8 +#endif + + +class DigitalClock{ + +public: + + 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) % 10); + } + + + + void core(){ + + setInterval([&](){ + this->digital_show(this->_cnt % this->_group); + this->_cnt++; + }, 1000); + } + + inline void hide(){ + this->_ice = 1; + } + + inline void show(){ + this->_ice = 0; + } + + 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))); + } + + +}; + + + + +/** + * digital-clock setup + * + * @Author yimian + * @param void + * @return void + */ +void digital_clock_ini(){ + + pinMode(DIG_1_1, OUTPUT); + pinMode(DIG_1_2, OUTPUT); + pinMode(DIG_1_3, OUTPUT); + pinMode(DIG_1_4, OUTPUT); + pinMode(DIG_2_1, OUTPUT); + pinMode(DIG_2_2, OUTPUT); + pinMode(DIG_2_3, OUTPUT); + pinMode(DIG_2_4, OUTPUT); + +} + + + +#endif diff --git a/ovo.h b/ovo.h new file mode 100644 index 0000000..78cc4c6 --- /dev/null +++ b/ovo.h @@ -0,0 +1,124 @@ + +/** + * ovo-arduino Main File + * + * @category ovo-arduino + * @package ovo.cpp + * @copyright Copyright (c) 2019 EEENeko (https://github.com/eeeneko) + * @license GNU General Public License 2.0 + * @version 0.0.1 + */ + + +#ifndef _OVO_H +#define _OVO_H + + +/** + * Like set Timeout in JS + * + * @Author yimian + * @param auto function (allow Lambda) + * @param int millisecond to dealy + * @return void + */ +void setTimeout(auto function,const int delay) +{ + static bool on = 1; + if(on == 1){ + static unsigned long startTime = millis(); + + if(millis() - startTime > delay){ + function(); + on == 0; + } + } +} + +/** + * Like set Interval in JS + * + * @Author yimian + * @param auto function (allow Lambda) + * @param int millisecond of interval + * @return void + */ +void setInterval(auto function, const int delay) +{ + static unsigned long startTime = millis(); + + if(millis() - startTime > delay){ + function(); + startTime = millis(); + } +} + + +/** + * Switch between function1 and function2 for delay1 and delay2 + * + * @Author yimian + * @param auto function1 (allow Lambda) + * @param auto function2 (allow Lambda) + * @param int millisecond of interval + * @param int millisecond of interval + * @return void + */ +void setSwitch(auto function1, auto function2, const int delay1, const int delay2) +{ + static unsigned long startTime = millis(); + + if(millis() - startTime < delay1){ + function1(); + }else if(millis() - startTime >= delay1 && millis() - startTime < delay1 + delay2){ + function2(); + }else if(millis() - startTime >= delay1 + delay2){ + startTime = millis(); + } +} + + +/** + * Make direct voltage change to gradually change + * + * @author yimian + * @category ovo + * @package ovo + */ +class slowWrite +{ + public: + inline void set(int t_pin, unsigned int t_delay){ + pin = t_pin; + delay = t_delay; + }; + inline void high(){ + startTime = millis(); + state = 1; + }; + inline void low(){ + startTime = millis(); + state = 0; + }; + inline void run(){ + if(state == 1 && millis() - startTime < delay){ + analogWrite(pin, ((millis() - startTime) * 255 / delay));Serial.println(((millis() - startTime) * 255 / delay)); + }else if(state == 0 && millis() - startTime < delay){ + analogWrite(pin, 255-((millis() - startTime) * 255 / delay));Serial.println(255-((millis() - startTime) * 255 / delay)); + }else{ + state = -1; + } + }; + + private: + unsigned long startTime; + int state; + int pin; + unsigned int delay; +}; + + + + + +#endif \ No newline at end of file