a

Committer:
fundokukiri
Date:
Wed Oct 09 12:55:47 2019 +0000
Revision:
0:a7fb0dba4c8a
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fundokukiri 0:a7fb0dba4c8a 1 /*-----------------------------------------------------------
fundokukiri 0:a7fb0dba4c8a 2 * F746_SLIDER Library v1.0
fundokukiri 0:a7fb0dba4c8a 3 * Copyright (c) 2018 Wynand Steenberg
fundokukiri 0:a7fb0dba4c8a 4 * s216875730@mandela.ac.za
fundokukiri 0:a7fb0dba4c8a 5 *
fundokukiri 0:a7fb0dba4c8a 6 *
fundokukiri 0:a7fb0dba4c8a 7 * Permission is hereby granted, free of charge, to any person obtaining a copy
fundokukiri 0:a7fb0dba4c8a 8 * of this software and associated documentation files (the "Software"), to deal
fundokukiri 0:a7fb0dba4c8a 9 * in the Software without restriction, including without limitation the rights
fundokukiri 0:a7fb0dba4c8a 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
fundokukiri 0:a7fb0dba4c8a 11 * copies of the Software, and to permit persons to whom the Software is
fundokukiri 0:a7fb0dba4c8a 12 * furnished to do so, subject to the following conditions:
fundokukiri 0:a7fb0dba4c8a 13 *
fundokukiri 0:a7fb0dba4c8a 14 * The above copyright notice and this permission notice shall be included in
fundokukiri 0:a7fb0dba4c8a 15 * all copies or substantial portions of the Software.
fundokukiri 0:a7fb0dba4c8a 16 *
fundokukiri 0:a7fb0dba4c8a 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
fundokukiri 0:a7fb0dba4c8a 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
fundokukiri 0:a7fb0dba4c8a 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
fundokukiri 0:a7fb0dba4c8a 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
fundokukiri 0:a7fb0dba4c8a 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
fundokukiri 0:a7fb0dba4c8a 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
fundokukiri 0:a7fb0dba4c8a 23 * THE SOFTWARE.
fundokukiri 0:a7fb0dba4c8a 24 *-----------------------------------------------------------
fundokukiri 0:a7fb0dba4c8a 25 */
fundokukiri 0:a7fb0dba4c8a 26
fundokukiri 0:a7fb0dba4c8a 27 #ifndef F746_SLIDER_HPP
fundokukiri 0:a7fb0dba4c8a 28 #define F746_SLIDER_HPP
fundokukiri 0:a7fb0dba4c8a 29
fundokukiri 0:a7fb0dba4c8a 30 #include "mbed.h"
fundokukiri 0:a7fb0dba4c8a 31 #include <string>
fundokukiri 0:a7fb0dba4c8a 32 #include "TS_DISCO_F746NG.h"
fundokukiri 0:a7fb0dba4c8a 33 #include "LCD_DISCO_F746NG.h"
fundokukiri 0:a7fb0dba4c8a 34 #include "F746GUI.hpp"
fundokukiri 0:a7fb0dba4c8a 35
fundokukiri 0:a7fb0dba4c8a 36 /** A Class library for using Sliders on the DISCO-F746NG Development board. The class
fundokukiri 0:a7fb0dba4c8a 37 * uses the existing BSP class created by Team ST.
fundokukiri 0:a7fb0dba4c8a 38 *
fundokukiri 0:a7fb0dba4c8a 39 * Example:
fundokukiri 0:a7fb0dba4c8a 40 * @code
fundokukiri 0:a7fb0dba4c8a 41 * #include "mbed.h"
fundokukiri 0:a7fb0dba4c8a 42 * #include "F746_SLIDER.hpp"
fundokukiri 0:a7fb0dba4c8a 43 *
fundokukiri 0:a7fb0dba4c8a 44 * TS_DISCO_F746NG ts_;
fundokukiri 0:a7fb0dba4c8a 45 * LCD_DISCO_F746NG lcd_;
fundokukiri 0:a7fb0dba4c8a 46 *
fundokukiri 0:a7fb0dba4c8a 47 *
fundokukiri 0:a7fb0dba4c8a 48 * char char_SliderDisplayValue[4]; // String Value to display for the Slider Control value
fundokukiri 0:a7fb0dba4c8a 49 * uint16_t SliderDisplayValue_; // Variable used to access Slider Control Value in F746SLIDER.cpp
fundokukiri 0:a7fb0dba4c8a 50 *
fundokukiri 0:a7fb0dba4c8a 51 * int main()
fundokukiri 0:a7fb0dba4c8a 52 * {
fundokukiri 0:a7fb0dba4c8a 53 * lcd_.Clear(LCD_COLOR_WHITE); // Set LCD Background colour
fundokukiri 0:a7fb0dba4c8a 54 *
fundokukiri 0:a7fb0dba4c8a 55 * Slider sld1(lcd_, ts_, 20, 205, 150, 20, 5, 1, 20,
fundokukiri 0:a7fb0dba4c8a 56 * LCD_COLOR_BLUE, LCD_COLOR_YELLOW, 1, "Slider1", Font12); // Define sld1 slider
fundokukiri 0:a7fb0dba4c8a 57 * sld1.Render(); // Draw sld1 Slider
fundokukiri 0:a7fb0dba4c8a 58 *
fundokukiri 0:a7fb0dba4c8a 59 * Slider Slider2(lcd_, ts_, 240, 205, 220, 20, 50, 1, 100,
fundokukiri 0:a7fb0dba4c8a 60 * LCD_COLOR_BLUE, LCD_COLOR_YELLOW, 2, "Slider2", Font12); // Define Slider2 slider
fundokukiri 0:a7fb0dba4c8a 61 * Slider2.Render(); // Draw Slider2 Slider
fundokukiri 0:a7fb0dba4c8a 62 *
fundokukiri 0:a7fb0dba4c8a 63 * lcd_.SetTextColor(LCD_COLOR_BLACK); // Set Text colour to Black
fundokukiri 0:a7fb0dba4c8a 64 * lcd_.SetFont(&Font12); // Font size 12
fundokukiri 0:a7fb0dba4c8a 65 * lcd_.DisplayStringAt(5, 5, (uint8_t *)"Slider driver for DISCO_F746", LEFT_MODE); // Display main header text
fundokukiri 0:a7fb0dba4c8a 66 * lcd_.DisplayStringAt(5, 135, (uint8_t *)"Slider example", LEFT_MODE); // Display secondary header text
fundokukiri 0:a7fb0dba4c8a 67 *
fundokukiri 0:a7fb0dba4c8a 68 * while (true) // Main program loop
fundokukiri 0:a7fb0dba4c8a 69 * {
fundokukiri 0:a7fb0dba4c8a 70 * if (sld1.Moved()) // Check if sld1 Slider was touched and run instructions if true
fundokukiri 0:a7fb0dba4c8a 71 * {
fundokukiri 0:a7fb0dba4c8a 72 * lcd_.SetTextColor(LCD_COLOR_BLACK);
fundokukiri 0:a7fb0dba4c8a 73 * lcd_.FillRect(130, 140, 80, 40); // Draw border to display Slider Control Value
fundokukiri 0:a7fb0dba4c8a 74 * lcd_.SetTextColor(LCD_COLOR_WHITE);
fundokukiri 0:a7fb0dba4c8a 75 * lcd_.FillRect(140, 145, 60, 30); // Draw border to display Slider Control Value
fundokukiri 0:a7fb0dba4c8a 76 *
fundokukiri 0:a7fb0dba4c8a 77 * sprintf(char_SliderDisplayValue, "%3d", (int) SliderDisplayValue_); // Convert integer to text
fundokukiri 0:a7fb0dba4c8a 78 * lcd_.SetFont(&Font12); // Set Font size
fundokukiri 0:a7fb0dba4c8a 79 * lcd_.SetTextColor(LCD_COLOR_BLACK); // Set Font colour
fundokukiri 0:a7fb0dba4c8a 80 * lcd_.DisplayStringAt(150, 155, (uint8_t *)char_SliderDisplayValue, LEFT_MODE); // Write Slider Control Value to the LCD
fundokukiri 0:a7fb0dba4c8a 81 *
fundokukiri 0:a7fb0dba4c8a 82 * if (SliderDisplayValue_ < 10) // Slider Control Value decision
fundokukiri 0:a7fb0dba4c8a 83 * {
fundokukiri 0:a7fb0dba4c8a 84 * lcd_.DisplayStringAt(60, 190, (uint8_t *)" ", LEFT_MODE); // Overwrite previous text
fundokukiri 0:a7fb0dba4c8a 85 * lcd_.DisplayStringAt(60, 190, (uint8_t *)"SLIDER1 < 50%", LEFT_MODE); // Write text to LCD
fundokukiri 0:a7fb0dba4c8a 86 * }
fundokukiri 0:a7fb0dba4c8a 87 * else if (SliderDisplayValue_ == 10) // Slider Control Value decision
fundokukiri 0:a7fb0dba4c8a 88 * {
fundokukiri 0:a7fb0dba4c8a 89 * lcd_.DisplayStringAt(60, 190, (uint8_t *)" ", LEFT_MODE); // Overwrite previous text
fundokukiri 0:a7fb0dba4c8a 90 * lcd_.DisplayStringAt(60, 190, (uint8_t *)"SLIDER1 = 50%", LEFT_MODE); // Write text to LCD
fundokukiri 0:a7fb0dba4c8a 91 * }
fundokukiri 0:a7fb0dba4c8a 92 * else // Slider Control Value decision
fundokukiri 0:a7fb0dba4c8a 93 * {
fundokukiri 0:a7fb0dba4c8a 94 * lcd_.DisplayStringAt(60, 190, (uint8_t *)" ", LEFT_MODE); // Overwrite previous text
fundokukiri 0:a7fb0dba4c8a 95 * lcd_.DisplayStringAt(60, 190, (uint8_t *)"SLIDER1 > 50%", LEFT_MODE); // Write text to LCD
fundokukiri 0:a7fb0dba4c8a 96 * }
fundokukiri 0:a7fb0dba4c8a 97 * } // End sld1 instructions
fundokukiri 0:a7fb0dba4c8a 98 *
fundokukiri 0:a7fb0dba4c8a 99 * if (Slider2.Moved()) // Check if Slider2 Slider was touched and run instructions if true
fundokukiri 0:a7fb0dba4c8a 100 * {
fundokukiri 0:a7fb0dba4c8a 101 * lcd_.SetTextColor(LCD_COLOR_BLACK);
fundokukiri 0:a7fb0dba4c8a 102 * lcd_.FillRect(390, 140, 80, 40); // Draw border to display Slider Control Value
fundokukiri 0:a7fb0dba4c8a 103 * lcd_.SetTextColor(LCD_COLOR_WHITE);
fundokukiri 0:a7fb0dba4c8a 104 * lcd_.FillRect(400, 145, 60, 30); // Draw border to display Slider Control Value
fundokukiri 0:a7fb0dba4c8a 105 *
fundokukiri 0:a7fb0dba4c8a 106 * sprintf(char_SliderDisplayValue, "%3d", (int) SliderDisplayValue_); // Convert integer to text
fundokukiri 0:a7fb0dba4c8a 107 * lcd_.SetFont(&Font12); // Set Font size
fundokukiri 0:a7fb0dba4c8a 108 * lcd_.SetTextColor(LCD_COLOR_BLACK); // Set Font colour
fundokukiri 0:a7fb0dba4c8a 109 * lcd_.DisplayStringAt(415, 155, (uint8_t *)char_SliderDisplayValue, LEFT_MODE); // Write Slider Control Value to the LCD
fundokukiri 0:a7fb0dba4c8a 110 * }
fundokukiri 0:a7fb0dba4c8a 111 *
fundokukiri 0:a7fb0dba4c8a 112 * wait(0.02f);
fundokukiri 0:a7fb0dba4c8a 113 * } // End Main program loop
fundokukiri 0:a7fb0dba4c8a 114 * } // End Main program
fundokukiri 0:a7fb0dba4c8a 115 * @endcode
fundokukiri 0:a7fb0dba4c8a 116 */
fundokukiri 0:a7fb0dba4c8a 117
fundokukiri 0:a7fb0dba4c8a 118 class Slider
fundokukiri 0:a7fb0dba4c8a 119 {
fundokukiri 0:a7fb0dba4c8a 120 public:
fundokukiri 0:a7fb0dba4c8a 121 //! Constructor
fundokukiri 0:a7fb0dba4c8a 122 Slider(LCD_DISCO_F746NG &lcd, TS_DISCO_F746NG &ts,
fundokukiri 0:a7fb0dba4c8a 123 uint16_t x, uint16_t y, uint16_t width, uint16_t height,
fundokukiri 0:a7fb0dba4c8a 124 uint16_t value_C, uint16_t min, uint16_t max,
fundokukiri 0:a7fb0dba4c8a 125 uint32_t sliderColour, uint32_t changeColour,
fundokukiri 0:a7fb0dba4c8a 126 int style, const string label = "", sFONT &fonts = Font12,
fundokukiri 0:a7fb0dba4c8a 127 uint32_t textColour = LCD_COLOR_WHITE)
fundokukiri 0:a7fb0dba4c8a 128 : lcd_(lcd), ts_(ts), SliderX_(x), SliderY_(y), SliderW_(width), SliderH_(height),
fundokukiri 0:a7fb0dba4c8a 129 valueControl_(value_C), Min_ (min), Max_ (max),
fundokukiri 0:a7fb0dba4c8a 130 SLIDER_COLOUR_(sliderColour), CHANGE_COLOUR_(changeColour),
fundokukiri 0:a7fb0dba4c8a 131 STYLE_(style), LABEL_(label), FONTS_(&fonts), FONT_WIDTH_(fonts.Width),
fundokukiri 0:a7fb0dba4c8a 132 FONT_HEIGHT_(fonts.Height), active_(true)
fundokukiri 0:a7fb0dba4c8a 133 { Render(); }
fundokukiri 0:a7fb0dba4c8a 134
fundokukiri 0:a7fb0dba4c8a 135 /**
fundokukiri 0:a7fb0dba4c8a 136 * @brief Draw Slider.
fundokukiri 0:a7fb0dba4c8a 137 *
fundokukiri 0:a7fb0dba4c8a 138 */
fundokukiri 0:a7fb0dba4c8a 139 void Render();
fundokukiri 0:a7fb0dba4c8a 140
fundokukiri 0:a7fb0dba4c8a 141 /**
fundokukiri 0:a7fb0dba4c8a 142 * @brief Service Slider.
fundokukiri 0:a7fb0dba4c8a 143 *
fundokukiri 0:a7fb0dba4c8a 144 */
fundokukiri 0:a7fb0dba4c8a 145 void Service();
fundokukiri 0:a7fb0dba4c8a 146
fundokukiri 0:a7fb0dba4c8a 147 /**
fundokukiri 0:a7fb0dba4c8a 148 * @brief Check touch detected on Slider.
fundokukiri 0:a7fb0dba4c8a 149 *
fundokukiri 0:a7fb0dba4c8a 150 */
fundokukiri 0:a7fb0dba4c8a 151 bool Moved();
fundokukiri 0:a7fb0dba4c8a 152
fundokukiri 0:a7fb0dba4c8a 153 /**
fundokukiri 0:a7fb0dba4c8a 154 * @brief Check if touch is on Slider.
fundokukiri 0:a7fb0dba4c8a 155 *
fundokukiri 0:a7fb0dba4c8a 156 */
fundokukiri 0:a7fb0dba4c8a 157 bool SliderBoundaryCheck();
fundokukiri 0:a7fb0dba4c8a 158
fundokukiri 0:a7fb0dba4c8a 159 /**
fundokukiri 0:a7fb0dba4c8a 160 * @brief Check previous state of Slider.
fundokukiri 0:a7fb0dba4c8a 161 *
fundokukiri 0:a7fb0dba4c8a 162 */
fundokukiri 0:a7fb0dba4c8a 163 static TS_StateTypeDef GottenState()
fundokukiri 0:a7fb0dba4c8a 164 { return state_; }
fundokukiri 0:a7fb0dba4c8a 165
fundokukiri 0:a7fb0dba4c8a 166 /**
fundokukiri 0:a7fb0dba4c8a 167 * @brief Set or reset multi-touch.
fundokukiri 0:a7fb0dba4c8a 168 *
fundokukiri 0:a7fb0dba4c8a 169 */
fundokukiri 0:a7fb0dba4c8a 170 static void SetMultiTouch(bool tf) { multiTouch = tf; }
fundokukiri 0:a7fb0dba4c8a 171
fundokukiri 0:a7fb0dba4c8a 172
fundokukiri 0:a7fb0dba4c8a 173 private:
fundokukiri 0:a7fb0dba4c8a 174 LCD_DISCO_F746NG &lcd_;
fundokukiri 0:a7fb0dba4c8a 175 TS_DISCO_F746NG &ts_;
fundokukiri 0:a7fb0dba4c8a 176
fundokukiri 0:a7fb0dba4c8a 177 const uint16_t SliderX_, SliderY_, SliderW_, SliderH_, valueControl_, Min_, Max_;
fundokukiri 0:a7fb0dba4c8a 178 const uint32_t SLIDER_COLOUR_; // original color
fundokukiri 0:a7fb0dba4c8a 179 const uint32_t CHANGE_COLOUR_; // colour to change to color
fundokukiri 0:a7fb0dba4c8a 180 const int STYLE_; // Slider style
fundokukiri 0:a7fb0dba4c8a 181 const string LABEL_; // Slider label
fundokukiri 0:a7fb0dba4c8a 182 sFONT *const FONTS_;
fundokukiri 0:a7fb0dba4c8a 183 const uint16_t FONT_WIDTH_;
fundokukiri 0:a7fb0dba4c8a 184 const uint16_t FONT_HEIGHT_;
fundokukiri 0:a7fb0dba4c8a 185 bool active_; // Slider active boolean
fundokukiri 0:a7fb0dba4c8a 186
fundokukiri 0:a7fb0dba4c8a 187 static TS_StateTypeDef state_;
fundokukiri 0:a7fb0dba4c8a 188 static bool multiTouch;
fundokukiri 0:a7fb0dba4c8a 189
fundokukiri 0:a7fb0dba4c8a 190 /**
fundokukiri 0:a7fb0dba4c8a 191 * @brief Disallow copy constructor and assignment operator.
fundokukiri 0:a7fb0dba4c8a 192 *
fundokukiri 0:a7fb0dba4c8a 193 */
fundokukiri 0:a7fb0dba4c8a 194 Slider(const Slider&);
fundokukiri 0:a7fb0dba4c8a 195 Slider& operator=(const Slider&);
fundokukiri 0:a7fb0dba4c8a 196 };
fundokukiri 0:a7fb0dba4c8a 197 #endif // F746_SLIDER_HPP