ボタンでLEDをON/OFFする
ボタンをクリックすると点灯/消灯をするアプリを作ってみます。
プログラム起動直後は、

ボタンをクリックすると、LEDが点灯します。ボタンの表示が変わります。

ボタンの名前は任意に設定することができます。
この表示だと小さすぎてわかり難い。タイトルが見えないのでカッコ悪い(マウスでドラッグすれば大きさは変えられます)。起動直後は下記の表示にします。

#include <gtkmm.h>
#include <iostream>
#include <wiringPi.h>

#define LED_PORT 4

class MainWin : public Gtk::Window
{
    Gtk::Button m_btnLed;
    int m_nLedMode;

public:
    MainWin();

private:
    void on_btn_clicked();
};

MainWin::MainWin()
{
    m_nLedMode = 0;
     m_btnLed.set_label("turn ON");
  // シグナルとスロットをコネクト
    m_btnLed.signal_clicked().connect( 
                sigc::mem_fun( *this, &MainWin::on_btn_clicked ) );
    add( m_btnLed );
    show_all_children();
     resize(240, 32);
     set_title("LEDの制御");
}

// スロット関数
void MainWin::on_btn_clicked()
{
     if(m_nLedMode == 0)
     {
         m_nLedMode = 1;
        m_btnLed.set_label("turn OFF");
          digitalWrite(LED_PORT, 1);
    }
     else
     {
         m_nLedMode = 0;
         m_btnLed.set_label("turn ON");
         digitalWrite(LED_PORT, 0);
    }
}    


int main( int argc, char *argv[] )
{
     if(wiringPiSetupGpio() == -1)
    {
        std::cout << "GPIO setup error!" << std::endl;
        return -1;
    }
  pinMode(LED_PORT, OUTPUT);
    
    Gtk::Main kit( argc, argv );
    MainWin mainwin;
    Gtk::Main::run( mainwin );

    return 0;
}
ボタンがクリックされると、
void MainWin::on_btn_clicked()
が呼び出されるようになっています。
m_nLedMode で点灯/消灯を決定します。
m_btnLed.set_labe()でボタンの名前を変更します。
目次へ