Arduino Libraries
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
light.hpp
Go to the documentation of this file.
1 // Author: Mario S. Könz <mskoenz@gmx.net>
2 // Date: 18.06.2013 15:53:18 EDT
3 // File: light.hpp
4 
5 /* This program is free software. It comes without any warranty, to
6  * the extent permitted by applicable law. You can redistribute it
7  * and/or modify it under the terms of the Do What The Fuck You Want
8  * To Public License, Version 2, as published by Sam Hocevar. See
9  * http://www.wtfpl.net/ or COPYING for more details. */
10 
11 #ifndef __LIGHT_HEADER
12 #define __LIGHT_HEADER
13 
14 #include "clock.hpp"
15 
16 #include <Arduino.h>
17 #include "../ustd/ard_assert.hpp"
18 #include "../ustd/type_traits.hpp"
19 #include "pin_concept.hpp"
20 
21 namespace state {
22  enum light_enum : uint8_t {
24  , on
26  , slow
28  , fast
30  };
31 }//end namespace state
32 
33 namespace tool {
34  template<typename pin_concept, bool on_state = HIGH>
35  class light_class {
36  public:
37  //------------------- ctors -------------------
38  light_class(): state_(state::off) {
39  pin_.mode(OUTPUT);
40  }
41  template<typename T>
42  light_class(T & t): state_(state::off), pin_(t) {
43  pin_.mode(OUTPUT);
44  }
45  //------------------- assignment -------------------
46  template<class pin_concept2, bool on_state2>
48  state_ = rhs.state_;
49  return (*this);
50  }
52  state_ = s;
53  return (*this);
54  }
55  light_class & operator=(bool const & s) {
56  state_ = (s ? state::on : state::off);
57  return (*this);
58  }
59  //------------------- modes -------------------
60  void on() {
61  pin_.write(on_state);
62  }
63  void off() {
64  pin_.write(!on_state);
65  }
66  void flash() {
67  pin_.write((tool::clock.msec() < 100) == on_state);
68  }
69  void fast() {
70  pin_.write((tool::clock.msec(500) < 250) == on_state);
71  }
72  void very_fast() {
73  pin_.write((tool::clock.msec(100) < 10) == on_state);
74  }
75  void blink() {
76  pin_.write((tool::clock.msec(1000) < 500) == on_state);
77  }
78  void slow() {
79  pin_.write((tool::clock.sec() & 1) == on_state);
80  }
81  //------------------- update -------------------
82  void update() {
83  #define UPDATE(STATE) if(state_ == state::STATE) STATE(); else
84 
85  UPDATE(on)
86  UPDATE(off)
87  UPDATE(flash)
88  UPDATE(fast)
89  UPDATE(blink)
90  UPDATE(slow)
92  ; //last else
93 
94  #undef UPDATE
95  }
96  //------------------- getter -------------------
97  state::light_enum const & state() const {
98  return state_;
99  }
100  //------------------- ops -------------------
101  void flip() {
102  if(state_ == state::on)
103  state_ = state::off;
104  else if(state_ == state::off)
105  state_ = state::on;
106  }
107  private:
108  state::light_enum state_;
109  pin_concept pin_;
110  };
111 }//end namespace tool
112 
113 #endif //__LIGHT_HEADER
Definition: light.hpp:29
void very_fast()
Definition: light.hpp:72
state::light_enum const & state() const
Definition: light.hpp:97
light_enum
Definition: light.hpp:22
light_class(T &t)
Definition: light.hpp:42
void blink()
Definition: light.hpp:75
void flash()
Definition: light.hpp:66
Definition: light.hpp:28
class tool::clock_class clock
void flip()
Definition: light.hpp:101
light_class & operator=(bool const &s)
Definition: light.hpp:55
light_class & operator=(state::light_enum const &s)
Definition: light.hpp:51
light_class()
Definition: light.hpp:38
void on()
Definition: light.hpp:60
void update()
Definition: light.hpp:82
void fast()
Definition: light.hpp:69
Definition: light.hpp:27
Definition: light.hpp:26
Definition: light.hpp:23
#define UPDATE(STATE)
light_class & operator=(light_class< pin_concept2, on_state2 > const &rhs)
Definition: light.hpp:47
void off()
Definition: light.hpp:63
Definition: light.hpp:24
void slow()
Definition: light.hpp:78
Definition: light.hpp:35
Definition: light.hpp:25