■ 一人綴り

イロイロやってますが、停滞中。(モノが出来たらアップする感じですから...。)更新はしますが数が減るかも。

■ 物の考え方

2017年03月04日 | プログラミング

 先日、7つのLEDを

 

のように配置し、それを点灯させて0-9までのパターンを点灯

させる場合に、LED彩度での信号の受信に着目したほうが、条

件判定の記述を簡素にできると言うのを書きました。

 

 とりあえず、この桁数を増やした場合はどうしようか?と言

う内容などを考えると、処理がまた変わってくるわけですが、

そうした場合に、どういう着眼点でモノを考えていくとソー

スコードに無駄がなくなるかを考える事が出来ます。

 

 とりあえず、こうしたものが、BGEのコンピューターですら

ない8bitとか4bitのマイコンで処理するのと、IoTの製品で処

理するのでは全く異なるのですが、基本t期に外部デバイスを

使った表示を考えた場合、こうしたものは潤沢なストレージ容

量やメモリー実装量は存在しませんから、効率的にコードを書

く必要があります。こうした内容は、処理能力の低いマシンを

使ってモノを行う場合に、処理を遅くしないための工夫でもあ

るのですが、先日書いた内容は、設計段階で何をしたらいいの

か?を考えるときに行い内容になります。

 

 先日も少し触れましたが、前回のは、7つの発行体の配列で

すが、これが、8x8の64となった場合どうだろうか?という事

になります。つまり、発光体は

【 点灯なし 】

 

【 全てが点灯 】

 

 

の二つ上納権威なります。ちなみに、ここまでドット数が多いと、

既に、1バイト文字が表示できる事になります。これは、マトリッ

クスディスプレイとかがソレになりますが、その解像度では電光

掲示板のように文字を表示できると言う訳です。

 

 本来はこうしたやり方をしないのですが、パターンと情報解析

によるそれで考えてみましょう。

 

 まず、誰でも思いつくパターンを無視した対応のさせ方だと、

 

  ■ 50音

  ■ アルファベット

  ■ 記号

 

に対して、そのドットで全て対応する方法です。この場合、実装

関数が存在して、帯出してフォントが使える条件だといいのです

が、そうでない場合には、これは使えません。つまり、従来だと

前回の配列ではなく、こうした場合にはキャラクターコードを使

って酔いだした配列を点灯させる(IoTでマトリックスディスプレ

イを購入して、電気工作をしてから光らせる場合にはそうした処理

になります。)わけですが、そうでない場合の方法を考えてみまし

ょう。

 

 まず、8x8の発行体ですから、前回同様にパターン化が出来な

いかを考えてみます。そうすると、

 

 0000 0000 ~ 1111 1111

 

で推移する事になりますから、これは、16進数の処理でシフトし

ている事が解ります。つまり、00~FFです。ちなみに、16新数で

すが、

 

 【 8 】【 4 】【 2 】【 1 】

   1    1    1    1

 

となっているので、1001の9までが数字で、それ以降はA~Fで

表記されます。こうして見てみると、2進数の数値変換と言うの

は解りやすいと思います。当然、これも配置があるので、

 

 【 0 】 0000

 【 1 】 0001

 【 2 】 0010

 【 3 】 0011

 【 4 】 0100

 【 5 】 0101

 【 6 】 0110

 【 7 】 0111

 【 8 】 1000

 【 9 】 1001

 【 A 】 1010

 【 B 】 1011

 【 C 】 1100

 【 D 】 1101

 【 E 】 1110

 【 F 】 1111

 

こうして見てみると、それぞれに法則性があり、その発光の

条件を満たせば、その個別モジュールを利用できます。

 

 そうなると、この条件の発行体を

 

  ■ 横x2

  ■ 縦x8

 

で並べた構造物と考えると解りやすくなります。上記の条件の

物を条件抽出で出した場合、4つのLEDの条件は構築できます。

つまり、発光する条件の構築なので、今度はデータ側でそれを

用意する事になります。

 

 例えば、2ドットを使った縦棒だと

 

 18,18,18,18,18,18,18,18

 

で、2ドットを使った横棒だと

 

 00,00,00,FF,FF,00,00,00

 

と言う感じです。縦一本のラインだと、

 

 80,40,20,10,08,04,02,01

 

で一行の中のいずれかのドットが選択できるので、

それが8つ並ぶだけとなります。横列の罫線は、FF

の位置がどこにあるのか?と言う話になります。

 

 楯列ですが、連続という事になると、forループ

で8貝繰り返せばいいのだはないだろうか?という

事になりますが、そうした呼び出しを連続の配列

の場合だと用意しておけば、固定されたものの場

合には使いやすくなります。

 

 こう考えると、ドットパターンがどういう状態

であるのか?をそれそぞれ指定しておき、それを

登録し、呼び出せば各列の処理が可能になると言

えます。

 

 とりあえず、外周を覆う枠を作る場合だと

 

FF

81

81

81

81

81

81

FF

 

で完成し、これをL文字のする場合には

 

80

80

80

80

80

80

80

FF

 

となり、逆にする場合だと

 

01

01

01

01

01

01

01

FF

 

となります。こうしたドットのデータを個別の検知し

て読み込ませれば、8x8のパターンだと問題がないと言

う事になります。

 

 こうして見てみると、前回の7つのLEDの配列の場合、

 

【 キャラクター数 】

  0~9までの10種

 

【 LED 】  

  7つ

 

【 配列における組み合わせ 】

  最大で7の階乗

 

 

ですが、この場合、

 

【 キャラクター数 】

  64の階乗で表現できるすべての配列

  

【 LED 】

  8列x8行の64

 

【 配列における組み合わせ 】

  最大で64の階乗

 

ですから、処理が複雑にのあるのも自然な内容と

言えます。

 

 配列パターンを定義しtえ、それを呼び出せるような

仕組みを最初に作っておいた場合、呼び出しにおける条

件は、こうした処理を考えずに行える訳ですが、基本的

に【 こうした64のLEDそれぞれに登録キャラクターご

との点灯パターンをひとつづつ指定するのは処理として

厳しい 】(つまり、□だと各LEDに点灯か否かの命令

をぶーリアン型でそれぞれ出すような処理だと厳しく、

文字数分だけそれをするのは無理がある)ので、配列

で処理できるものを用意して、16までの配列の中で効

率的な処理方法を考えるというほうが処理がしやすくな

ります。

 

 16新数位がの考え方だと、

 

【 1 】 奇数で点灯

【 2 】 2,4,6,7,A,B,E,Fで点灯

【 4 】 2~7,D~Fで点灯

【 8 】 8以降で点灯

 

となります。つまり、8の点灯条件は

 

 【 8 】 I>=8

 

になり、奇数店頭の場合、10進数変換で

 

 【 1 】I/2><0

 

範囲選択は、ORではなくANDで可能なので

 

 【 4 】 I=>2 AND I<=7

       I=>D AND I<=F

 

となります。 

 

 そう考えると、それが構造物として配列している

問う考え方をすると、変わりやすくなります。

 

 これを一行にして、オンとオフにした状態のモノ

が自動織り機の二進数制御の機材なんですが、処理

の仕方にもいろいろあります。

+


最新の画像もっと見る