まずは前回の続きから。RS232C経由での受信と、受信した値の変換までは前回で終わったので、今回は実際にそれを表示する部分だ。といっても、これはそう難しくない。
あらためてLEDの配置を図1に示すが、今回のプログラムでは、
1. | (1)のブロックを点灯 |
2. | 一定期間後、(1)のブロックを消灯→(2)のブロックを点灯 |
3. | 一定期間後、(2)のブロックを消灯→(3)のブロックを点灯 |
4. | 一定期間後、(3)のブロックを消灯→(4)のブロックを点灯 |
5. | 一定期間後、(4)のブロックを消灯→(5)のブロックを点灯 |
6. | 一定期間後、(5)のブロックを消灯→(6)のブロックを点灯 |
7. | 一定期間後、(6)のブロックを消灯→(7)のブロックを点灯 |
8. | 一定期間後、(7)のブロックを消灯→(8)のブロックを点灯 |
9. | 一定期間後、(8)のブロックを消灯→表示終了 |
という形のダイナミック点灯を行っている。この「一定期間後」は、今回の場合200μs(第371回で示したList 1の先頭で定義しているWAIT_LEDの数字)としているが、これは実際に値を変更しながら見え方をテストした結果決めた数字である。で、LEDの実際の点灯/消灯であるが、lpCnt2という変数のforループで記述している部分だ。今回の場合バーグラフだから、図2で言えば全点灯とか全消灯、部分点灯はあっても、一番右のような独立点灯になる事は考えなくて良い。だから全点灯なら10個、全消灯なら0個、部分点灯ならば(図2のケースなら)5個分を点灯すれば良い計算になる。
そんなわけでプログラムの方であるが、まず、
digitalWrite( PosY[lpCnt], LOW );
で点灯させたいブロック(図1の(1)~(8))を特定し、ついで
digitalWrite( PosX[lpCnt2], HIGH );
で必要な数のLEDを点灯、一定期間後に
digitalWrite( PosX[lpCnt2], LOW );
として消灯、最後に
digitalWrite( PosY[lpCnt], HIGH );
とすることで、次のブロックの点灯に備えるという仕組みだ。
ということでArduino側のスケッチの説明は終わったので、次はPC側で動くソフトの作り方を紹介したいと思う。
PC側のやってることは、第370回で簡単に触れたとおり、Performance CounterからCPU毎に負荷データを取得し、これをテキストに変換して送り出すだけの作業である。まぁ簡単とは言っても、既存のプログラムでこれをサポートしているものはないし、WSH(Windows Scripting Host:DOSのバッチコマンドの親玉とか言うと怒られそうだが、Windows上でスクリプトを利用するための環境)でもここまで細かいことは不可能である。ということで、自分でプログラムを作る必要がある。このためには開発環境をまず手に入れる必要がある。
Windows上での開発環境で一番メジャーなのは、MicrosoftのVisual Studioだろう。いくつかのグレード(Microsoft用語ではエディション)があるが、価格はこちらにある通り。一番安いVisual Studio 2010 Professionalでも\128,000とかになる。裏技はあり、「Standard Edition 乗り換え優待パッケージ」が\39,800で販売されているので、これをまず購入。更に前製品であるVisual Studio 2008を探して購入すれば合法的に使える形だ。ただ既にVisual Studio 2008製品は流通在庫というか「店頭に残っていれば買えるかも」レベルになっているので、入手性は悪いし、合計金額は多分6万を超えて7万近くになるだろう。もしまだ学生とか学校の教職員(あくまでもMicrosoftが認めている学校に限る : 詳細はこちら)であればアカデミックパックが利用可能で、その場合はVisual Studio 2010 Professional アカデミックが\12,800で購入できるが、購入の際には生徒あるいは教職員であることの証明が必要なので、誰でも買える訳ではない。
ただ幸いにも、もっと安価(というか、無料)で利用できる開発環境もある。
(続く)