【ラズパイ】湿度計を使ってみる。

この記事をもとに調べてみました。

https://github.com/raspberrypilearning/astro-pi-guide/blob/master/sensors/humidity.md

英語を翻訳してみると、

湿度には、絶対湿度と相対湿度がありまして、

絶対湿度は大気中に含まれる水分の総量。

相対湿度は、大気中に最大まで含むことができる水分量に対する、現在の水分量の割合を表します。

大気中に含むことができる水分量の最大値は温度によって変わりますので、相対湿度を図るには温度計も内蔵されています。

ちなみに、我々が一般的に湿度と呼んでいるのは相対湿度のほうで、単位は%です。

これはもうやっているからいいや。

【ラズパイ】LEDディスプレイで温度を表示する

どうせならLEDディスプレイを利用したいので、LEDディスプレイで温度を表したいと思います。

イメージとしては、左上から1℃上がることにLEDが一個点灯するような感じです。

コードはこうなりました。

import time
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()

while True:
    temp = int(sense.get_temperature())
    print(temp)
    y = temp // 8
    x = temp % 8
    for dy in range(0, y + 1):
        if dy < y:
            for dx in range(0, 8):
                sense.set_pixel(dx, dy, 255, 0, 0)
        else:
            for dx in range(0, 8):
                sense.set_pixel(dx, dy, 0, 0, 0)
            for dx in range(0, x):
                sense.set_pixel(dx, dy, 255, 0, 0)
    #time.sleep(1)

最初は36℃ぐらいあった温度ですが、うちわで扇いで風を送ることにより、31℃ぐらいまで下げています。

しかし、ラズパイの温度上昇は仕方が無いとして、それに影響される温度計って、使いづらくない??

【C#】【ピクロス】【ALTSEED】サイズ変更ダイアログのUIを作成

前回までの状況はこちら。

最新ソースはこちら。

https://github.com/takishita2nd/Picross

サイズ変更ダイアログにラベルとテキストボックスを追加します。

これらは新規クラスですね。

なので、ラベルクラスとテキストボックスクラスを作成します。

class Label : ObjectBase
{
    private string _text;
    private int fontOffsetX = 9;
    private int fontOffsetY = 4;
    private bool _isShow = false;

    public Label(int x, int y, string text)
    {
        width = 128;
        height = 32;
        _x = x;
        _y = y;
        _text = text;

        _valueText = new asd.TextObject2D();
        _valueText.Text = _text;
        _valueText.Font = null;
        _valueText.Position = new asd.Vector2DF(_x + fontOffsetX, _y + fontOffsetY);
    }

    public void SetFontOffset(int x, int y)
    {
        fontOffsetX = x;
        fontOffsetY = y;
        _valueText.Position = new asd.Vector2DF(_x + fontOffsetX, _y + fontOffsetY);
    }

    public void Show()
    {
        _isShow = true;
        _valueText.Font = Resource.getFont();
    }

    public void Hide()
    {
        _isShow = false; ;
        _valueText.Font = null;
    }
}
class TextBox : ObjectBase
{
    private string _text;
    private int fontOffsetX = 9;
    private int fontOffsetY = 4;
    protected bool enable = true;
    private Action _action = null;
    private bool _isShow = false;

    public TextBox(int x, int y, string text)
    {
        width = 128;
        height = 32;
        _x = x;
        _y = y;
        _text = text;

        _backTexture = new asd.TextureObject2D();
        _backTexture.Position = new asd.Vector2DF(_x, _y);

        _valueText = new asd.TextObject2D();
        _valueText.Text = _text;
        _valueText.Font = null;
        _valueText.Position = new asd.Vector2DF(_x + fontOffsetX, _y + fontOffsetY);
    }

    public void SetFontOffset(int x, int y)
    {
        fontOffsetX = x;
        fontOffsetY = y;
        _valueText.Position = new asd.Vector2DF(_x + fontOffsetX, _y + fontOffsetY);
    }

    public void UpdateTexture(asd.Vector2DF pos)
    {
        if (pos.X > _x && pos.X < _x + width
            && pos.Y > _y && pos.Y < _y + height)
        {
            _backTexture.Texture = Resource.getSelectedTextTexture();
        }
        else
        {
            _backTexture.Texture = Resource.getTextTexture();
        }
    }

    public void Show()
    {
        _isShow = true;
        _backTexture.Texture = Resource.getTextTexture();
        _valueText.Font = Resource.getFont();
    }

    public void Hide()
    {
        _isShow = false; ;
        _backTexture.Texture = null;
        _valueText.Font = null;
    }

    public void SetAction(Action action)
    {
        _action = action;
    }

    public void SetEnable(bool enable)
    {
        this.enable = enable;
    }

    public virtual void OnClick()
    {
        if (enable)
        {
            if (_action != null)
            {
                _action.Invoke();
            }
        }
    }
}

OnClick処理は後々修正するかもしれない。

そして、ほとんどはButtonクラスのアレンジ。

これをDialogクラスで使用します。

class Dialog
{
    private asd.TextureObject2D _texture;
    private bool _isShow;
    private Button _button = null;
    private TextBox _rowText = null;
    private TextBox _colText = null;
    private Label _label1 = null;
    private Label _label2 = null;
    private int _x = 300;
    private int _y = 300;
    private int _width = 400;
    private int _height = 200;
    private Action _action = null;

    public Dialog()
    {
        _isShow = false;

        // 確定ボタン
        _button = new Button(436, 400, "確定");
        _button.SetFontOffset(46, 4);
        _button.SetAction(() =>
        {
            if(_action != null)
            {
                _action.Invoke();
            }
        });
        // ラベル
        _label1 = new Label(320, 330, "↓");
        _label2 = new Label(490, 330, "→");
        // Row入力エリア
        _rowText = new TextBox(350, 330, "0");
        // Col入力エリア
        _colText = new TextBox(520, 330, "0");

        _texture = new asd.TextureObject2D();
        _texture.Position = new asd.Vector2DF(_x, _y);
    }

    public void SetEngine()
    {
        asd.Engine.AddObject2D(_texture);
        asd.Engine.AddObject2D(_label1.getTextObject());
        asd.Engine.AddObject2D(_label2.getTextObject());
        asd.Engine.AddObject2D(_rowText.getBackTexture());
        asd.Engine.AddObject2D(_rowText.getTextObject());
        asd.Engine.AddObject2D(_colText.getBackTexture());
        asd.Engine.AddObject2D(_colText.getTextObject());
        asd.Engine.AddObject2D(_button.getBackTexture());
        asd.Engine.AddObject2D(_button.getTextObject());
    }

    public void SetAction(Action action)
    {
        _action = action;
    }

    public void Show()
    {
        _isShow = true;
        _texture.Texture = Resource.getDialogTexture();
        _label1.Show();
        _label2.Show();
        _rowText.Show();
        _colText.Show();
        _button.Show();
    }

    public void Hide()
    {
        _isShow = false;
        _texture.Texture = null;
        _label1.Hide();
        _label2.Hide();
        _rowText.Hide();
        _colText.Hide();
        _button.Hide();
    }

    public bool IsShow()
    {
        return _isShow;
    }

    public void UpdateTexture(asd.Vector2DF pos)
    {
        _rowText.UpdateTexture(pos);
        _colText.UpdateTexture(pos);
        _button.UpdateTexture(pos);
    }

UI自分で作るのってめんどくさいね。

こんなのもう二度とやらない。