Google Word Lens

投稿日:

 Google Word Lens。試用してみて、驚嘆、また驚嘆。

 驚いた。こんなことができるようになるとは、夢のようだ。

ルビとショートコード

投稿日:

 最近、記事にルビをよく振る。何故(なぜ)かと言うと、女房子供が見ているテレビ番組の中に、芸能人が漢字の読み書きなどをするクイズ番組かゲーム番組のようなものがあるのだが、その出演者たちがごく普通の単語や漢字もほとんど読み書きできていないのを見るにつけ、「ひょっとして、世間の人が私のブログを読んでも漢字が読めない人が多いのではないか」と心配になってきたからだ。

 また、ネットの質問箱、例えば「Yahoo!知恵袋」などを見ていると、本当に普通の漢字の読み書きについて質問しているものも多く、世間がこの調子だと、多分私の書くものの漢字は、半分くらいしか()まれていないような気がするのである。

 それで、「この漢字、多分訓まれてないだろうなあ」と思うような漢字には、できるだけルビを振っている。

 しかし、それにつけてもこの「ルビ」をHTMLで振るのは面倒くさい。今、上に用いた「()み」というルビ振りをHTMLで書くには

<ruby><rb>訓</rb><rp>(</rp><rt>よ</rt><rp>)</rp></ruby>み

……と記述するのである。タグ自体は「クイックタグ」のボタンに登録し、ワン・クリックで挿入できるようにしてはいるが、それでも面倒臭いし、第一、原テキストの可読性が非常に悪くなってしまう。

 なにかいいやり方はないものかな、と思って探すと、WordPressの場合は「ショートコード」でこれを実現する方法もあるようだ。

 なかなか魅力的だ。しかし、私のように10年以上もブログを書きつないでいると、WordPressが使えなくなった後の事も心配になってしまう。これをやってしまうと、WordPressから他へ切り替えた時に、記事を移行することは無理になるだろう。いや、無理とまでは言えなくても、そこの部分の置き換えコードを書いて移行用データを出力したり、相当面倒臭くなることは確かだ。

 しかし、それはそれとして、上記サイトさんの記事はショートコードの書き方の簡単な例にもなっており、おかげでショートコードの書き方が分かった次第である。有り難い。

向かない人には向かないんだろうなあ

投稿日:

 まあ、人にもよるし、目的によりますわな。一理ある。

 私の場合はWordPressのほうが内容に集中できるけど、これ、嫌う人は絶対嫌いだろうなあ。あと、アクセス稼いでアフィリエイトでゴー、……みたいなことだとはてブロのほうがいいんでしょうね。

最近の一般向けワンボード・コンピュータ、なかんづく「Arduino」「Raspberry Pi」の状況

投稿日:

平成28年2月
JISTA ML リレーコラム 第1回
会員 関東支部 jista1197 佐藤俊夫

1 はじめに

 このところ、若い方やDIYなどを楽しむ一般の方向けに、ワンボード・コンピュータが売られています。しかも、相当な売れ行きであると仄聞(そくぶん)します。

 「Arduino」や「Raspberry Pi」、「IchigoJam」「Intel Edison」「mbed」と言った製品名を聞いたことがある方も多いでしょう。秋葉原を歩くと、店の表にこれらのカラフルな箱が山積みになっています。また、イタリア人マッシモ・バンジ氏の「TED」スピーチを見たことがある方もたくさんおられると思います。

 数年前から、普及価格帯の3Dプリンタが出現してきたことにより、一般人でも小規模の製品を作り、それを世に問うようなことが可能になってきました。そこから、「Makers Movement」と言われる流行が盛り上がりはじめました。これはオープンソース・イノベーションの自然な興隆ということに加えて、出版と連携した一種のマーケティングの成功であるとも言われているようです。ちなみに、この「Makers Movement」について著書を出し、流行に火をつけたのはクリス・アンダーソンと言う人ですが、この人の名を覚えている方もJISTA会員の皆さんには多いことでしょう。そう、かの「ロング・テール」の著者その人です。

 古くから言われる「DIY」と、最新流行の「Makers Movement」との違いは、そこに「ネット」が介在するか否かだ、と言ってもよいと思います。物を作る上での発想やハウ・トゥ、設計図、使用感などは、インターネットを通じて迅速に共有され、改良が加えられ、更に共有されます。

 こうしたことを背景に、3Dプリンタを使用してものを作り、作ったものへデジタルやITのパワーを盛り込むことが広く行われるようになりました。ものへデジタルやITのパワーを盛り込むのには、廉価なワンボード・コンピュータがうってつけだというわけです。

 実際、巷間ではArduinoがこれまでに100万台、Raspberry Piが700万台売れたと言われていますから、これらのワンボード・コンピュータは、ITのプラットフォームとして無視できない勢力になっていると言えます。また、これらは安価に数を得られることから、「IoT」流行の趨勢とも関連する雰囲気が濃厚に感じられます。

 私は仕事の上ではこれらと関わっておりません。しかし、その一方で、ITストラテジの道というものは、ITワールドを形作るもののうちの何が将来の影響要素としてつながってくるかわかりません。そうしたことから、これらワンボード・コンピュータを体験しておくことが何かの足しになることもあろうと思い、ArduinoとRaspberry Piを少しばかりいじってみておりましたところ、ちょうど今般リレーコラム執筆の機会を頂きました。

 そこで、この機会をお借りして、ArduinoとRaspberry Piについて、その状況などを簡単に紹介させていただきたいと思います。

2 Arduinoについて

 「Arduino」はイタリア人のマッシモ・バンジ氏を中心に、平成17年(2005)から開発が始められたワンボード・コンピュータです。バージョンアップや派生を含め、既に数十種類の製品があります。現在店頭で入手可能な製品には、代表的な「Arduino UNO」があり、これは本日(平成28年2月7日)現在、税込み2,940円で手に入ります。

 その特徴に、次のようなことを挙げることができます。

○ ハードウェアが「オープンソース」であること。

 仕様も設計もオープンで、一般人がネットから基盤のパターンなどをダウンロードしてそっくり同じものを製作することも可能です。また、そのため、世界中にArduinoのクローンを作っている企業やグループがあり、それら自由なクローンの種類を数え上げることはもはや不可能と言う状況にあります。

○ 開発環境が無料で配布されていること。

 開発環境は統合環境(IDE)になっており、これも無料です。様々なライブラリが日々提供され続けており、一般に入手可能なほとんどのハードウェアやIC、電子素子などを扱うためのライブラリがGitHubなどですぐに手に入ります。

○ アナログ入出力、デジタル入出力が簡単に可能であること。

 「Arduino UNO」の場合、基板上にはデジタルI/Oが14本、アナログINが6本、アナログOUTが6本あります。これにさまざまな電子部品をつないで制御することができます。

○ C++で簡単にプログラミングできること。

 従来の「マイコン」はアセンブラ一辺倒でしたが、ArduinoはC++でプログラミングでき、しかも、ややこしいハードウェア・アクセスはC++のクラスの中にすべてカプセル化され、手軽に扱うことが可能になっています。ユーザはオブジェクトを生成し、入出力ピンを開いて読み、書くだけでさまざまなことができます。

 こうした特徴があるため、Arduinoを使用すると、一般人がデジタル・プロダクトを簡単に製作することができます。

 かく言う私も次のようなことを試しました。

「スマート・ファン」

 安物の扇風機にArduinoとEtehrnetインターフェース、温度センサをとりつけ、Webサーバをこの扇風機に実装してブラウザから制御できるようにし、温度によって風量を変え、1/fゆらぎ送風ができるなど、ものすごく無駄にリッチ化した扇風機です。

 1980円の安物扇風機をめっちゃ高機能化(笑)して、結構遊べました。

ウェブ扇風機

「メールサーバ監視ランプ」

 メール来着状況を監視し、ランプの色で教えてくれるもの。昔はISDN用のルータにこうした機能があり、パソコンのスイッチを入れていなくてもメールチェックのタイミングを教えてくれて便利だったのですが、今はこういうものがなくなってしまったので、意を決して自作したわけです。実は、今はスマホでこれは出来てしまうのですが、LEDの輝度のパルス幅変調などを試して遊ぶのに格好の題材でしたので、あえて試してみました。

メールサーバお知らせランプ

「多機能リモコン」

 赤外線リモコンのある電化製品を、Webで制御するようにしたものです。パソコンからでも、スマホからでも操作できます。赤外線LEDは秋葉原などで100円ほどで手に入りますので、これを試す人は非常に多いようです。

いよいよ多機能リモコン

「モーターで動くおもちゃの類をデジタル・パワードにする」

 おもちゃにArduinoを積み込むと、男の子などは大変喜びます。ここでは、モーターで動く自動車に超音波センサをとりつけ、自律制御させるとともに、その自動車にデジカメを乗せて動画を撮影しています。

虫瞰(ちゅうかん)カメラ

 私には男の子供はありませんが、私自身が男の子じみた中年(笑)ですので、みずからこういうことを試して遊びました。

 このように、Arduinoを使うと、手軽にさまざまな機器を制御したり、デジタルパワーを盛り込んだものを作ることが可能です。

 伝統的にArduinoにはAtmel社のマイコン「AVR」シリーズが使われていましたが、最新の製品「Arduino 101」にはIntelのCurieが採用され、Bluetoothや6軸の加速度ジャイロセンサーが搭載されるなど、大変高機能化しています。

 さて、目が離せないArduinoですが、昨年ごろから、長年Arduinoを牽引してきた5人の人たちが仲違いし、分裂騒動を起こしてまだ決着がつかず、もめているようです。Arduinoコミュニティは既に大きなものになっているので、この騒動は残念なことであり、かつ、目が離せないところです。

3 Raspberry Piについて

 「Raspberry Pi」はイギリス人のイブン・アプトン氏を中心に、Raspberry Pi財団というところが開発しているワンボード・コンピュータです。SONYなども深くかかわっていると聞き及びます。

 平成24年(2012)に最初のモデルが発売され、バージョンアップ等で数種類の製品があります。現在店頭で入手可能な製品の代表的なものに「Raspberry Pi 2 Model B+」があり、これは本日(平成28年2月7日)現在で税込み5,000円です。

 次のような特徴があります。

○ れっきとした「PC」であること。

 前述のArduinoは「マイコンボード」であり、OS等は載っておりません。しかし、Raspberry PiはSoCを利用するれっきとした「パソコン」で、OSを載せて作動します。主としてRaspberry Pi用に最適化されたLinux(「Raspbian」というディストリビューション)が作動するほか、マイクロソフトからは「Windows 10 IoT core」というWindows製品が、なんと無料でコントリビュートされています。余談、最近のマイクロソフト社の変革ぶり、オープンソースやフリーへのコミットぶりには驚くばかりです。それだけ、IoTにからむ製品に注目しているということでしょう。

 また、HDMI端子やUSB、Ethernetの端子を基板上に標準で備えているので、キーボードやマウス、ディスプレイをつないでPCとして利用することができます。

○ あらゆる開発環境が利用可能なこと。

 「Linuxマシン」なので、Linuxで利用できる開発ツール類は全て利用できると言って過言ではありません。Raspberry Piになじみの良いのはPythonで、入門本などにはPythonの作例が多く載っております。他にRaspberry Pi向けに最適化されたビジュアル言語の「Scratch」などもあります。しかし、別にこれらにこだわる必要はなく、GCCが走りますから、C/C++も使えますし、他にシェル、PerlやPHP、Ruby、Javaも扱えます。極端な話、g77をインストールして「FORTRAN」でハードウェア制御を行うことも可能でしょう(聞いたことはありませんが……)。私などは、RubyやPythonに暗いので、CやPHPでRaspberry Piのプログラムを書きました。

 エディタやIDEも、自分が使い慣れた好きなものが使えます。私はviが好きなので、Raspberry Pi上でももっぱらviを使っています。

○ 簡単にデジタル入出力が可能なこと。

 「GPIO」と呼ばれるデジタル入出力端子を豊富に備えていますが、これらは、ユーザからはUNIXで言う所の「ファイルシステム上にあるスペシャル・ファイル」に見えます。ですので、このファイルをオープンし、読み、あるいは書くだけで外部に入出力ができ、ハードウェアの制御が可能です。

○ あらゆるミドルウェア等が利用可能なこと。

 Linuxであるがゆえ、Linuxで使えるミドルウェアなどはほとんどのものが利用可能です。例えば、MySQLやPostgreSQLなどのRDBも扱えます。また、ApacheなどのWebサーバ、sendmail、DovecotなどのPOP/IMAPサーバなども走ります。

 こうした特徴があるため、既存のオープンソース・ソフトウェアを用いて、相当複雑なことも可能です。

 Arduinoと違って、Raspberry Piは単体ではアナログ入力ができません。そこで、私はRaspberry PiにADC(アナログ・デジタル変換)のICを接続し、これにサーミスタを取り付け、Apache+PHP+C言語を使用して「ウェブ温度計の製作」などを試してみました。

Raspberry Piで温度を測ろう

 また、PHPでハードウェア制御もできます。私はこんなふうに、PHPを使用して、Webインターフェイスにより家電製品のスイッチをオン・オフすることなどを試しました。

そうか、PHPでもモノにつながるな

 Arduinoに比べてRaspberry Piの歴史は浅いのですが、その出荷台数などから見ても新進気鋭の勢いを持っており、躍進中であると言えます。

 もともと5,000円ほどの値段で、高価ではないRaspberry Piですが、昨年(平成27年(2015))11月に流れたニュースでは、なんと650円(5ドル)という驚くべき価格の製品「Raspberry Pi Zero」もラインナップに投入されました。

Raspberry Pi Zero

 この値段と大きさでLinuxが走るのですから、驚きです。さすがにEthernetはついていませんが、USBの無線LANドングルを接続すればネットにつながります。

 「Raspberry Pi Zero」は、この値段と大きさのゆえに数量を稼ぐことができますから、IoTにからむ何らかのブレイク・スルーをもたらす可能性も相当にあると言えるでしょう。

4 むすび

 私などが若い頃には、ワンボード・コンピュータというとNECのTK-80にとどめを打ったものです。一定の年齢層の人には大変懐かしいものの一つです。

 他方、ここまで触れましたように、現在のワンボード・コンピュータは長足の進歩を遂げており、ますます興味の尽きないものに変貌しております。

 今回紹介したものは一般向けのものなので、エンタープライズでの応用については、別途考察と検討、研究が必要であると思われますが、既に一般向けには広く普及していることから、早晩業務用途にも応用が広がることが想像されます。

けしからん考

投稿日:

 文語体で書くときの現在推量の助動詞に「らむ(らん)」がある。

 「今まさにこうであろうなあ」という場合に使う助動詞で、私などは俳句を()むとき、この「らむ」をよく使う。去る秋、こんな俳句を詠んだ。

松茸の土やかの空青むらむ
(http://satotoshio.net/blog/?p=2893)

 この松茸のとれたところの、空が今ちょうど、青くなってるんだろうなあ、と思ったので、即吟、そのまま詠んだのだ。ちなみに、似た働きを持つ助動詞に「けむ」がある。これは「過去推量」だ。「多分、これ、こうだったんだろうなあ」という時に「けむ」を使う。

老母さぞ舞ひけむ祇園囃子過ぐ
(http://satotoshio.net/blog/?p=1488)

 これは夏に詠んだ句だ。祇園ばやしを昔舞ったものなんだろうなあ、と思ったので、そのまま詠んだのだ。

 ところで、過日、憎んでいる人物について文章を綴っていて──いや、私だって、嫌いな奴、許せない奴はいますよ、社会に生きるおっさんですからね──その人物のことを「けしからぬ奴」と書いてから、ふと、筆が止まった。

 これは、多分間違っている。

 「けしからん」の最後の「らん」は、現在推量の「らむ(らん)」ではなかろうか。

 おそらく、「けしからん」は、「()しく」「ある」「らん」のつづまったものだと思われる。つまり、「たぶん、彼奴(あやつ)はイヤでダメであろう」という現在推量だ。

 そうすると、最後の「ん」は、否定の「ぬ(ん)」ではなく、「む(ん)」である。音読するときにはどちらも同じ「ん」でも、「ぬ」と「む」では意味が違うのだ。

 「けしからん」という言葉で「けしからない(けしからず)・けしかって・けしかる・けしかれば……」などと活用を試みると、これはもう直覚的に「そんな活用はナイ」ということがよくわかる。「けしからない」なんて言い方はないのだから、文語的な「けしからぬ」というのもないはずだ。そこからも、「けしからん奴」の「らん」は、現在推量の「らん」だろう、と思われるのだ。

 ただ、ではというので「けしからむ奴」と書いてそれが通るかと言うと、通るまい。こういう書き方も見たことがない。だから、正しいのはやっぱり「けしからん奴」だろう。

 他方、池波正太郎の小説など読んでいると、「けしからぬ…」という使い方がよく出ていたように思う。

 それで通るなら、まあ、それもアリかな、と思う。大小説家にしてはじめて許される、愛すべき言葉の芸と言える。こういうのは可なのだ。

(ただし、コッチにはこういうふうに書いてある;「けしからんとは」http://yain.jp/i/%E3%81%91%E3%81%97%E3%81%8B%E3%82%89%E3%82%93;どうも、わからんね。多分これも正しいんだろう。)

 だがしかし、私にはそれは許されまい。やはり、私如き辺りは、「けしからん奴」と書くのが良い。

JetpackのOGPイメージがブランクなのが気に入らないので

投稿日:

 ブログからFacebookやTwitterへのクロスポストをするのに、jetpackというプラグインをありがたく使わせていただいているが、エントリに画像を特に載せなかった場合、Facebookなどへ送られるイメージがブランクになるのが気に入らない。

 FacebookやTwitterは、「OGP」と言われる仕組みを使ってアイキャッチ画像を載せる。htmlヘッダのmetaタグに「property」という属性を置いて、これに「og:image……」などと記載し、content属性に画像のURLを書いておけば、それがFacebookやTwitterなどに読み取られ、使われるのである。例えば、FacebookやTwitterにリンクを張った際に「http://k.yimg.jp/images/top/sp2/event/newyear/2016/omikuji2016_logo.png」という画像を載せたければ、ヘッダに書くタグは次のとおりである。

<meta property="og:image" content=http://k.yimg.jp/images/top/sp2/event/newyear/2016/omikuji2016_logo.png" />

(ヤフーさんに迷惑がかかるので、よいこの皆さんはこういう悪ふざけをしてはいけません。)(笑)

 なので、これを適当に書いてやれば、特に画像を使用していないブログのエントリでも、適当な画像がSNSにバナーのようにポストされる。

 前に、自分のプロフィールイメージが載るようにここを書き換えてみていたのだが、毎回毎回自分のむさくるしいイメージ(コレ(笑))が載るのも鬱陶しい。さりとて、いちいちアイキャッチ画像を毎回載せるのも面倒なので、適当な画像素材を1000個くらい見えるところにアップロードし、乱数で適当なものを選ぶようにしてみた。

 プラグインファイルの編集機能を使い、「jetpack/functions.opengraph.php」というファイルを次のように書き換えるのである。

(該当箇所抜粋)

if ( empty( $image ) ) {
	/**
	* Filter the default Open Graph Image tag, used when no Image can be found in a post.
	*
	* @since 3.0.0
	*
	* @param string $str Default Image URL.
	*/
	//$image['src'] = apply_filters( 'jetpack_open_graph_image_default', 'https://s0.wp.com/i/blank.jpg' );
	$randimage = "http://satotoshio.net/blog/wp-content/uploads/2015/12/PHM14_" . sprintf("%04d", rand(1, 1000)) . ".jpg";
	$image['src'] = apply_filters( 'jetpack_open_graph_image_default', $randimage);
}

 この方法を使うと、jetpackがアップデートされるたびにこの部分を書き換えなければならなくなるが、まあ、いいや、そんなに頻繁にアップデートはないし。

文化の日

投稿日:

明治節天皇陛下万歳。

 文化の日である。国旗を掲揚する。

 文化の日は明治節、すなわち明治天皇の天皇誕生日である。現日本国憲法の公布日なのであるが、心ある人によって明治節に日本国憲法が公布されたのである。

http://satotoshio.net/blog/?p=2948

Google Japan Blog: Google Play Music を日本で提供開始します

投稿日:

 おや、ついに日本対応したか。著作権とかJASRACとか、あのへんのカラミのハナシがどうやらついたのかな?

 ちょいとしたテクニックを弄して以前からGoogle play musicを使ってきたのだが、もうそんなことはしなくていいわけだ。

http://googlejapan.blogspot.jp/2015/09/google-play-music.html

2550コネクタ、またはQIコネクタ

投稿日:

 Raspberry PiのGPIOに何かをつなごうとして、何の用意もしていないと戸惑うのが、

「Raspberry PiのGPIO端子は、オスだ」

……ということかも知れない。

 Raspberry Piの端子は、2.54mmピッチのピンヘッダだ。このピンヘッダには、2550、あるいはQIとも言われるコネクタを使うと接続することができる。

IMG_3290

上段左からQIコネクタメス端子、同オス端子。
下段左から6列のQIコネクタハウジング、同5列、同4列、バラの1列。
もちろん、2列も売られている。

 上の写真はそのQIコネクタ類だが、それで言えば、一番左のメスの端子を切り外し、適切な電線に圧着してハウジングを取り付ければ、それをRaspberry Piに接続できるようになる。

 ところが、どうもこの「QIコネクタ」、情報が少ない。作り方にも多少のコツがある。それで、私が書こうか、と思ったら、既に詳しく紹介されているサイトがあった。

 もう、このサイトが書いておられること以上には付け加えることなどないが、工具については、5年前に私のブログでも紹介しているので、参考にする方がいるならお役立ていただきたい。エントリは5年前のものだが、昨日(平成27年8月15日(土))千石電商本店の1階に立ち寄ったところ、まったく同じ工具がほぼ同じ値段で売られていたことを付け加えておきたい。

 私のエントリで紹介している工具は、大西工業株式会社の「No.150 MINI クリンピングプライヤー」である。この工具を使う場合は、一番手前の「AWG22・0.3mm^2」のダイスで導線をかしめ、被覆は一つ隣の「20・0.5」のダイスで半分だけかしめて、残りを普通のラジオペンチで締めあげるとよい。

その工具(大西工業(株)No.150 MINIクリンピングプライヤー)
IMG_3291

 私のエントリでも触れている通り、QIコネクタは、Raspberry Piや電子工作だけではなく、PCの内部など、いろいろなところで使われている規格なので、覚えておけば何か修理や改造の必要に迫られたときに役立つと思う。

 QIコネクタやそのハウジングは、秋葉原千石電商本店なら、入り口から見て左側の、一番奥より少し手前の小さい抽斗の中段くらいに入っている。

 5年前当時は、使い方が良く分からなかったので、レジの店員さんに「このコネクタ、カシめ方と、使う工具を教えてもらえませんでしょうか」と頼んだら、得たりとばかりの落ち着いた態度で、実際の使い方とコツ、注意点を、店のディスプレイ用にとっておいてある端子だと思うが、それで実演してくれたものであった。若い店員さんだったが、その該博な知識と技に驚嘆したものであった。

 先日、八潮の秋月電子の初老の店員さんは、「これにハウジングみたいなモンは存在しませんよ」と言っていたが、千石電商にはあるので、秋月に行って見つからなければ、千石電商で買うとよいと思う。

 私も、秋月電子八潮店で、「いや、ありますよ」と店員さんに直接教えて上げられればよいのだが、私は素人なので、プロに対してそこまでする義理はないだろう。

リモコンでLEDコントロール

投稿日:

 秋月電子で買ったリモコン、せっかくだから、これでLEDを点けたり消したりしてみよう。ただ単に点滅ではいまいち芸がないから、3色LEDの照度を多段階に変えたり、色をいろいろに変えたりしてみようではないか。

 買ってきたリモコン

 IR受信ライブラリを使ってみたが、どうも安定しない。リモコンからはコードが連続送出されるようなのだが、受信ごとに違う値が返ってきて困る。

 調べてみると、0xffffff、すなわち24ビットを超える値が返ってくるときはどうやら受信がうまく行っていないことがわかったので、これを排除してみたところ、うまくいくようだ。

 そこを通り抜けると、今度はどうも、使用するピンの組み合わせに約束があるようだ。はっきりとはわからないのだが、PWMを9・10・11、IRリモコン受信モジュールを12で使うと、さっぱりうまく行かない。

 いろいろと変えて、LEDのためのPWMをR・G・Bそれぞれ9・5・6に割り付けるとうまくいくことがわかった。……理由がなんだかよくわからないのだが(笑)。

 スケッチは結局こうなった。

//
//  IR2LED.ino
//    赤外線リモコン「DFR0107」(DFROBOT社)でLEDをコントロールする。
//    http://satotoshio.net/blog/?p=1490
//    27.7.11(土) 1755~
//    佐藤俊夫
//    
#include <IRremote.h>

const int LEDR = 9, LEDG = 5, LEDB = 6, IRR = 12;
IRrecv irrecv(IRR);
decode_results results;

void setup()
{
  irrecv.enableIRIn(); // Start the receiver
  pinMode(LEDR, OUTPUT);
  pinMode(LEDG, OUTPUT);
  pinMode(LEDB, OUTPUT);
  pinMode(IRR, INPUT);  
}

void loop() {
  if (irrecv.decode(&results)) {
    if(results.value <= 0xffffff && results.value > 0xfd0000){
      processValue(results.value);
    }      
    irrecv.resume(); // Receive the next value
  }
}

void processValue(long int value){
  static boolean ledOn = true;
  static unsigned int r = 255, g = 255, b = 255, combi = 0x07;
  switch(value){
    case 0xfd00ff:  //  vol+
      if(ledOn == true){
        ledOn = false;
      }else{
        ledOn = true;
      }
      break;
    case 0xfd807f:  //  vol-
      if(r < 255 - 10) r += 10;
      if(g < 255 - 10) g += 10;
      if(b < 255 - 10) b += 10;
      break;
    case 0xfd906f:
      if(r > 0 + 10) r -= 10;
      if(g > 0 + 10) g -= 10;
      if(b > 0 + 10) b -= 10;
      break;
    case 0xfd609f:  // >>|
      if(combi < 0x07){
        combi++;
      }else{
        combi = 0x01;
      }
      break;
    case 0xfd20df:  // |<<
      if(combi > 0x01){
        combi --;
      }else{
        combi = 0x07;
      }
      break;
    default:
      break;
  }
  controlLED(ledOn, r, g, b, combi);

}

void controlLED(const boolean on, const int r, const int g, const int b, const int combi){
  unsigned int ron = 0, gon = 0, bon = 0;
  
  ron = (0x04 & combi) > 0;
  gon = (0x02 & combi) > 0;
  bon = (0x01 & combi) > 0;
  delay(20);
  if(on){
    analogWrite(LEDR, (255 - r * ron));
    analogWrite(LEDG, (255 - g * gon));
    analogWrite(LEDB, (255 - b * bon));
  }else{
    analogWrite(LEDR, 255);
    analogWrite(LEDG, 255);
    analogWrite(LEDB, 255);
  }
}