Source code for the Curilights Controller. See http://www.saccade.com/writing/projects/CuriController/ for details.

Dependencies:   FatFileSystem mbed

This is the source code for the Curilights controller. This lets you interactively control a string of Curilights. It provides a simple click-wheel user interface for changing colors, brightness and behavior. It responds to movement and lighting.

Finished Controller

/media/uploads/isonno/nxp3872_controllerclose.jpg

System Block Diagram

/media/uploads/isonno/blockdiagram.png

Committer:
isonno
Date:
Mon Feb 11 05:04:18 2013 +0000
Revision:
4:cfef06d8bb96
Parent:
3:0ac64c4ca40f
Minor changes to add backlight routines.  Not hooked up yet, shouldn't affect build operation.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
isonno 0:6da5625a6946 1 //
isonno 0:6da5625a6946 2 // User interface implementation
isonno 0:6da5625a6946 3 //
isonno 0:6da5625a6946 4
isonno 0:6da5625a6946 5 #ifndef _USERINTERFACE_
isonno 0:6da5625a6946 6 #define _USERINTERFACE_
isonno 0:6da5625a6946 7
isonno 0:6da5625a6946 8 #ifndef _UIMENU_
isonno 0:6da5625a6946 9 #include "UIMenu.h"
isonno 0:6da5625a6946 10 #endif
isonno 0:6da5625a6946 11
isonno 1:d1da77023e6a 12 #ifndef _SETTINGSMENU_
isonno 1:d1da77023e6a 13 #include "SettingsMenu.h"
isonno 1:d1da77023e6a 14 #endif
isonno 1:d1da77023e6a 15
isonno 0:6da5625a6946 16 class HomeMenu;
isonno 0:6da5625a6946 17 class LightString;
isonno 0:6da5625a6946 18
isonno 0:6da5625a6946 19 // The ControllerUI is a pure virtual class describing the
isonno 0:6da5625a6946 20 // functions one of the light selectors needs to provide
isonno 0:6da5625a6946 21 class ControllerUI
isonno 0:6da5625a6946 22 {
isonno 0:6da5625a6946 23 public:
isonno 0:6da5625a6946 24 ControllerUI( CheapLCD * lcd, LightString * lights )
isonno 0:6da5625a6946 25 : fLCD( lcd ), fLights( lights ), fLightsOn( true ) {};
isonno 0:6da5625a6946 26
isonno 0:6da5625a6946 27 virtual ~ControllerUI() {}
isonno 0:6da5625a6946 28
isonno 0:6da5625a6946 29 virtual void Display( bool on ) = 0;
isonno 0:6da5625a6946 30 virtual int32_t KnobMoved( int32_t step ) = 0;
isonno 0:6da5625a6946 31
isonno 0:6da5625a6946 32 virtual void LightSwitch( bool on );
isonno 0:6da5625a6946 33 virtual void TurnOn() = 0;
isonno 0:6da5625a6946 34 virtual bool AreLightsOn() const { return fLightsOn; }
isonno 0:6da5625a6946 35
isonno 0:6da5625a6946 36 protected:
isonno 0:6da5625a6946 37 CheapLCD * fLCD;
isonno 0:6da5625a6946 38 LightString * fLights;
isonno 0:6da5625a6946 39 bool fLightsOn;
isonno 0:6da5625a6946 40 };
isonno 0:6da5625a6946 41
isonno 1:d1da77023e6a 42 // PatternSelector lets you choose patterns stored on the SD card
isonno 0:6da5625a6946 43 typedef vector<uint32_t> Pattern;
isonno 0:6da5625a6946 44
isonno 0:6da5625a6946 45 class PatternSelector : public ControllerUI
isonno 0:6da5625a6946 46 {
isonno 0:6da5625a6946 47 public:
isonno 0:6da5625a6946 48 PatternSelector( CheapLCD * lcd, LightString * lights );
isonno 0:6da5625a6946 49
isonno 0:6da5625a6946 50 virtual ~PatternSelector() {};
isonno 0:6da5625a6946 51
isonno 0:6da5625a6946 52 virtual void Display( bool on );
isonno 0:6da5625a6946 53 virtual int32_t KnobMoved( int32_t step );
isonno 0:6da5625a6946 54
isonno 0:6da5625a6946 55 virtual void TurnOn();
isonno 0:6da5625a6946 56
isonno 0:6da5625a6946 57 private:
isonno 0:6da5625a6946 58 void DrawPattern();
isonno 0:6da5625a6946 59 void SetLights();
isonno 0:6da5625a6946 60
isonno 0:6da5625a6946 61 vector<string> fPatternNames;
isonno 0:6da5625a6946 62 vector<Pattern> fPatterns;
isonno 0:6da5625a6946 63 };
isonno 0:6da5625a6946 64
isonno 0:6da5625a6946 65 // This selector lets you choose among saturated colors
isonno 0:6da5625a6946 66 class ColorSelector : public ControllerUI
isonno 0:6da5625a6946 67 {
isonno 0:6da5625a6946 68 public:
isonno 0:6da5625a6946 69 ColorSelector( CheapLCD * lcd, LightString * lights )
isonno 0:6da5625a6946 70 : ControllerUI( lcd, lights )
isonno 0:6da5625a6946 71 {}
isonno 0:6da5625a6946 72
isonno 0:6da5625a6946 73 virtual ~ColorSelector() {};
isonno 0:6da5625a6946 74
isonno 0:6da5625a6946 75 virtual void Display( bool on );
isonno 0:6da5625a6946 76 virtual int32_t KnobMoved( int32_t step );
isonno 0:6da5625a6946 77
isonno 0:6da5625a6946 78 virtual void TurnOn();
isonno 0:6da5625a6946 79
isonno 0:6da5625a6946 80 private:
isonno 0:6da5625a6946 81 void DrawCursor( bool drawSprite );
isonno 0:6da5625a6946 82 };
isonno 0:6da5625a6946 83
isonno 0:6da5625a6946 84 // This selector lets you choose white lights
isonno 0:6da5625a6946 85 // with a variety of brightness levels
isonno 0:6da5625a6946 86 class WhiteSelector : public ControllerUI
isonno 0:6da5625a6946 87 {
isonno 0:6da5625a6946 88 public:
isonno 0:6da5625a6946 89 WhiteSelector( CheapLCD * lcd, LightString * lights )
isonno 0:6da5625a6946 90 : ControllerUI( lcd, lights )
isonno 0:6da5625a6946 91 {}
isonno 0:6da5625a6946 92
isonno 0:6da5625a6946 93 virtual ~WhiteSelector() {};
isonno 0:6da5625a6946 94
isonno 0:6da5625a6946 95 virtual void Display( bool on );
isonno 0:6da5625a6946 96 virtual int32_t KnobMoved( int32_t step );
isonno 0:6da5625a6946 97
isonno 0:6da5625a6946 98 virtual void TurnOn();
isonno 0:6da5625a6946 99
isonno 0:6da5625a6946 100 private:
isonno 0:6da5625a6946 101 void SetLights();
isonno 0:6da5625a6946 102 void DrawLevel();
isonno 0:6da5625a6946 103 };
isonno 0:6da5625a6946 104
isonno 0:6da5625a6946 105 // This is the generic interface the UI uses to choose a
isonno 0:6da5625a6946 106 // selector and talk to it.
isonno 0:6da5625a6946 107 typedef enum { kColorSelector = 0, kWhiteSelector = 1, kPatternSelector = 2 } ESelector;
isonno 0:6da5625a6946 108
isonno 0:6da5625a6946 109 class LightController : public PushKnobUI
isonno 0:6da5625a6946 110 {
isonno 0:6da5625a6946 111 public:
isonno 0:6da5625a6946 112 LightController( HomeMenu * parent, CheapLCD * lcd, LightString * lights );
isonno 0:6da5625a6946 113
isonno 0:6da5625a6946 114 virtual void Display( bool on ) { fSubController->Display( on ); }
isonno 0:6da5625a6946 115 void LightSwitch( bool on ) { fSubController->LightSwitch( on ); }
isonno 0:6da5625a6946 116 bool AreLightsOn() const { return fSubController->AreLightsOn(); }
isonno 0:6da5625a6946 117
isonno 0:6da5625a6946 118 void SetSelector( ESelector sel );
isonno 0:6da5625a6946 119
isonno 0:6da5625a6946 120 protected:
isonno 0:6da5625a6946 121
isonno 0:6da5625a6946 122 virtual int32_t KnobMoved( int32_t step );
isonno 0:6da5625a6946 123 virtual void KnobPushed();
isonno 0:6da5625a6946 124
isonno 0:6da5625a6946 125 SETUP_KNOB_CALLBACKS( LightController )
isonno 0:6da5625a6946 126
isonno 0:6da5625a6946 127 private:
isonno 0:6da5625a6946 128 HomeMenu * fParent;
isonno 0:6da5625a6946 129 LightString * fLights;
isonno 0:6da5625a6946 130
isonno 0:6da5625a6946 131 ControllerUI * fSubController;
isonno 0:6da5625a6946 132 ColorSelector fColorSelector;
isonno 0:6da5625a6946 133 WhiteSelector fWhiteSelector;
isonno 0:6da5625a6946 134 PatternSelector fPatternSelector;
isonno 0:6da5625a6946 135 };
isonno 0:6da5625a6946 136
isonno 0:6da5625a6946 137 // This implements the home-page menu
isonno 0:6da5625a6946 138 //
isonno 0:6da5625a6946 139 class HomeMenu : public UIMenu
isonno 0:6da5625a6946 140 {
isonno 0:6da5625a6946 141 public:
isonno 0:6da5625a6946 142 HomeMenu( CheapLCD * lcd, LightString * lights );
isonno 0:6da5625a6946 143 virtual ~HomeMenu() {};
isonno 0:6da5625a6946 144
isonno 0:6da5625a6946 145 void SetLightsOn( bool isOn );
isonno 0:6da5625a6946 146
isonno 0:6da5625a6946 147 protected:
isonno 0:6da5625a6946 148 void DoLightController( ESelector sel );
isonno 0:6da5625a6946 149 void DoToggleLightsOn();
isonno 0:6da5625a6946 150
isonno 0:6da5625a6946 151 virtual void KnobPushed();
isonno 0:6da5625a6946 152 virtual void AttachButton( PushButton * button ) { button->attach( this, &HomeMenu::KnobPushed ); }
isonno 0:6da5625a6946 153
isonno 0:6da5625a6946 154 LightController fLightController;
isonno 1:d1da77023e6a 155 SettingsMenu fSettingsMenu;
isonno 0:6da5625a6946 156
isonno 0:6da5625a6946 157 private:
isonno 0:6da5625a6946 158 bool fForcedOff;
isonno 0:6da5625a6946 159 };
isonno 0:6da5625a6946 160
isonno 0:6da5625a6946 161 #endif
isonno 0:6da5625a6946 162