2018年3月16日に開催されるCQ出版社インターフェース誌オフ会で紹介するプログラム

Dependencies:   mbed Array_Matrix BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG

Files at this revision

API Documentation at this revision

Comitter:
MikamiUitOpen
Date:
Sat Mar 10 11:37:33 2018 +0000
Child:
1:c27b3361dbbb
Commit message:
1

Changed in this revision

F746_Gui_New/Array_Matrix.lib Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/BSP_DISCO_F746NG.lib Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/BlinkLabel.hpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/Button.cpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/Button.hpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/ButtonGroup.cpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/ButtonGroup.hpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/F746_GUI.hpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/GuiBase.cpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/GuiBase.hpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/LCD_DISCO_F746NG.lib Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/Label.cpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/Label.hpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/NumericLabel.hpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/ResetButton.hpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/SeekBar.cpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/SeekBar.hpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/SeekbarGroup.cpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/SeekbarGroup.hpp Show annotated file Show diff for this revision Revisions of this file
F746_Gui_New/TS_DISCO_F746NG.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/Array_Matrix.lib	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/MikamiUitOpen/code/Array_Matrix/#a25dba17218c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/BSP_DISCO_F746NG.lib	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/ST/code/BSP_DISCO_F746NG/#df2ea349c37a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/BlinkLabel.hpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,46 @@
+//-----------------------------------------------------------
+//  BlinkLabel class -- derived class of Label class
+//      For displaying error message
+//
+//  2017/01/25, Copyright (c) 2017 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#ifndef F746_BLINK_LABEL_HPP
+#define F746_BLINK_LABEL_HPP
+
+#include "Label.hpp"
+#include "ResetButton.hpp"
+
+namespace Mikami
+{
+    class BlinkLabel : public Label
+    {
+    public:
+        // Constructor
+        BlinkLabel(uint16_t x, uint16_t y, const string str,
+                   TextAlignMode mode = LEFT,
+                   sFONT &fonts = Font20,
+                   uint32_t textColor = LCD_COLOR_RED,
+                   uint32_t backColor = GuiBase::ENUM_BACK,
+                   uint32_t on = 500, uint32_t off = 200)
+            : Label(x, y, str, mode, fonts, textColor, backColor)
+        {
+            ResetButton reset;
+            while (true)    // Blinking here
+            {
+                wait_ms(on);
+                Draw(backColor);
+                wait_ms(off);
+                Draw(textColor);
+                reset.DoIfTouched();
+            }
+        }
+
+    private:
+        // disallow copy constructor and assignment operator
+        BlinkLabel(const BlinkLabel&);
+        BlinkLabel& operator=(const BlinkLabel&);
+    };
+}
+#endif  // F746_BLINK_LABEL_HPP
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/Button.cpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,67 @@
+//-----------------------------------------------------------
+//  Button class handling multi-touch
+//      Multi-touch: Enabled (default)
+//
+//  2016/04/08, Copyright (c) 2016 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#include "Button.hpp"
+
+namespace Mikami
+{
+    // Draw button
+    void Button::Draw(uint32_t color, uint32_t textColor)
+    {
+        if (color == BACK_COLOR_) active_ = true;
+        if (!active_) return;
+        lcd_.SetTextColor(color);
+        lcd_.FillRect(X_, Y_, W_, H_);
+
+        if (STR_.length() != 0)
+        {
+            lcd_.SetFont(FONTS_);
+            lcd_.SetBackColor(color);
+            lcd_.SetTextColor(textColor);
+            uint16_t x0 = X_ + (W_ - FONTS_->Width*(STR_.length()))/2;
+            uint16_t y0 = Y_ + (H_ - FONTS_->Height)/2 + 1;
+            DrawString(x0, y0, STR_);
+            lcd_.SetBackColor(BACK_COLOR_);  // recover back color
+        }            
+    }
+
+    // Check touch detected
+    bool Button::Touched()
+    {
+        if (!active_) return false;
+        if (!PanelTouched()) return false;
+        if (!IsOnButton()) return false;
+        Draw(TOUCHED_COLOR_, TEXT_COLOR_);
+        return true;
+    }
+
+    // If touched position is on the button, return true
+    bool Button::IsOnButton()
+    {
+        int nTouch = multiTouch_ ? state_.touchDetected : 1;
+        for (int n=0; n<nTouch; n++)
+        {
+            uint16_t x = state_.touchX[n];
+            uint16_t y = state_.touchY[n];
+            if ( (X_ <= x) && (x <= X_+W_) &&
+                 (Y_ <= y) && (y <= Y_+H_) ) return true;
+        }
+        return false;
+    }
+
+    void Button::Activate()
+    {
+        active_ = true;
+        Draw();
+    }
+
+    void Button::Inactivate()
+    {
+        Draw(INACTIVE_COLOR_, INACTIVE_TEXT_COLOR_);
+        active_ = false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/Button.hpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,65 @@
+//-----------------------------------------------------------
+//  Button class handling multi-touch -- Header
+//      Multi-touch: Enabled (default)
+//
+//  2016/03/29, Copyright (c) 2016 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#ifndef F746_BUTTON_HPP
+#define F746_BUTTON_HPP
+
+#include "GuiBase.hpp"
+
+namespace Mikami
+{
+    class Button : public GuiBase
+    {
+    public:
+        // Constructor
+        Button(uint16_t x, uint16_t y,
+               uint16_t width, uint16_t height,
+               const string str = "", sFONT &fonts = Font12,
+               uint32_t textColor         = GuiBase::ENUM_TEXT,
+               uint32_t backColor         = GuiBase::ENUM_BACK,
+               uint32_t createdColor      = GuiBase::ENUM_CREATED,
+               uint32_t touchedColor      = GuiBase::ENUM_TOUCHED,
+               uint32_t inactiveColor     = GuiBase::ENUM_INACTIVE,
+               uint32_t inactiveTextColor = GuiBase::ENUM_INACTIVE_TEXT)
+              : GuiBase(x, y, fonts,
+                        textColor, backColor, createdColor,
+                        touchedColor, inactiveColor,
+                        inactiveTextColor),
+                W_(width), H_(height), STR_(str), active_(true)
+        {   Draw(); }
+
+        // Draw button
+        void Draw(uint32_t color, uint32_t textColor);
+        void Draw(uint32_t color) { Draw(color, TEXT_COLOR_); }
+        void Draw() { Draw(CREATED_COLOR_, TEXT_COLOR_); }
+
+        // Erase button
+        void Erase() { Draw(BACK_COLOR_, BACK_COLOR_); }
+
+        // Check touch detected and redraw button
+        bool Touched();
+
+        bool IsOnButton();
+
+        void Activate();
+        void Inactivate();
+        bool IsActive() { return active_; }
+
+        // Set or reset multi-touch
+        static void SetMultiTouch(bool tf) { multiTouch_ = tf; }
+
+    private:       
+        const uint16_t W_, H_;
+        const string STR_;
+        bool active_;
+
+        // disallow copy constructor and assignment operator
+        Button(const Button&);
+        Button& operator=(const Button&);
+    };
+}
+#endif  // F746_BUTTON_HPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/ButtonGroup.cpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,134 @@
+//-----------------------------------------------------------
+//  ButtonGroup class
+//
+//  2017/01/25, Copyright (c) 2017 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#include "ButtonGroup.hpp"
+
+namespace Mikami
+{
+    // Constructor
+    ButtonGroup::ButtonGroup(
+            uint16_t x0, uint16_t y0,
+            uint16_t width, uint16_t height,
+            uint16_t number, const string str[],
+            uint16_t spaceX, uint16_t spaceY,
+            uint16_t column, int touched,
+            sFONT &fonts,
+            uint32_t textColor, uint32_t backColor,
+            uint32_t createdColor, uint32_t touchedColor,
+            uint32_t inactiveColor, uint32_t inactiveTextColor)
+        : TEXT_COLOR_(textColor), CREATED_COLOR_(createdColor),
+          TOUCHED_COLOR_(touchedColor),
+          NUMBER_(number), prevNum_(touched)
+    {
+        buttons_.SetSize(number);
+        for (int n=0; n<number; n++)
+        {
+            div_t u1 = div(n, column);
+            uint16_t x = x0 + u1.rem*(width + spaceX);
+            uint16_t y = y0 + u1.quot*(height + spaceY);
+            buttons_[n] =
+                new Button(x, y, width, height, str[n], fonts,
+                           textColor, backColor,
+                           createdColor, touchedColor,
+                           inactiveColor, inactiveTextColor);
+        }
+        // On created, set touched color as needed
+        if (touched >= 0) TouchedColor(touched);
+    }
+
+    // Draw button
+    bool ButtonGroup::Draw(int num, uint32_t color, uint32_t textColor)
+    {
+        if (!Range(num)) return false;
+        buttons_[num]->Draw(color, textColor);
+        return true;
+    }
+
+    // Change to touched color
+    bool ButtonGroup::TouchedColor(int num)
+    {
+        if (prevNum_ != num) prevNum_ = num;
+        return Draw(num, TOUCHED_COLOR_, TEXT_COLOR_);
+    }
+
+    // Erase button
+    bool ButtonGroup::Erase(int num)
+    {
+        if (!Range(num)) return false;
+        buttons_[num]->Erase();
+        return true;
+    }
+
+    // Check touch detected for specified button
+    bool ButtonGroup::Touched(int num)
+    {
+        if (!Range(num)) return false;
+        if (!buttons_[num]->IsActive()) return false;
+        int touched;
+        if (!GetTouchedNumber(touched)) return false;
+        bool rtn = (touched == num) ? true : false;
+        return rtn;
+    }
+
+    // Get touched number, return value: true or false
+    bool ButtonGroup::GetTouchedNumber(int &num)
+    {
+        bool rtn = false;
+        if (GuiBase::PanelTouched())
+        {
+            for (int n=0; n<NUMBER_; n++)
+                if (buttons_[n]->IsOnButton() &&
+                    buttons_[n]->IsActive())
+                {
+                    num = n;
+                    rtn = true;
+                }
+            
+            if (!rtn) return false;
+        }
+        else
+            return false;
+
+        buttons_[num]->Draw(TOUCHED_COLOR_);
+        if ((prevNum_ >= 0) && (prevNum_ != num))
+            buttons_[prevNum_]->Draw();
+        if (prevNum_ != num) prevNum_ = num;
+        return true;
+    }
+
+    // Get touched number, return value: touched number
+    int ButtonGroup::GetTouchedNumber()
+    {
+        int num;
+        if (GetTouchedNumber(num))
+            return num;
+        else
+            return -1;
+    }
+
+    // Wait until touched and get touched number
+    int ButtonGroup::WaitTouchedAndGet()
+    {
+        int num;
+        while (!GetTouchedNumber(num)) {}
+        return num;
+    }
+
+    // Activate and inactivate button(s)
+    bool ButtonGroup::Activate(int num)
+    {
+        if (!Range(num)) return false;
+        buttons_[num]->Activate();
+        return true;
+    }
+    bool ButtonGroup::Inactivate(int num)
+    {
+        if (!Range(num)) return false;
+        buttons_[num]->Inactivate();
+        return true;
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/ButtonGroup.hpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,95 @@
+//-----------------------------------------------------------
+//  ButtonGroup class -- Header
+//
+//  2017/01/25, Copyright (c) 2017 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#ifndef F746_BUTTON_GROUP_HPP
+#define F746_BUTTON_GROUP_HPP
+
+#include "Button.hpp"
+#include "Array.hpp"
+
+namespace Mikami
+{
+    class ButtonGroup
+    {
+    public:
+        // Constructor
+        ButtonGroup(uint16_t x0, uint16_t y0,
+                    uint16_t width, uint16_t height,
+                    uint16_t number, const string str[],
+                    uint16_t spaceX = 0, uint16_t spaceY = 0,
+                    uint16_t column = 1,
+                    int touched = -1,   // number for button initially touched-color
+                    sFONT &fonts = Font12,
+                    uint32_t textColor         = GuiBase::ENUM_TEXT,
+                    uint32_t backColor         = GuiBase::ENUM_BACK,
+                    uint32_t createdColor      = GuiBase::ENUM_CREATED,
+                    uint32_t touchedColor      = GuiBase::ENUM_TOUCHED,
+                    uint32_t inactiveColor     = GuiBase::ENUM_INACTIVE,
+                    uint32_t inactiveTextColor = GuiBase::ENUM_INACTIVE_TEXT);
+
+        // Destructor
+        virtual ~ButtonGroup()
+        {   for (int n=0; n<NUMBER_; n++) delete buttons_[n]; }
+
+        // Draw button
+        bool Draw(int num, uint32_t color, uint32_t textColor);
+        bool Draw(int num) { return Draw(num, CREATED_COLOR_, TEXT_COLOR_); }
+
+        // Change to touched color
+        bool TouchedColor(int num);
+
+        // Draw all buttons
+        void DrawAll(uint32_t color, uint32_t textColor)
+        {   for (int n=0; n<NUMBER_; n++) Draw(n, color, textColor); }
+        void DrawAll() { DrawAll(CREATED_COLOR_, TEXT_COLOR_); }
+
+        // Erase button
+        bool Erase(int num);
+        void EraseAll()
+        {   for (int n=0; n<NUMBER_; n++) Erase(n); }
+
+        // Check touch detected for specified button
+        bool Touched(int num);
+
+        // Get touched number, return value: true or false
+        bool GetTouchedNumber(int &num);
+        // Get touched number, return value: touched number
+        int GetTouchedNumber();
+
+        // Wait until touched
+        void WaitTouched(int num)
+        {   while (!Touched(num)) {} }
+        // Wait until touched and get touched number
+        int WaitTouchedAndGet();
+
+        // Activate and inactivate button(s)
+        bool Activate(int num);
+        void ActivateAll()
+        {   for (int n=0; n<NUMBER_; n++) Activate(n); }
+        bool Inactivate(int num);
+        void InactivateAll()
+        {   for (int n=0; n<NUMBER_; n++) Inactivate(n); }
+
+    private:
+        const uint32_t TEXT_COLOR_;
+        const uint32_t CREATED_COLOR_;
+        const uint32_t TOUCHED_COLOR_;
+        const int NUMBER_;
+
+        Array<Button *> buttons_;
+        __IO int prevNum_;
+
+        // Check range of argument
+        bool Range(int n)
+        { return ((n >= 0) && (n < NUMBER_)); }
+
+        // disallow copy constructor and assignment operator
+        ButtonGroup(const ButtonGroup&);
+        ButtonGroup& operator=(const ButtonGroup&);
+    };
+}
+#endif  // F746_BUTTON_GROUP_HPP
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/F746_GUI.hpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,20 @@
+//--------------------------------------------------------------
+//  F746-DISCO の GUI 用のインクルード文とそれらを使うための
+//  using 宣言をまとめたもの
+//  Include statements for F746-DISCO GUI and using directive
+//
+//  2016/08/15, Copyright (c) 2016 MIKAMI, Naoki
+//--------------------------------------------------------------
+
+#include "mbed.h"
+#ifndef __STM32F746xx_H
+#error Platform is not F746NG-DISCOVERY
+#endif
+
+#include "BlinkLabel.hpp"
+#include "ButtonGroup.hpp"
+#include "NumericLabel.hpp"
+#include "ResetButton.hpp"
+#include "SeekbarGroup.hpp"
+
+using namespace Mikami;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/GuiBase.cpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,44 @@
+//-----------------------------------------------------------
+//  GuiBase class (abstract base class)
+//
+//  2016/03/29, Copyright (c) 2016 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#include "GuiBase.hpp"
+
+namespace Mikami
+{
+    GuiBase::GuiBase(
+        uint16_t x, uint16_t y, sFONT &fonts,
+        uint32_t textColor, uint32_t backColor,
+        uint32_t createdColor, uint32_t touchedColor,
+        uint32_t inactiveColor, uint32_t inactiveTextColor)
+        : X_(x), Y_(y), FONTS_(&fonts),
+          TEXT_COLOR_(textColor), BACK_COLOR_(backColor),
+          CREATED_COLOR_(createdColor),
+          TOUCHED_COLOR_(touchedColor),
+          INACTIVE_COLOR_(inactiveColor),
+          INACTIVE_TEXT_COLOR_(inactiveTextColor)
+    {
+        if (first_)
+        {
+            lcd_.Clear(backColor);
+            first_ = false;
+        }
+    }
+
+    // If panel touched, return true
+    bool GuiBase::PanelTouched()
+    {
+        ts_.GetState(&state_);
+        return (bool)(state_.touchDetected);
+    }
+
+    LCD_DISCO_F746NG GuiBase::lcd_;
+    TS_DISCO_F746NG GuiBase::ts_;
+
+    TS_StateTypeDef GuiBase::state_;
+
+    bool GuiBase::multiTouch_ = false;
+    bool GuiBase::first_ = true;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/GuiBase.hpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,70 @@
+//-----------------------------------------------------------
+//  GuiBase class (abstract base class) ---- Header
+//      
+//  2017/03/17, Copyright (c) 2017 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#ifndef F746_GUI_BASE_HPP
+#define F746_GUI_BASE_HPP
+
+#include "mbed.h"
+#include <string>
+#include "TS_DISCO_F746NG.h"
+#include "LCD_DISCO_F746NG.h"
+
+namespace Mikami
+{
+    class GuiBase
+    {
+    public:                    
+        static LCD_DISCO_F746NG& GetLcd() { return lcd_; }
+        static TS_DISCO_F746NG& GetTs() { return ts_; }
+
+        // If panel touched, return true
+        static bool PanelTouched();
+        // Get touch panel state
+        static TS_StateTypeDef GetTsState() { return state_; }
+
+        enum { ENUM_TEXT = 0xFFFFFFFF, ENUM_BACK = 0xFF003538,
+               ENUM_CREATED = 0xFF0068B7, ENUM_TOUCHED = 0xFF7F7FFF,
+               ENUM_INACTIVE = 0xD0003538, ENUM_INACTIVE_TEXT = 0xFF808080};
+
+    protected:
+        static LCD_DISCO_F746NG lcd_;  // for LCD display
+        static TS_DISCO_F746NG ts_;    // for touch pannel
+
+        static TS_StateTypeDef state_;
+        static bool multiTouch_;
+
+        const uint16_t X_, Y_;
+        sFONT *const FONTS_;
+
+        const uint32_t TEXT_COLOR_;
+        const uint32_t BACK_COLOR_;
+        const uint32_t CREATED_COLOR_;
+        const uint32_t TOUCHED_COLOR_;
+        const uint32_t INACTIVE_COLOR_;
+        const uint32_t INACTIVE_TEXT_COLOR_;
+
+        // Constructor
+        GuiBase(uint16_t x =0, uint16_t y =0,
+                sFONT &fonts = Font12,
+                uint32_t textColor         = ENUM_TEXT,
+                uint32_t backColor         = ENUM_BACK,
+                uint32_t createdColor      = ENUM_CREATED,
+                uint32_t touchedColor      = ENUM_TOUCHED,
+                uint32_t inactiveColor     = ENUM_INACTIVE,
+                uint32_t inactiveTextColor = ENUM_INACTIVE_TEXT);
+
+        void DrawString(uint16_t x, uint16_t y, const string str)
+        { lcd_.DisplayStringAt(x, y, (uint8_t *)str.c_str(), LEFT_MODE); }
+
+    private:
+        static bool first_;
+        
+        // disallow copy constructor and assignment operator
+        GuiBase(const GuiBase&);
+        GuiBase& operator=(const GuiBase&);
+    };
+}
+#endif  // F746_GUI_BASE_HPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/LCD_DISCO_F746NG.lib	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/ST/code/LCD_DISCO_F746NG/#d44525b1de98
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/Label.cpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,50 @@
+//-----------------------------------------------------------
+//  Label class
+//
+//  2016/04/24, Copyright (c) 2016 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#include "Label.hpp"
+
+namespace Mikami
+{
+    // Constructor
+    Label::Label(uint16_t x, uint16_t y,
+                 const string str, TextAlignMode mode, sFONT &fonts,
+                 uint32_t textColor, uint32_t backColor)
+        : GuiBase(x, y, fonts, textColor, backColor),
+          MODE_(mode), STR_(str)
+    {
+        length_ = str.length();
+        lcd_.SetBackColor(backColor);
+        lcd_.SetTextColor(textColor);
+        lcd_.SetFont(&fonts);
+        DrawString(PosX(x), y, str);
+    }
+
+    void Label::Draw(const string str, uint32_t textColor)
+    {
+        // Erase previously-drawn string
+        lcd_.SetTextColor(BACK_COLOR_);
+        length_ = (length_ > str.length()) ? length_ : str.length();
+        lcd_.FillRect(PosX(X_), Y_, FONTS_->Width*length_+1, FONTS_->Height);
+
+        // Draw new string
+        length_ = str.length();
+        lcd_.SetFont(FONTS_);
+        lcd_.SetTextColor(textColor);
+        DrawString(PosX(X_), Y_, str);
+    }
+
+    uint16_t Label::PosX(uint16_t x)
+    {
+        if (MODE_ == LEFT) return x;
+        else
+        {
+            if (MODE_ == CENTER)
+                return x - length_*FONTS_->Width/2;
+            else
+                return x - length_*FONTS_->Width;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/Label.hpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,58 @@
+//-----------------------------------------------------------
+//  Label class -- Header
+//
+//  2016/10/02, Copyright (c) 2016 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#ifndef F746_LABEL_HPP
+#define F746_LABEL_HPP
+
+#include "GuiBase.hpp"
+
+namespace Mikami
+{
+    class Label : public GuiBase
+    {
+    public:
+        enum TextAlignMode { LEFT, CENTER, RIGHT };
+        // Constructor
+        Label(uint16_t x, uint16_t y, const string str,
+              TextAlignMode mode = LEFT,
+              sFONT &fonts = Font12,
+              uint32_t textColor = GuiBase::ENUM_TEXT,
+              uint32_t backColor = GuiBase::ENUM_BACK);
+
+        // Constructor without string
+        Label(uint16_t x, uint16_t y,
+              TextAlignMode mode = LEFT,
+              sFONT &fonts = Font12,
+              uint32_t textColor = GuiBase::ENUM_TEXT,
+              uint32_t backColor = GuiBase::ENUM_BACK)
+            : GuiBase(x, y, fonts, textColor, backColor),
+              MODE_(mode), STR_(""), length_(0) {}
+
+        void Draw()
+        {   Draw(STR_, TEXT_COLOR_); }
+
+        void Draw(const string str)
+        {   Draw(str, TEXT_COLOR_); }
+
+        void Draw(uint32_t textColor)
+        {   Draw(STR_, textColor); }
+
+        void Draw(const string str,
+                  uint32_t textColor);
+                  
+    private:
+        const TextAlignMode MODE_;
+        const string STR_;
+        
+        uint8_t length_;
+        uint16_t PosX(uint16_t x);
+        
+        // disallow copy constructor and assignment operator
+        Label(const Label&);
+        Label& operator=(const Label&);
+    };
+}
+#endif  // F746_LABEL_HPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/NumericLabel.hpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,64 @@
+//-----------------------------------------------------------
+//  NumericLabel class -- derived class of Label class
+//
+//  2016/11/07, Copyright (c) 2016 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#ifndef F746_NUMERIC_LABEL_HPP
+#define F746_NUMERIC_LABEL_HPP
+
+#include "Label.hpp"
+
+namespace Mikami
+{
+    template <typename T> class NumericLabel : public Label
+    {
+    public:
+        // Constructor without drawing value
+        NumericLabel(uint16_t x, uint16_t y,
+                     const char fmt[],
+                     TextAlignMode mode = LEFT,
+                     sFONT &fonts = Font12,
+                     uint32_t textColor = GuiBase::ENUM_TEXT,
+                     uint32_t backColor = GuiBase::ENUM_BACK)
+            : Label(x, y, "", mode, fonts, textColor, backColor), FMT_(fmt) {}
+
+        // Constructor with drawing value
+        NumericLabel(uint16_t x, uint16_t y,
+                     const char fmt[], T val,
+                     TextAlignMode mode = LEFT,
+                     sFONT &fonts = Font12,
+                     uint32_t textColor = GuiBase::ENUM_TEXT,
+                     uint32_t backColor = GuiBase::ENUM_BACK)
+            : Label(x, y, "", mode, fonts, textColor, backColor), FMT_(fmt)
+        {   Draw(val); }
+
+        // Draw value using format specified in constructor
+        void Draw(T val)
+        {
+            sprintf(str_, FMT_, val);
+            Label::Draw(str_);
+        }
+
+        // Draw value
+        void Draw(const char fmt[], T val)
+        {
+            sprintf(str_, fmt, val);
+            Label::Draw(str_);
+        }
+
+        // Draw previous value with specified color
+        void Redraw(uint32_t color)
+        {   Label::Draw(str_, color); }
+
+    private:
+        const char *const FMT_;
+        char str_[81];
+
+        // disallow copy constructor and assignment operator
+        NumericLabel(const NumericLabel&);
+        NumericLabel& operator=(const NumericLabel&);
+    };
+}
+#endif  // F746_NUMERIC_LABEL_HPP
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/ResetButton.hpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,46 @@
+//-----------------------------------------------------------
+//  ResetButton class -- derived class of Button class
+//
+//  2017/01/16, Copyright (c) 2017 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#ifndef F746_RESET_BUTTON_HPP
+#define F746_RESET_BUTTON_HPP
+
+#include "Button.hpp"
+
+namespace Mikami
+{
+    class ResetButton : public Button
+    {
+    public:
+        ResetButton(uint16_t x = 0, uint16_t y = 240,
+                    uint16_t w = 32, uint16_t h = 32)
+            : Button(x, y, w, h)
+        {
+            pt_[0] = (Point){x+0.2f*w, y+h/2};
+            pt_[1] = (Point){x+0.75f*w, y+0.175f*h};
+            pt_[2] = (Point){x+0.75f*w, y+0.825f*h};
+            Draw();
+        }
+
+        void DoIfTouched()
+        {
+            if (!Touched()) return;
+
+            wait(0.2f);
+            NVIC_SystemReset();
+        }
+        
+        void Draw()
+        {
+            Activate();
+            lcd_.SetTextColor(LCD_COLOR_WHITE);
+            lcd_.FillPolygon(pt_, 3);
+        }
+
+    private:
+        Point pt_[3];
+    };
+}
+#endif  // F746_RESET_BUTTON_HPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/SeekBar.cpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,182 @@
+//-----------------------------------------------------------
+//  SeekBar class
+//
+//  2017/01/25, Copyright (c) 2017 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#include "SeekBar.hpp"
+
+namespace Mikami
+{
+    // Constructor with scale value (only horizontal)
+    SeekBar::SeekBar(uint16_t x, uint16_t y, uint16_t length,
+                     float min, float max, float initialValue,
+                     string left, string center, string right,
+                     uint32_t thumbColor,
+                     uint16_t thumbSize, uint16_t width,
+                     uint32_t colorL, uint32_t colorH,
+                     uint32_t backColor)
+        : GuiBase(x, y, Font12, GuiBase::ENUM_TEXT, backColor, thumbColor),
+          L_(length), W_(width),
+          SIZE_(thumbSize), COLOR_L_(colorL), COLOR_H_(colorH),
+          MIN_(min), MAX_(max), ORIENT_(Holizontal), v_(initialValue),
+          labelOn_(true), slided_(false), active_(true)
+    {
+        Draw(initialValue);
+        uint16_t y0 = y - thumbSize/2 - 13;
+        labelLCR_[0] = new Label(x, y0, left, Label::CENTER);
+        labelLCR_[1] = new Label(x+length/2, y0, center, Label::CENTER);
+        labelLCR_[2] = new Label(x+length, y0, right, Label::CENTER);
+    }
+
+    // Slide thumb
+    //      If the thumb is not touched, return false
+    bool SeekBar::Slide()
+    {
+        if (!active_) return false;
+
+        if (!PanelTouched())
+        {
+            if (slided_) Draw(v_);
+            slided_ = false;
+            return false;
+        }
+
+        uint16_t x, y;
+        bool rtn = IsOnThumb(x, y);
+        if (rtn || slided_)
+        {
+            if (rtn) v_ = ToValue(Point(x, y));
+            Draw(v_, rtn);
+            slided_ = rtn;
+        }
+        return rtn;
+    }
+
+    void SeekBar::Activate()
+    {
+        active_ = true;
+        Draw(v_);
+        if (labelOn_)
+            for (int n=0; n<3; n++) labelLCR_[n]->Draw(TEXT_COLOR_);
+    }
+
+    void SeekBar::Inactivate()
+    {
+        active_ = false;
+        Draw(v_);
+        if (labelOn_)
+            for (int n=0; n<3; n++) labelLCR_[n]->Draw(INACTIVE_TEXT_COLOR_);
+    }
+
+    // If touched position is on the thumb, return true
+    bool SeekBar::IsOnThumb(uint16_t &x, uint16_t &y)
+    {
+        x = state_.touchX[0];
+        y = state_.touchY[0];
+
+        uint16_t th = SIZE_/2;
+        Point pt = ToPoint(v_);
+        if (ORIENT_ == Holizontal)
+        {
+            if ( (pt.x-th <= x) && (x <= pt.x+th) &&
+                 (pt.y-th <= y) && (y <= pt.y+th) ) return true;
+        }
+        else
+        {
+            if ( (pt.x-th <= x) && (x <= pt.x+th) &&
+                 (pt.y-th <= y) && (y <= pt.y+th) ) return true;
+        }
+
+        return false;
+    }
+
+    // Draw seekbar
+    void SeekBar::Draw(float value, bool fill)
+    {
+        uint16_t sizeS = (uint16_t)(SIZE_*0.6f);
+        // Erase previous seekbar
+        lcd_.SetTextColor(BACK_COLOR_);
+        if (ORIENT_ == Holizontal)
+            lcd_.FillRect(X_-sizeS/2, Y_-SIZE_/2, L_+sizeS+1, SIZE_+1);
+        else
+            lcd_.FillRect(X_-SIZE_/2, Y_-sizeS/2, SIZE_+1, L_+sizeS+1);
+
+        v_ = Saturate(value);       // current value
+        Point pt = ToPoint(v_);     // Position of thumb
+
+        // Draw upper line
+        if (active_) lcd_.SetTextColor(COLOR_H_);
+        else         lcd_.SetTextColor(INACTIVE_TEXT_COLOR_-0x404040);
+        if ((ORIENT_ == Holizontal) && ((X_+L_-pt.x) > 0))
+            lcd_.FillRect(pt.x, Y_-W_/4, X_+L_-pt.x, W_/2);
+        if ((ORIENT_ == Vertical) && ((pt.y-Y_) > 0))
+            lcd_.FillRect(X_-W_/4, Y_, W_/2, pt.y-Y_);
+
+        // Draw lower line
+        if (active_) lcd_.SetTextColor(COLOR_L_);
+        else         lcd_.SetTextColor(INACTIVE_TEXT_COLOR_-0x202020);
+        if ((ORIENT_ == Holizontal) && ((pt.x-X_) > 0))
+            lcd_.FillRect(X_, Y_-W_/2, pt.x-X_, W_);
+        if ((ORIENT_ == Vertical) && ((Y_+L_-pt.y) > 0))
+            lcd_.FillRect(X_-W_/2, pt.y, W_, Y_+L_-pt.y);
+
+        // Draw thumb
+        if (active_) lcd_.SetTextColor(CREATED_COLOR_);
+        else         lcd_.SetTextColor(INACTIVE_TEXT_COLOR_);
+        uint16_t width = SIZE_;
+        uint16_t height = SIZE_;
+        if (ORIENT_ == Holizontal) width = sizeS;
+        else                       height = sizeS;
+        uint16_t xPos = pt.x - width/2;
+        uint16_t yPos = pt.y - height/2;
+        
+        if (fill)
+            lcd_.FillRect(xPos, yPos, width+1, height+1);
+        else
+        {
+            lcd_.DrawRect(xPos, yPos, width, height);
+            lcd_.DrawHLine(pt.x+width/2, pt.y+height/2, 1);
+            lcd_.DrawRect(xPos+1, yPos+1, width-2, height-2);
+            lcd_.DrawHLine(pt.x+width/2-1, pt.y+height/2-1, 1);
+            if (ORIENT_ == Holizontal)
+                lcd_.DrawVLine(pt.x, yPos+4, SIZE_-7);
+            else
+                lcd_.DrawHLine(xPos+4, pt.y, SIZE_-7);
+        }
+    }
+
+    void SeekBar::Redraw(bool fill)
+    {
+        Draw(GetValue(), fill);
+        if (labelOn_)
+            for (int n=0; n<3; n++) labelLCR_[n]->Draw(TEXT_COLOR_);
+    }
+
+    SeekBar::Point SeekBar::ToPoint(float value)
+    {
+        if (ORIENT_ == Holizontal)
+            return Point(X_ + Round(L_*(value - MIN_)/(MAX_ - MIN_)), Y_);
+        else
+            return Point(X_, Y_ + L_ - Round(L_*(value - MIN_)/(MAX_ - MIN_)));
+    }
+
+    float SeekBar::ToValue(Point pt)
+    {
+        float value;
+        if (ORIENT_ == Holizontal)
+            value = (pt.x - X_)*(MAX_ - MIN_)/(float)L_ + MIN_;
+        else
+            value = -(pt.y - Y_ - L_)*(MAX_ - MIN_)/(float)L_ + MIN_;
+        return Saturate(value);
+    }
+
+    float SeekBar::Saturate(float value)
+    {
+        if (value < MIN_) value = MIN_;
+        if (value > MAX_) value = MAX_;
+        return value;
+    }
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/SeekBar.hpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,95 @@
+//-----------------------------------------------------------
+//  SeekBar class -- Header
+//
+//  2017/01/25, Copyright (c) 2017 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#ifndef F746_SEEKBAR_HPP
+#define F746_SEEKBAR_HPP
+
+#include "GuiBase.hpp"
+#include "Label.hpp"
+
+namespace Mikami
+{
+    class SeekBar : public GuiBase
+    {
+    public:
+        enum Orientation { Holizontal, Vertical };
+
+        struct Point
+        {
+            uint16_t x, y;
+            Point(uint16_t x0 = 0, uint16_t y0 = 0) : x(x0), y(y0) {}
+        };
+
+        // Constructor
+        SeekBar(uint16_t x, uint16_t y, uint16_t length,
+                float min, float max, float initialValue,
+                Orientation hv = Holizontal,
+                uint32_t thumbColor = 0xFFB0B0FF,
+                uint16_t thumbSize = 30, uint16_t width = 4,
+                uint32_t colorL = LCD_COLOR_LIGHTGRAY,
+                uint32_t colorH = 0xFFB0B0B0,
+                uint32_t backColor = GuiBase::ENUM_BACK)
+            : GuiBase(x, y, Font12, 0, backColor, thumbColor),
+              L_(length), W_(width),
+              SIZE_(thumbSize), COLOR_L_(colorL), COLOR_H_(colorH),
+              MIN_(min), MAX_(max), ORIENT_(hv), v_(initialValue),
+                labelOn_(false), slided_(false), active_(true)
+        {   Draw(initialValue); }
+
+        // Constructor with scale value (only horizontal)
+        SeekBar(uint16_t x, uint16_t y, uint16_t length,
+                float min, float max, float initialValue,
+                string left, string center, string right,
+                uint32_t thumbColor = 0xFFB0B0FF,
+                uint16_t thumbSize = 30, uint16_t width = 4,
+                uint32_t colorL = LCD_COLOR_LIGHTGRAY,
+                uint32_t colorH = 0xFFB0B0B0,
+                uint32_t backColor = GuiBase::ENUM_BACK);
+
+        virtual ~SeekBar()
+        {   for (int n=0; n<3; n++) delete labelLCR_[n]; }
+
+        bool Slide();
+        float GetValue() { return v_; }
+        int GetIntValue() { return Round(v_); }
+
+        void Activate();
+        void Inactivate();
+        bool IsActive() { return active_; }
+
+        bool IsOnThumb(uint16_t &x, uint16_t &y);
+        void Draw(float value, bool fill = false);
+        void Redraw(bool fill = false);
+        float ToValue(Point pt);
+
+        void SetValue(float v) { v_ = v; }
+        void SetSlided(bool tf) { slided_ = tf; }
+        bool GetSlided() { return slided_; }
+
+    private:
+        const uint16_t L_, W_;
+        const uint16_t SIZE_;           // Size of thumb
+        const uint32_t COLOR_L_, COLOR_H_;
+        const float MIN_, MAX_;
+        const Orientation ORIENT_;
+
+        Label *labelLCR_[3];
+        float v_;             // value of seekbar
+        bool labelOn_;
+        bool slided_;
+        bool active_;
+
+        int Round(float x) { return x + 0.5f - (x < 0); }
+        Point ToPoint(float value);
+        float Saturate(float value);
+
+        // disallow copy constructor and assignment operator
+        SeekBar(const SeekBar&);
+        SeekBar& operator=(const SeekBar&);
+    };
+}
+#endif  // F746_SEEKBAR_HPP
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/SeekbarGroup.cpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,72 @@
+//-----------------------------------------------------------
+//  SeekbarGroup class
+//
+//  2017/01/25, Copyright (c) 2017 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#include "SeekbarGroup.hpp"
+
+namespace Mikami
+{
+    SeekbarGroup::SeekbarGroup(
+            uint16_t x0, uint16_t y0, uint16_t length,
+            uint16_t number, uint16_t space,
+            float min, float max, float initialValue,
+            SeekBar::Orientation hv,
+            uint32_t thumbColor, uint16_t thumbSize, uint16_t width,
+            uint32_t colorL, uint32_t colorH, uint32_t backColor)
+        : NUMBER_(number)
+    {
+        seekBars_.SetSize(number);
+        for (int n=0; n<number; n++)
+        {
+            uint16_t x = x0;
+            uint16_t y = y0;
+            if (hv == SeekBar::Holizontal) y += space*n;
+            else                           x += space*n;
+            seekBars_[n] =
+                new SeekBar(x, y, length, min, max, initialValue, hv,
+                            thumbColor, thumbSize, width,
+                            colorL, colorH, backColor);
+        }
+    }
+
+    // Get slided number
+    bool SeekbarGroup::GetSlidedNumber(int &num)
+    {
+        bool active = false;
+        for (int n=0; n<NUMBER_; n++)
+            if (seekBars_[n]->IsActive()) active = true;
+        if (!active) return false;
+
+        if (!GuiBase::PanelTouched())
+        {
+            for (int n=0; n<NUMBER_; n++)
+            {
+                if (seekBars_[n]->GetSlided())
+                    seekBars_[n]->Draw(seekBars_[n]->GetValue());
+                seekBars_[n]->SetSlided(false);
+            }
+            return false;
+        }
+
+        bool rtn = false;
+        uint16_t x, y;
+        for (int n=0; n<NUMBER_; n++)
+        {
+            if (seekBars_[n]->IsOnThumb(x, y))
+            {
+                if ((num != n) && Range(num))
+                    seekBars_[num]->Draw(seekBars_[num]->GetValue());
+                num = n;
+                seekBars_[n]->SetValue(seekBars_[n]->ToValue(SeekBar::Point(x, y)));
+                seekBars_[n]->Draw(seekBars_[n]->GetValue(), true);
+                seekBars_[n]->SetSlided(true);
+                rtn = true;
+            }
+            if (rtn) break;
+        }
+        return rtn;
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/SeekbarGroup.hpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,79 @@
+//-----------------------------------------------------------
+//  SeekbarGroup class -- Header
+//
+//  2017/01/25, Copyright (c) 2017 MIKAMI, Naoki
+//-----------------------------------------------------------
+
+#ifndef F746_SEEKBAR_GROUP_HPP
+#define F746_SEEKBAR_GROUP_HPP
+
+#include "SeekBar.hpp"
+#include "Array.hpp"
+
+namespace Mikami
+{
+    class SeekbarGroup
+    {
+    public:
+        SeekbarGroup(uint16_t x0, uint16_t y0,  uint16_t length,
+                     uint16_t number, uint16_t space,
+                     float min, float max, float initialValue,
+                     SeekBar::Orientation hv = SeekBar::Holizontal,
+                     uint32_t thumbColor = 0xFFB0B0FF,
+                     uint16_t thumbSize = 30, uint16_t width = 4,
+                     uint32_t colorL = LCD_COLOR_LIGHTGRAY,
+                     uint32_t colorH = 0xFFB0B0B0,
+                     uint32_t backColor = GuiBase::ENUM_BACK);
+
+        virtual ~SeekbarGroup()
+        {   for (int n=0; n<NUMBER_; n++) delete seekBars_[n]; }
+
+        bool Slide(int num) { return seekBars_[num]->Slide(); }
+        float GetValue(int num) { return seekBars_[num]->GetValue(); }
+        int GetIntValue(int num) { return seekBars_[num]->GetIntValue(); }
+
+        // Get slided number
+        bool GetSlidedNumber(int &num);
+
+        void Draw(int num, float value, bool fill = false)
+        {   seekBars_[num]->Draw(value, fill); }
+
+        // Draw all thumbs with same value
+        void DrawAll(float value, bool fill = false)
+        {   for (int n=0; n<NUMBER_; n++) Draw(n, value, fill); }
+
+        void Redraw(int num, bool fill = false)
+        {   seekBars_[num]->Draw(seekBars_[num]->GetValue(), fill); }
+
+        void RedrawAll(bool fill = false)
+        {   for (int n=0; n<NUMBER_; n++) Redraw(n, fill); }
+
+        // Activate and inactivate
+        void Activate(int num) { seekBars_[num]->Activate(); }
+        void Inactivate(int num) { seekBars_[num]->Inactivate(); }
+        void ActivateAll()
+        {
+            for (int n=0; n<NUMBER_; n++)
+                seekBars_[n]->Activate();
+        }
+        void InactivateAll()
+        {
+            for (int n=0; n<NUMBER_; n++)
+                seekBars_[n]->Inactivate();
+        }
+
+    private:
+        const int NUMBER_;
+        Array<SeekBar *> seekBars_;
+
+        // Check range of argument
+        bool Range(int n)
+        { return ((n >= 0) && (n < NUMBER_)); }
+
+        // disallow copy constructor and assignment operator
+        SeekbarGroup(const SeekbarGroup&);
+        SeekbarGroup& operator=(const SeekbarGroup&);
+    };
+}
+#endif  //  F746_SEEKBAR_GROUP_HPP
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/F746_Gui_New/TS_DISCO_F746NG.lib	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/ST/code/TS_DISCO_F746NG/#fe0cf5e2960f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,55 @@
+//------------------------------------------------------------
+//  mbed に登録しているライブラリ F746_GUI の使い方の簡単な例
+//  CQ出版社インターフェースオフ会 2018/03/16 で紹介
+//          mbed のリボジョン:161
+//          ライブラリ F746_GUI のリビジョンが 32 の場合,中に含まれる
+//          BSP_DISCO_F746NG はリビジョン 9 に更新すること
+//
+// 2018/03/09, Copyright (c) 2018 MIKAMI, Naoki
+//------------------------------------------------------------
+
+#include "F746_GUI.hpp"     // GUI 用のライブラリのインクルード文をまとめたもの
+
+// SeekBar と ResetButton を使う例
+void Slider()
+{
+    GuiBase::GetLcd().Clear(GuiBase::ENUM_BACK);    // 画面のクリア
+
+    // リセットボタンのオブジェクト生成
+    ResetButton myReset;
+    // SeekBar の値を表示する NumericLabel のオブジェクト生成
+    NumericLabel<int> myLabel(240, 140, "%d", 0, Label::CENTER);
+    // SeekBar のオブジェクト生成
+    SeekBar myBar(140, 200, 200, -100, 100, 0, "-100", "0", "100");
+
+    while (true)
+    {
+        if (myBar.Slide())      // スライドしたかどうかのチェック
+            myLabel.Draw(myBar.GetValue()); // スライドすると対応する数値が表示される
+        myReset.DoIfTouched();  // タッチするとリセットされる
+    }
+}
+
+int main()
+{
+    // Label のオブジェクト生成
+    Label label1(240, 10, "Simple GUI Demo", Label::CENTER, Font20);
+    // ButtonGroup のオブジェクト生成
+    const string STR[] = {"A", "B", "C", "D"};
+    ButtonGroup bGroup1(200, 70, 80, 40, 4,
+                        STR, 0, 2);
+
+    int buttonNum;
+    while (true)
+    {
+        // bGroup1 をタッチした場合に switch 文を実行する
+        if (bGroup1.GetTouchedNumber(buttonNum))
+            switch (buttonNum)
+            {
+                case 0: Slider(); break;
+                case 1: /* 処理1 */ break;
+                case 2: /* 処理2 */ break;
+                case 3: /* 処理3 */ break;
+            }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sat Mar 10 11:37:33 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/aa5281ff4a02
\ No newline at end of file