スポンサーサイト

一定期間更新がないため広告を表示しています

スポンサードリンク | - | | - | - |

IchigoJamで簡単なゲームをつくってみた

息子のイヤイヤ期はんぱない。
服着ないはオムツはかないはで大変。
先日食事中の行儀があまりに悪いので叱ったら、うつむいて口をとがらせてしょんぼりしててめちゃくちゃ可愛かった。
思わす妻と顔を見合わせて微笑んでしまった。
微笑みを息子に見られないように頑張って叱る日々です。

///////////////////////////////////
IchigoJam、本命は外部端子を使って遊ぶことなんだけど、試しに簡単なゲーム作ってみた。
ゲームが始まるとランダムにキャラクターが上下するので、壁に接触しないようにキーボードで調整する。それだけ。
時間表示もあるのでハイスコアを目指そう。
この内容で既にプログラムメモリを6割消費しているという(笑)
でもレトロでいい感じ。
ジャジャガッチ | 電子工作 | 00:24 | comments(0) | trackbacks(0) |

IchigoJam:キャラクタの移動

そういえば昨年末にちょこちょこやってた「プログラミングで彼女をつくる」、paizaっていうIT転職関連ウェブサイトで企画されたものなんだけど、paizaブログの結果発表の所で本ブログが紹介されました。
単にリンクされただけだけど。気になる人は「jajagacchi paiza」とでもぐぐれば出てきます。

/////////////////////////////////////////////////
IchigoJam、ゲームの基本はキャラクタの移動なので、試しに作ってみた。
もういい加減手打ちが面倒くさいのでコードは写真。
変数A,Bに旧座標記憶させてPRINT " "で文字消去してるのがポイントね。これないと残像出来る。
ジャジャガッチ | 電子工作 | 00:05 | comments(0) | trackbacks(0) |

IchigoJamで二次関数描いてみた

日曜日は雨上がり直後に妻、子供と近所の公園に行ってきた。
水溜り目当てだ。
砂場が池状態でテンション上がる。
音戸の瀬戸とか河とか作って遊んだ。尻が冷たかったがとても楽しかった。でもローラー滑り台はちょっと失敗したと思った。
遊んでるのうちの家族くらいだったけど、こんな日に砂場で遊ばないなんて絶対損してるぞ!
息子の長靴は意味を成してなかった。

////////////////////////////////
さて、IchigoJam。
コマンドは一通りチェックしたけど、さあ何作ろう。
とりあえず練習の意味も込めて二次関数描いてみた。

10 GOTO 60
20 Y=(X-15)*(X-15)/15
30 LC X,Y
40 PRINT "@"
50 RETURN
60 FOR X=0 to 31 STEP 1
70 GOSUB 20
80 NEXT
クオリティ低くてすまんな。
ジャジャガッチ | 電子工作 | 23:47 | comments(0) | trackbacks(0) |

IchigoJamのコマンドを眺める:上級編

今日はバレンタインデー。
妻と妻の友人合作のトリュフやクッキー and 好物のウィスキー/日本酒ボンボン and 趣味のいい靴下をいただきました。
ありがとう!!とても嬉しいです!
ホワイトデーのお返しが大変だけど・・・、まあ幸せな悩みです。
日本酒ボンボン、初めて食べたけど思いのほかおいしい。
あと、妻お気に入りの近所のケーキ屋がバレンタインデー限定ケーキを販売していて、昨夜それを食べたのだが、また食べたいという妻の要望で夕方に急いで買いに行ってきた。
幸せな一日です。

/////////////////////////////////////////////
昨夜は夜の19時くらいからずっと英語を勉強する妻の横でIchigoJamをいじっとりました。
さて、上級コマンドを眺めていこう。

ふむふむ、配列が使える。
RENUMで行番号を自動で振り直せる。ただしGOTOとかの指定先は手動変更が必要とのこと。
peak/pokeはメモリ読み書きらしい。いまいち使いどころがわからない。
あと重要なのはサブルーチンだな。GOSUBで指定行に飛んでRETURNで呼び出し元の次の行に戻ってくる。

10 GOTO 70
20 LED 1
30 WAIT 60
40 LED 0
50 WAIT 60
60 RETURN
70 GOSUB 20
80 END


みたいなかんじ。
10 GOTO 70がないと実行後すぐにサブルーチンの中に入っちゃってRETURNの戻り先がなくなってエラーを吐くので注意。
うまく使えばプログラムメモリが節約出来る。

キー入力は

10 LED 1
20 IF BTN(UP) THEN GOTO 30 ELSE GOTO 20
30 LED 0


みたいなかんじ。
カーソルの上を押すとLEDが消灯する。
ジャジャガッチ | 電子工作 | 23:46 | comments(0) | trackbacks(0) |

IchigoJamのコマンドを眺める

さあ、まずは基本を抑えよう。
1+1を計算してみよう。

PRINT 1 + 1
2


エンターキーを押すとすぐに結果が返ってくる。
プログラムリストを記述するときは次のように頭に行番号をつけてやればいいらしい。

10 PRINT 1 + 1
20 PRINT 1 + 1


これでRUNと入力するかF5を押すと

2
2


と表示される。特定行を削除したいときはその行番号をタイプしてやるだけでok。
プログラムをクリアしたいときはNEWとタイプする。
画面クリアはCLSまたはF1キー。
プログラムリストはLISTで確認できる。
とりあえずこれくらい抑えとけばプログラム作り始められるかな。

さて、ではコマンドリファレンスを見ていこう。面白そうなのを取り上げる。
お、LEDを点灯させるコマンド発見。点滅させてみるか。

10 LED 0
20 WAIT 60
30 LED 1
40 WAIT 60
50 GOTO 10


これで一秒点灯、一秒消灯を繰り返します。
IF文を見つけたので点滅を有限回で終わらせてみよう。

5 N = 0
10 LED 0
20 WAIT 60
30 LED 1
40 WAIT 60
45 N = N + 1
46 IF N > 2 THEN GOTO 55
50 GOTO 10
55 END


これで有限回の点滅で終わります。
BASICの行番号が何故10ずつ増えていくのか昔から不思議だったが、こういう感じにあとからプログラムを挿入するためなのか。

次に気になるのはLOCATE(LCでも可)。位置を指定するとそこに次の文字が描かれるらしい。
x=0-31 , y=0-23の範囲とのこと。これを使えば動画的なことが出来そう。これは後で遊ぼう。
画面のスクロールSCROLLもある。

乱数もある。RND。

音楽も鳴らせるようだ。これはスピーカ的なものを外付けする必要がある。これもそのうち試したいな。

FOR文もあるじゃん。

ここまでが初級コマンド。
上級コマンドにはかなり重要そうなコマンドがいくつかあるのでこれは次回にしよう。
ジャジャガッチ | 電子工作 | 21:57 | comments(0) | trackbacks(0) |

IchigoJam購入

前にこのブログでも話題に取り上げたIchigoJamをついに購入した。
IchigoJamとはこどもパソコンというキャッチフレーズで販売されているコンピュータ。
とは言ってもインターネットも出来ないし、ただ文字が表示されるだけ。見た目は次の写真のような感じ。一緒に写っているのは単四電池。
1500円で販売されているものは自分で半田付けする必要がある。僕は2000円出して完成品買った。電源ケーブルとか付属していないのでそれもそろえる必要がある。僕は家にあった携帯電話用の充電ケーブルのコネクタをusbに変換して(100均で購入)電源を確保、映像ケーブルはジャンクで100円にて購入(ジャンクとはいっても新品)、キーボードはPS/2だが自宅にはないのでこれもジャンクで購入。割ときれいなのが300円で買えた。しめて2500円也。
電源を入れるといきなり次のような画面があらわれてすぐにプログラム可能。
昔はこういうコンピュータが普通だったんだね。僕はほとんど知らないけど。
BASICで記述します。
僕はBASICの経験はない。せいぜいVBとVBAくらい。
命令はかみっぺら一枚に収まるほどしかないのでこれからチェックしてみます。
外部入出力も備えてるから色々面白いことが出来そうな感じ。忙しい大人でもちょっと遊ぶのにちょうどいいと思う。安いし。
ジャジャガッチ | 電子工作 | 21:57 | comments(0) | trackbacks(0) |

PSP修理完了

毎月きちんとチェックしてるジャフメイト。安全運転のために。
ジャフメイト2015 11月号の24、25ページにてカーナビのルート探索アルゴリズムのベースはダイクストラ法だと書いてある。
うん、それだけ。

////////////////////
PSP修理完了した。大分前だけど。
結局長めのねじをホームセンターで買って来て無理矢理ケースを閉めてやったら直った。

本当はギレンの野望用に買ったのに、何故か悪魔城ドラキュラXクロニクルに興じてしまった。
何とかドラキュラ第三形態まで倒せました。
PCエンジンのソフトのリメイクであることもあり、今どきのゲームと比べると難しい。
死にながら覚える難易度。
やっぱりこれくらいが面白い。
 
ジャジャガッチ | 電子工作 | 21:51 | comments(0) | trackbacks(0) |

PSPアナログスティックの分解

妻がブログで紹介したカルカソンヌ。
とても面白いのでここで写真付きで紹介する。
まずは下の写真をご覧ください。
このように地形が描いてあるピースをプレイヤーが順に並べていくゲーム。
ピースを置くときは隣接するピースと地形が繋がるようにしなければならない。
ピースを置いたらそこに自分のコマを置くことも出来る。コマはそこで労働し、点数になる。
例えば都市(上の写真の茶色いやつ)にコマを置くと、都市が完成した時点で点数が入り、コマは手元に戻ってくる。
完成しなくてもゲーム終了時に少し点数がもらえるが、それまでコマは手元に戻ってこない。

単純だけど面白い。
例えば下の写真は妻の都市の完成を阻止したもの。
都市の壁を置かなければならない位置の横に道路を配置することで、妻は都市と道路の両方が描いてあるカードが必要になる。
他人の道路や都市を奪い取ることも出来る。
毎回違った地図が出来上がって大変面白いです。
amazonでも買えるので興味のある方は是非。

////////////////////////////////
ジャンクPSP。
一応ゲームが出来そうなところまでやってきた。

しかしまたここで問題。
アナログスティックが暴走気味。
アナログスティックをオフに出来ないか調べてみたがプラグインのダウンロード等が必要らしく面倒。
とりあえずバラして構造を見てみることにした↓。
回路を見てみたが、電子部品が見当たらない。
回路を拡大↓
実は上の写真の赤枠のところにシート状の抵抗が貼り付けられているようだ。
値はmaxで10kΩっぽい。
アナログスティックを動かすと、下の写真の金属の爪も一緒に動いて上の写真の可変抵抗と隣のパターンを導通させる。
回路図に起こすとこんな感じか↓。
可変抵抗の値を座標(x,y)に対応させていると推測される。
ちなみに各電極間の抵抗は次のようになる。

1-2: r4 // (r3+R)
1-3: (r4+r2) // (r3+r1)
1-4: r3 // (r4+R)
2-3: r2 // (R+r1)
2-4: R // R
3-4: r1 // (r2+R)

電極間に電圧をかけて可変抵抗値を読み取り、それによってアナログスティックの位置を推測しているのかな。
これを前提としてPSP本体を見てみると、ケースがきちんと閉まりきっておらず、一部の電極が浮いてしまっていたっぽいことがわかった。
そうすると可変抵抗値を正しく推測出来ないため、誤動作してしまうのかもしれない。
ケースがきっちり閉まればよいのだが、実は一部のネジをうける部分が破損してしまっているため、このままではきっちり閉まらない。
何とかケースを修理するか、上述の回路でr1=r2とした回路をマザーボードに繋いでやればアナログスティックをオフ出来るかも。
⇒間違えてr1=r2=r3=r4=10kΩにしちゃったけどオフになってるっぽい(本当は5kΩがよい)。
デジタルポテンショメータがあればアナログスティックの外部制御が出来るな。
PSPならソフト的に出来るかもだけど。

最悪スティックをオフにすればよいので、ケースを何とかきっちり閉められないか考えることにしよう。
ジャジャガッチ | 電子工作 | 21:50 | comments(0) | trackbacks(0) |

歪み率算出プログラム

先週から自転車通勤を始めた。
車が一台しかないので、昼間妻が車で出られるように。
あと健康のため。
車の運転が好きでないこともある。

会社まで3kmほどなのでそれほど大変ではない。
今の時期は気温もちょうど良く、快適な通勤だ。
渋滞も関係ないし。
冬になって自転車通勤する元気があるかが心配だ。

しばらく自転車に乗ってなかったから忘れてたけど、近所のコンビニとか行くのにめちゃめちゃ便利だね。
わざわざ新しい自転車を購入したので頑張って通勤します。

Fig. My自転車。かごがない方がかっこいいけど実用重視。下は砂利しきかけの防草シート。

///////////////////////////////
前回予告した通り、歪み率を算出するプログラムを紹介する。
時刻と電圧が記述されたファイルを入力として歪み率を計算する。
フーリエ変換はFFTWライブラリを使用した。シミュレーション開始直後は値が不安定なことがあるので最初の方は読み捨てている。
 
#include <stdio.h>
#include <stdlib.h>
#include <fftw3.h>
#include <math.h>
#define PI 3.14159265358979323846

int main(int argc , char **argv)
{
	int Nol = 0;//入力データ数
	double f = atof(argv[2]);//入力信号の周波数
	double S = atof(argv[3]);//サンプリング周波数 データから算出してもいいがとりあえず手入力
	FILE *fp = fopen(argv[1] , "r");
	double t , v;
	while(fscanf(fp , "%lf %lf¥n" , &t , &v)!=EOF)
	{
		Nol++;
	}
	rewind(fp);
	double *data = new double[Nol];
	for(int i=0;i<Nol;i++)
	{
		fscanf(fp , "%lf %lf¥n" , &t , &v);
		data[i] = v;
	}
	fclose(fp);

	int N = (int)(S/f+0.5);//入力信号の最短周期
	int M = Nol / N - 2;//M周期使ってfft

	fftw_complex *data1 , *data2;
	data1 = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*N*M);
	data2 = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*N*M);

	fp = fopen("data.txt" , "w");

	for(int i=N,n=0;n<N*M;i++,n++)//シミュレーション開始直後の値(~N)は捨てる
	{
		data1[n][0] = data[i];
		data1[n][1] = 0;
		fprintf(fp , "%e¥n" , data[i]);
	}
	fclose(fp);

	fftw_plan p = fftw_plan_dft_1d(N*M , data1 , data2 , FFTW_FORWARD , FFTW_ESTIMATE);
	fftw_execute(p);


	double sum = 0;
	for(int i=2*M;i<N*M/2+1;i+=M)//i=Mが入力信号と同じ周波数。i=M,2M,3M...を取り出す 
	{
		sum += data2[i][0]*data2[i][0]+data2[i][1]*data2[i][1];
	}
	printf("THD=%e¥n" , sqrt(sum) /
	sqrt(data2[M][0]*data2[M][0]+data2[M][1]*data2[M][1]));

 	delete[] data;
 	fftw_free(data1);
 	fftw_free(data2);

	return 0;
}
ジャジャガッチ | 電子工作 | 03:00 | comments(0) | trackbacks(0) |

LTSpiceによる歪み率の算出

今日は友人宅の庭の管理の手伝いに行ってきた。
先週芝刈り鋏を買ってきたので、練習がてら芝を刈ってみた。
均一な長さにそろえるのは難しいが、何もしないよりはましか。
近所の方がハンディ芝刈り(バリカンみたいなやつ)を使われていて、欲しくなった。

息子はドッグランの中で楽しそうに草抜いとりました。
今は外でも結構スタスタ歩きます。

/////////////////////////////
アンプの重要な特性のひとつに歪み率がある。
これは入力信号の形をいかに忠実に出力できているかを示す量だ。
調べてみるとLTSpiceでも歪み率の算出が出来るとのことなのでやってみた。

調べてみると非常に簡単で、例えば入力信号を1kHzとすれば
.Four 1k v(vout) v(vin)
をオプションで追加してシミュレーションしてやればView=>Spice Error Logで歪み率が確認できる。

ただし、出来るだけ正確な歪み率を得るためには注意が必要だ。
それはサンプリング周波数は入力信号の周波数の整数倍にする必要があるということだ。
歪み率は出力信号を離散フーリエ変換して算出するため、この条件を満たさないと区間の端と端で信号が滑らかにつながらず、アーチファクトが発生してしまうからだ。

LTSpiceではMaximum TimeStepを設定できる。これの逆数がサンプリング周波数だ。
ただしデフォルトではデータ量削減のためか、Maximum TimeStepが設定値からずらされてしまうようなので、オプションとして
.option plotwinsize=0
を追加する必要がある。
色々条件を振ったり、自作アンプの歪み率を得るためには自作プログラムで歪み率算出が出来れば便利だと思うので、次回は歪み率計算プログラムを紹介する予定です。
ジャジャガッチ | 電子工作 | 23:49 | comments(0) | trackbacks(0) |
1/10PAGES | >> |

06
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH