2011年3月7日月曜日

module1


Option Explicit
Sub othello() 'メイン関数
Dim x As Integer, bpass As Integer, wpass As Integer
Dim n As Integer, m As Integer, bcount As Integer, wcount As Integer, okiba As Integer
Module3.Macro3
start
Module3.Macro
Module6.Macro
Do
    puttingblack bpass
    Module9.okiba okiba
    If bpass + wpass >= 2 Then
    MsgBox ("二人ともパスだったので対局を終了します")
    Exit Do
    ElseIf okiba = 0 Then
    MsgBox ("置き場が無くなったので対局を終了します")
    Exit Do
    End If
    wpass = 0
    puttingwhite wpass
    Module9.okiba okiba
    If bpass + wpass >= 2 Then
    MsgBox ("二人ともパスだったので対局を終了します")
    Exit Do
    ElseIf okiba = 0 Then
    MsgBox ("置き場が無くなったので対局を終了します")
    Exit Do
    End If
    bpass = 0
Loop Until x
For n = 2 To 9
For m = 2 To 9
If Sheet1.Cells(n, m).Interior.Color = RGB(0, 0, 0) Then
bcount = bcount + 1
ElseIf Sheet1.Cells(n, m).Interior.Color = RGB(255, 255, 255) Then
wcount = wcount + 1
End If
Next m
Next n
If bcount > wcount Then
MsgBox ("黒") & bcount & ("対白") & wcount & ("で黒の勝ちです")
ElseIf bcount < wcount Then
MsgBox ("黒") & bcount & ("対白") & wcount & ("で白の勝ちです")
ElseIf bcount = wcount Then
MsgBox ("黒") & bcount & ("対白") & wcount & ("で引き分けです")
End If
End Sub


Sub start()
Dim n As Integer, m As Integer
With Sheet1
Module3.Macro4
For m = 2 To 9
For n = 2 To 9
    .Cells(n, m).Interior.Color = RGB(0, 255, 0)
Next n
Next m
.Cells(4 + 1, 4 + 1).Interior.Color = RGB(255, 255, 255)
.Cells(5 + 1, 5 + 1).Interior.Color = RGB(255, 255, 255)
.Cells(4 + 1, 5 + 1).Interior.Color = RGB(0, 0, 0)
.Cells(5 + 1, 4 + 1).Interior.Color = RGB(0, 0, 0)
End With
End Sub

Sub puttingblack(bpass As Integer)
Dim x As Integer, y As Integer, c As Integer, xx As String, yy As String
Dim handan As Integer
handan = 0
Module9.kuroban
Do
bstart:
c = 1
xx = InputBox("上から何行目?0を2回入力するとパスになります", "黒の番です", 0)
If xx = "" Then
MsgBox ("番号が不正です。もう一度入力してください")
GoTo bstart
End If
yy = InputBox("左から何列目?0を2回入力するとパスになります", "黒の番です", 0)
If xx = "" Or yy = "" Then
MsgBox ("番号が不正です。もう一度入力してください")
GoTo bstart
End If
x = Val(xx)
y = Val(yy)
If x = 0 And y = 0 Then
MsgBox ("パスしました")
bpass = bpass + 1
Exit Do
ElseIf x = 0 Or y = 0 Or x < 1 Or x > 8 Or y < 1 Or y > 8 Then
MsgBox ("番号が不正です。もう一度入力してください")
GoTo bstart
End If
y = y + 1
x = x + 1
search_for_black x, y, handan
With Sheet1
If .Cells(x, y).Interior.Color = RGB(0, 255, 0) And handan <> 0 Then
.Cells(x, y).Interior.Color = RGB(0, 0, 0)
Else: MsgBox x - 1 & (",") & y - 1 & ("は置けません!")
c = 0
End If
End With
Loop While c = 0
End Sub

Sub puttingwhite(wpass As Integer)
Dim x As Integer, y As Integer, c As Integer, xx As String, yy As String
Dim handan As Integer
handan = 0
Module9.siroban
Do
wstart:
c = 1
xx = InputBox("上から何行目?0を2回入力するとパスになります", "白の番です", 0)
If xx = "" Then
MsgBox ("番号が不正です。もう一度入力してください")
GoTo wstart
End If
yy = InputBox("左から何列目?0を2回入力するとパスになります", "白の番です", 0)
If xx = "" Or yy = "" Then
MsgBox ("番号が不正です。もう一度入力してください")
GoTo wstart
End If
x = Val(xx)
y = Val(yy)
If x = 0 And y = 0 Then
MsgBox ("パスしました")
wpass = wpass + 1
Exit Do
ElseIf x = 0 Or y = 0 Then
MsgBox ("番号が不正です。もう一度入力してください")
GoTo wstart
End If
y = y + 1
x = x + 1
search_for_white x, y, handan
With Sheet1
If .Cells(x, y).Interior.Color = RGB(0, 255, 0) And handan <> 0 Then
.Cells(x, y).Interior.Color = RGB(255, 255, 255)
Else: MsgBox x - 1 & (",") & y - 1 & ("は置けません!")
c = 0
End If
End With
Loop While c = 0
End Sub

Excelオセロプログラミング概要

Excelでオセロを作ってみた。
プレイ中の感じです。(クリックで拡大)



残念ながらクリックに対応しておらず、完全に手打ち形式です。
実はこのころプログラミングとか全く触ったこともなく、かなり文が雑です。

Excelの授業課題として提出したので期間もほとんどかけられてません。
大体半年前だったかな?

あまりにも膨大な駄文なので分割してアップます。
(駄文なのに上げるのかとは言わないこと)


画像には表記されていませんが、座標[0,0]でパスができ、
双方ともにパスだった場合は強制的にゲームが終了します。

また、有効な置き場がなかった時には自動でパスし、置き場が完全になくなったときは
終了するようになっています。


プレイする分にはネックはクリック対応じゃないことくらいなんですけど、
ソースをみると無駄があるわあるわ…。


・石を裏返すときの処理と有効な置き場の探索で上下左右斜めすべての文が手打ちであること。
・意味のないモジュール分け。
・反対に必要なところなのにモジュールがひとつ。
・変数名(フラグなど)が何を指すか解りにくい。


こんなに。
特に1番上は致命的ですね。よくこれで出そうと思ったな自分…とか考えてしまうレベル。


言い忘れてましたがExcelのVBAを使用しています。
モジュールは7コ。数えた感じでは合計で1000行を軽く超していたような…。


ちなみにあれから半年、Android開発をしてみたいと思い立ち、
まずは原点のオセロだろうと思い、再びオセロを作り始めました。
グラフィカルな部分は未完成ながらもシステムは完成し、行数を数えてみると

なんと150行。

現行でグラフィック関連も少し書いているので、
それを除くとおよそ10倍の無駄があった計算になります。

ちなみに現行版はAndroidアプリにする予定だったのでJava言語で書かれています。


たった半年ながら大きな前進だったな、としみじみ。
Android版は画像ファイルなしで全てグラフィック描画処理で済ませようと思うので、
円の中心の座標とかタッチ入力の判定とかも少し書かれています。

問題はAndroidアプリの仕組みを理解していない節があるので
そこを勉強するのにあと半年くらいかかりそうだなー、なんて。


モジュール別にVBAプログラムをあげるのでラベルからもしくは以下からどうぞ。
module1
module2
module3
module4
module5
module6
module9(※9であることに注意)

Windowsプログラミングによるオセロ(構造としては完成系のつもり)

2011年3月6日日曜日

GPSロガー3

まずは前回の訂正から。

言っていた通り、前回のままではGooglemapに送信したときにエラー(フリーズ)
することが判明したので修正版をあげておきます。


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

FILE *fr,*fw;
void KMLlayout(void);
void KMLlayout2(void);

int main (void){
errno_t error;

if((error = fopen_s(&fr,"gpsdata.txt","r")) != 0){
printf("gpsdata File Open Error!");
getchar();
return -1;
}
if((error = fopen_s(&fw,"mapdata.kml","w")) != 0){
printf("mapdata File Open Error!");
return -1;
}

KMLlayout();

int count;
double latitude,longitude;
char c[100];
char endflag[10] ="";
char *token,*nexttoken;

while(1){
count =0;
fscanf_s(fr,"%s",c,100);//fscanfのセキュリティ版
token = strtok_s(c,",",&nexttoken);//文字列を指定した文字で区切る(string.h)

/*終了フラグ*/
if(strcmp(token,endflag) == 0){
break;//2回連続で同じ行を読み込んだら終了する
/*最後の行までいくと最後の行を連続で読み続ける*/
}
strcpy_s(endflag,10,token);

/*変換*/
if(strcmp(token,"$GPGGA") == 0){
while(token != NULL){
if (count == 2){//NMEAとgoogleの経度緯度の順が逆なので分ける
latitude = atof(token);//文字列をdoubleに(stdlib.h)
latitude = latitude/100;//googleの位置フォーマットに合わせる
}
else if(count == 4){//別々の変数に入れる
longitude = atof(token);
longitude = longitude/100;
}
token = strtok_s(NULL,",",&nexttoken);//2度目以降はNULL文字
count++;
}
fprintf(fw,"%f,%f,0.000000 ",longitude,latitude);
}
}
KMLlayout2();
fclose(fr);
fclose(fw);
}


void KMLlayout(void){
fprintf(fw,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
"<kml xmlns=\"http://earth.google.com/kml/2.2\">"
"<Document>"
"  <name>無題</name>"
"  <description><![CDATA[test]]></description>"
"  <Style id=\"style1\">"
"    <LineStyle>"
"      <color>73FF0000</color>"
"      <width>5</width>"
"    </LineStyle>"
"  </Style>"
"  <Placemark>"
"    <name>line</name>"
"    <Snippet></Snippet>"
"    <description><![CDATA[]]></description>"
"    <styleUrl>#style1</styleUrl>"
"    <ExtendedData>"
"          <Data name=\"_SnapToRoads\">"
"        <value>true</value>"
"      </Data>"
"    </ExtendedData>"
"    <LineString>"
"      <tessellate>1</tessellate>"
"     <coordinates>");
}
void KMLlayout2(void){
fprintf(fw,"</coordinates>"
"    </LineString>"
"  </Placemark>"
"</Document>"
"</kml>");
}



これはもう完成版で、前回ミスしていたところの修正とkmlへの対応版となっています。
まだkmlのフォーマットについて理解していない部分があるので現在は直線でしか表示できません。
(「ルートに沿う」が出来ない。これはmapの方で指定できます。)



修正の内容について。
まず、前回は$GPGGAの行の2要素(緯度)と4要素目(経度)になればファイルに書き出す、という
流れに任せたプログラムでしたがkmlでは緯度経度が逆の順に並んでいるので、kmlに書き出すと
「北緯135度,東経45度」というあり得ない数値になっていたのが原因のようです。

そこで修正版では一度緯度データをdoubleに保存しておき(この時点ではatof関数によってcharからdoubleに変換されている)、経度も同じように保存してまとめて表示するという文になりました。

経度は特にdoubleに入れる必要はありませんが、どうせなら表示は1か所の方が見やすいので、
緯度経度ともに変数に格納しました。

下の二つのKMLlayoutは、単にプログラム内にkmlのベース文を表示させるだけのプログラムです。
これとの兼ね合いで最初のFILE宣言がグローバルになっています。

あと、ファイルオープンで自動でダイアログが消えないようにgetcharを仕込みました。
まああってもなくてもいいんですけど、ないと成功したのか失敗したのかわかんないので^^;


出力部分を抜けばかなり短い文になった感じですね。
Excelでオセロ作った時は知識もないしすごい長かった記憶が…(笑
たしか1500行くらい使ったような。

こんな感じでたぶんGPSデータをgooglekmlに変換することができたんじゃないかな?
それにしても標準の関数だけでここまで出来るんだなぁー。なんて。

文字比較と文字→数値、文字分割あたりはすごく便利に感じました。
文字系統が全然理解できていないので簡単に使えるといいですよね。
まあバグなんて個人プログラムだから気にしなくていいし。(その割に_s文ばっかり)


あとはハード的な解決とマイコンの方のプログラムかなー。


2011年3月5日土曜日

GPSロガー2

今回は前回の続き。

前に言ってた通り、kmlのフォーマットをはじめに。
kmlはどうやらGooglemapやGoogleEarthの形式らしくて位置情報を持っています。

ベースはたぶんXML(自分は書けませんが…)です。
XMLベースなので(ということにしておいて)、テキストエディタで開けます。

前回書いた、
「一度DLしたファイルをブラウザで開いてそのリンクからもう一度DLする方法」

で落としてきたファイルをWin標準のメモ帳で開いてみると…。


<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
<Document>
  <name>無題</name>
  <description><![CDATA[test]]></description>
  <Style id="style1">
    <LineStyle>
      <color>73FF0000</color>
      <width>5</width>
    </LineStyle>
  </Style>
  <Placemark>
    <name>line</name>
    <Snippet></Snippet>
    <description><![CDATA[]]></description>
    <styleUrl>#style1</styleUrl>
    <ExtendedData>
      <Data name="_SnapToRoads">
        <value>true</value>
      </Data>
      <Data name="_SnapToRoads">
        <value>true</value>
      </Data>
    </ExtendedData>
    <LineString>
      <tessellate>1</tessellate>
      <coordinates>
        135.314151,35.215426,0.000000 135.235266,35.367473,0.000000
      </coordinates>
    </LineString>
  </Placemark>
</Document>
</kml>


<Data name ="_SnapToRoads">
 <value>true</value>
</Data>


が二つほど入っているのが気にかかるところではありますが、
ちゃんと動くのでスルーという方向で。


ここでヒントを出しますと、これはGooglemapで表示させると1本の直線です。
お察しの通り

<coordinates>
135.314151,35.215426,0.000000 135.235266,35.367473,0.000000
</coordinates>

がその直線部分になります。
たしか京都付近だったかなー?

その付近なので、座標は日本の[135,35]付近になりますね。
これは東経135度、北緯35度ということです。

今のところ北半球東半分(というか日本)でしか使う予定がないので、
南半球西半分では数値がどのような値になるかは解りません。
(たぶんマイナス表記になると思うんだけどなぁ。)


まだハード(GPS本体)を入手していないので、
先にNMEAデータからKMLデータに変換するプログラムを書いていきます。
扱うのは単にテキストファイルで、ネットに接続する予定でもないので
普通に知っているC言語でやっていきたいと思います。


機械の人間でフローチャート書くのに慣れていないので、脳内構想です。

テキストファイル(読み出しと書き出し2つ)を開く
↓
KML形式のフォーマット(ここでいう<coordinates>以外の部分)を書き出す。
(ここはたぶん不変なので)
↓
読み出しファイルから$GPGGAの行を探す
↓
その行の位置データだけを取得して書き出したファイルに追加する
↓
終わり


すごく簡単に書くとこんな感じです。
KMLフォーマット抜きにするとこんな感じになりました。


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main (void){
FILE *fr,*fw;
errno_t error;

if((error = fopen_s(&fr,"gpsdata.txt","r")) != 0){
printf("gpsdata File Open Error!");
return -1;
}
if((error = fopen_s(&fw,"mapdata.kml","w")) != 0){
printf("mapdata File Open Error!");
return -1;
}

int count;
double num;
char c[100];
char endflag[10] ="";
char *token,*nexttoken;

while(1){
count =0;
fscanf_s(fr,"%s",c,100);//fscanfのセキュリティ版
token = strtok_s(c,",",&nexttoken);//文字列を指定した文字で区切る(string.h)

/*終了フラグ*/
if(strcmp(token,endflag) == 0){
break;//2回連続で同じ行を読み込んだら終了する
/*最後の行までいくと最後の行を連続で読み続ける*/
}
strcpy_s(endflag,10,token);

/*変換*/
if(strcmp(token,"$GPGGA") == 0){
while(token != NULL){
if (count == 2 || count == 4){//GPGGA行の2と4要素だけが必要なので
num = atof(token);//文字列をdoubleに(stdlib.h)
num = num/100;//googleの位置フォーマットに合わせる
fprintf(fw,"%f ",num);
}
token = strtok_s(NULL,",",&nexttoken);//2度目以降はNULL文字
count++;
}
}
}
fclose(fr);
fclose(fw);
}


これであとは先頭行に適当に書きつければOK(だと思う)。
重大なミスを発見したので次回、修正します。
googlemapが経度,緯度なのに対してNMEAが緯度,経度だったのが問題。
誰かNMEAのサンプルデータをくれるとすごくうれしいんだけど
なかなか持ってる人っていないよねー。


早く完成させて車載したいなぁ。
じゃあ終わり。

2011年3月4日金曜日

GPSロガー

GPSロガーとは?
3次元位置計測情報を取得し、記録する装置。
取得した情報は地図上に表示されたりする。

製作理由はですね、
・第一種普通免許の取得
・春休み(暇)
・技術の向上
こんなところです。

物作るのに理由なんてありません。アマは。


とどのつまりクルマで走った場所をgooglemap上に記録したかった。
そんな理由なんです。
余談ですけどトド肉を今日食べました。


そんなこんなでプロジェクトスタート。

まずはじめにするべきはフォーマットの確認。
どうやらGPSの位置情報はNMEA-0183で表現されるようです。
$GPGGA,104549.04,2447.2038,N,12100.4990,E,1,06,01.7,00078.8,M,0016.3,M,,*5C
$GPGLL,2447.2073,N,12100.5022,E,104548.04,A,A*65
$GPGSA,A,3,26,21,,,09,17,,,,,,,10.8,02.1,10.6*07
$GPGSV,2,1,08,26,50,016,40,09,50,173,39,21,43,316,38,17,41,144,42*7C
$GPGSV,2,2,08,29,38,029,37,10,27,082,32,18,22,309,24,24,09,145,*7B
$GPRMC,104549.04,A,2447.2038,N,12100.4990,E,016.0,221.0,250304,003.3,W,A*22
$GPVTG,221.0,T,224.3,M,016.0,N,0029.6,K,A*1F
$GPZDA,104548.04,25,03,2004,,*6C

こんな感じのデータ内容らしいです。
実機持ってないのが痛いところですけど
これをベースにプログラム組んでいきたいと思います。

まず、あまりマイコンに負担をかけたくないので2ステップでの予定です。
データの取得と記録→
NMEA-0183形式をGooglemapのXML(KML)形式へ→
Googlemapに位置情報を投稿
こんな感じの2ステップです。


現在2011年3月4日では、
・C言語ベース
・AVRマイコン(atmega88p)を使って情報をSDカードに記録してPCでKMLに
・GPSデータからKMLまでは自動生成であること
・シガーソケットからの給電
を目標にしています。


現在、フォーマットの確認を終えてそこからKMLへのプログラム作りです。
接続方式などは現物を入手してから考えるのでここではスルー。


上記NMEAの形式ではどうやら最上段の$GPGGA行の2要素目、
2447.2038
と、4要素目
12100.4990
が位置情報みたいです。

たぶん、付近にあるNとかEとかは
North(北緯)とEast(東経)の頭文字だと思われます。
これを取得して利用していきます。

そしてこの形式では小数点が2ケタほど右に行っているようなので、
そこを100倍か何かして
24.472038
121.004990
のような感じに変えていきます。

親切に行ごとにGPなんとか~が書かれているのでそれを利用して、

$マークが来たらその先頭の文字列はGPGGAであるかを比較する。
↓
GPGGAだったらその行を取得(要素ごとにスペースが入っているかによって若干変わる)。
↓
行の2要素目と4要素目を取得してKML形式に書き出し。(正確には3と5要素)


こんな感じの流れを想定しました。
KMLのフォーマットなどは次回で。


ちなみにGooglemapでマイマップを作製し、右上のバー(印刷、送信、リンクとかがあるところ)の
「GoogleEarthで表示」ってのをクリックするとKMLファイルがダウンロードできます。
当たり前ですが、このときにちゃんと線を引くなりなんなりしていないと中身を見てもすっからかんです。


そしてここからがミソ、というかそんな感じなんですけど
ここでダウンロードしたKMLは情報ファイルにリンクが張ってあるだけで、
それだけでは意味を持ちません。
なのでそのリンクを辿っていきます。

DLしたKMLをブラウザで開くとURLが見えると思うので、
それをアドレスバーにぶっこんじゃってください。
そうするともう一度KMLのダウンロードが開始されます。

ミソ、といってもやることはこれだけなんですけど
これが出来ないと位置データ自作は難しいなぁ。

やっぱり完成したものを一回見てそれをいじってみないと
どこが必要な部分かが分かんないんだよなー。

そんな感じで製作(してないけど)1日目終了。
(^-^)/~

2011年1月21日金曜日

LEDバーサライタの制作


試験前の少しの空き時間を利用してAVRマイコンでLEDバーサライタを作ってみました。
バーサライタとは残像を利用して文字列(に限らないが)を表示するシステムです。
(写真はMASAKと表示されています)
製作費は180(マイコン)+5x9(LED9個)+1(カーボン抵抗1個)で、250円程度です。

マイコンは知ってる方も多いと思いますがマイクロコントローラ、
またはマイクロコンピュータと呼ばれる小さなコンピュータで
内部に記憶装置、メモリ、CPUなどが内蔵されています。


構造はLEDを直列に並べ、その点滅で象るものです。
(写真はブレッドボードに置いた状態。撮影の都合上横に並んでます。)


「T」と表示したいなら、
○→●●●●●→
○→○○●○○→
○→○○●○○→
○→○○●○○→
○→○○●○○→

縦にLEDが5つ並んでいて、それを5回点滅させながら右にスライドさせます。
白丸は消灯、黒丸は点灯です。
矢印の方向にスライドすると図のような感じになります。


点滅の速度は一眼カメラなどのシャッターを開きっぱなしにするなら
どれだけの時間でもいいんですけど、人間の目であればコンマ数秒で残像は消えてしまうので
「出来るだけ短い時間で点滅させる」ことが重要になってきます。
(あまり遅すぎると、2つ目の縦のラインが点滅したときに1つ目のラインは消えてしまう)

けどあまりにも早すぎると、スライドさせる速度が間に合わなくなってしまって
ライトが重なり、文字が判別できなくなります。

いろいろ試してみたところ1回の点滅は5ms(ミリ秒・0.005秒)
くらいがちょうどいいという結果になりました。
もっともこれはスライドさせる速度などによって上下します。

そしてマイコンなどの応答速度によって、あまり速い速度だと点滅が上手くいかないかもしれません。


以下制作の手順をまとめてみました。

1、マイコン本体やライタ、LED、カーボン抵抗、電池などを準備。
マイコンはatmel社のAVRマイコンatmega88pを使用。
atmega88pの仕様書は以下に。(直リンク失礼)
http://www.atmel.com/dyn/resources/prod_documents/8025s.pdf

ライタは純正品を使っています。
書き込み方などは省略します。


2、プログラムを考える。
といってもLEDの点灯はHighかLowしかない(操作上は)ので、2進で制御しました。

大きさをある程度確保したかったので縦9列になっていますが、
ちょうどいいフォントがなかったので全て手打ちです。(これが一番きつかったかも)

そしてひと固まりのポート(PORTDなど)は8個ひと組なので
一番上のLEDだけはPORTBで動かしています。

マイコン自体の操作はニコニコの方がわかりやすい解説をされているので省略。
「電子工作のススメ」で検索すればHITするかと思います。

プログラムは下部に乗っけときます。


3、回路を考える。
省略します…と言いたいくらい簡単です。
PORTD0~7、PORTB0のみの使用で、あとは電源への4本くらいです。
PORTには簡略化のためすべてLED直付けなので迷うことはありません。
ブスっといっちゃいましょう。極性には気をつけてね(´・ω・`)

プルアップ?そんなの分かんない




そして初めて回路図書いてみました。


ちょっと書き方が気持ち悪いですけど、間違ってはいないはず…。
自分がわからなかったところを考慮してVCCとかGND(接地)とかいう記号は使ってません。
ちなみに上側が半円の切欠のある方です。

これでボードからライタを取り外せば(ここ重要)めでたく完成となります。
USBにライタをつながずにライタからボードにつながっていた場合、動作しません。
自分もはじめのころここで迷ったんだよなー。
だってライタ外すと再接続しなきゃいけないじゃない
ISPケーブルをライタから抜けばそれで大丈夫です。(説明がわかりづらい)

基本的なところはこれくらいにして以下プログラム。
お好きにspace分のdelayとかいれればいいとおもいます。

お疲れ様でした。

#include<avr/io.h>
#include<util/delay.h>

void A_line();
void B_line();
void C_line();
void D_line();
void E_line();
void F_line();
void G_line();
void H_line();
void I_line();
void J_line();
void K_line();
void L_line();
void M_line();
void N_line();
void O_line();
void P_line();
void Q_line();
void R_line();
void S_line();
void T_line();
void U_line();
void V_line();
void W_line();
void X_line();
void Y_line();
void Z_line();

int main(void){

DDRB = 0b11111111;
DDRD = 0b11111111;

while(1){

H_line();
E_line();
L_line();
L_line();
O_line();

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}
}

void A_line(){
PORTB = 0b00000000;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00001000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00001000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00001000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00001000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b11111111;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void B_line(){
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b11101110;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void C_line(){
PORTB = 0b00000000;
PORTD = 0b11111110;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b10000010;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void D_line(){
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b10000010;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b01000100;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void E_line(){
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void F_line(){
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000000;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void G_line(){
PORTB = 0b00000000;
PORTD = 0b11111110;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00001001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b10001110;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void H_line(){
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void I_line(){
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void J_line(){
PORTB = 0b00000000;
PORTD = 0b00000110;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b11111110;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void K_line(){
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00101000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b01000100;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b10000010;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void L_line(){
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void M_line(){
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b11000000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b01110000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b01110000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b11000000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void N_line(){
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b11000000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b01110000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00011100;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000110;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void O_line(){
PORTB = 0b00000000;
PORTD = 0b11111110;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b11111110;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void P_line(){
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b11100000;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void Q_line(){
PORTB = 0b00000000;
PORTD = 0b11111110;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000101;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000011;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b11111111;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void R_line(){
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00011000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010100;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b11100011;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void S_line(){
PORTB = 0b00000000;
PORTD = 0b11100010;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00010001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b01001110;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void T_line(){
PORTB = 0b00000001;
PORTD = 0b00000000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b11111111;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00000000;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void U_line(){
PORTB = 0b00000001;
PORTD = 0b11111110;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b11111110;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void V_line(){
PORTB = 0b00000001;
PORTD = 0b11111000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000110;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000001;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000110;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b11111000;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void W_line(){
PORTB = 0b00000001;
PORTD = 0b11111100;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000111;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00111100;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00111100;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00000111;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b11111100;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void X_line(){
PORTB = 0b00000001;
PORTD = 0b10000011;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b01000100;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00111000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00111000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b01000100;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b10000011;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void Y_line(){
PORTB = 0b00000001;
PORTD = 0b11000000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00100000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00011111;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00010000;
_delay_ms(5);
PORTB = 0b00000000;
PORTD = 0b00100000;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b11000000;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}

void Z_line(){
PORTB = 0b00000001;
PORTD = 0b00000111;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00001101;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00011001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b00110001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b01100001;
_delay_ms(5);
PORTB = 0b00000001;
PORTD = 0b11000001;
_delay_ms(5);

PORTB = 0b00000000;
PORTD = 0b00000000;//space
_delay_ms(5);
}




2011年1月5日水曜日

レイアウト変更

今回のレイアウト変更で、
著者等の情報部分を全て英語表記に。
pagerもOlder、Home、Newerの表記に。
フィードを無効化してフッター付近をシンプルに。
他には右側のガジェットを選別しました。

あとはヘッダーより上のnavbarも消そうかと思いましたが、
Google的には利用を推奨する様なのでそのまま残存させるというカタチに。

背景等のデザイン変更もやっていきたいところではありますが、
ちょっと素材不足の感じがあるのでまだ先となりそうです。


ちなみにHome付近の表記変更はデザイン設定の「htmlの編集」から、
「ウィジェットのテンプレートを展開」チェックを入れて編集します。

ctrl+F等で、<a></a>で囲まれているhomepagetitleをHomeに、
同じくnewerpagetitleをNewerに変更することで表記の変更ができます。


htmlがサポートされているのでちょっと試験運用してみました。
なかなか使いやすそうです。