SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

バイオリズム(1.4用)

IchigoJam BASICの新ファームウェア、Ver 1.4が正式リリースされました。
www.b-incorp.com
IchigoJamの公式サイトからファイルをダウンロードできます。
ichigojam.net
β版が公開されていた時に「バイオリズム」のプログラムを作ったのですが、あらためて記事にまとめます。
f:id:shiro0922:20191207192547p:plain
誕生日(年月日)と、現在の年月を入力すると、今月のバイオリズムを描きます。
(P=身体〈23日周期〉、S=感情〈28日周期〉、I=知性〈33日周期〉)
IchigoJamでこんなことができるのも楽しいですね(^_^)

プログラム

1.4の新機能、三角関数と簡易グラフィックを使っています。
コード容量は1Kバイトをほぼ使い切りました。

10 CLS:?"*** Biorhythm ***"
20 CLV
30 ?:?"---Birthday"
40 ?"Year=";:INPUT B
50 ?"Month=";:INPUT C
60 ?"Day=";:INPUT D
70 ?:?"---Now"
80 ?"Year=";:INPUT Y
90 ?"Month=";:INPUT M
100 IF C<=2 B=B-1:C=C+12
110 Z=Y:N=M
120 IF M<=2 Z=Z-1:N=N+12
130 A=365*(Z-B)
140 A=A+Z/4-B/4
150 A=A-Z/100+B/100
160 A=A+Z/400-B/400
170 A=A+306*(N+1)/10-306*(C+1)/10
180 A=A+1-D
190 IF A<0 A=A-21252
200 CLS
210 ?"Biorhythm (";Y;"-";M;")"
220 FOR J=0 TO 62 STEP 2
230 DRAW J,23
240 NEXT
250 Q=-SIN(360*(A%23)/23)/16+23
260 FOR J=1 TO 30
270 P=-SIN(360*(J+A%23)/23)/16+23
280 DRAW J*2-2,Q,J*2,P
290 Q=P
300 NEXT
310 T=-SIN(360*(A%28)/28)/16+23
320 FOR J=1 TO 30
330 S=-SIN(360*(J+A%28)/28)/16+23
340 DRAW J*2-2,T,J*2,S
350 T=S
360 NEXT
370 K=-SIN(360*(A%33)/33)/16+23
380 FOR J=1 TO 30
390 I=-SIN(360*(J+A%33)/33)/16+23
400 DRAW J*2-2,K,J*2,I
410 K=I
420 NEXT
430 LC 31,P/2:?"P";
440 LC 31,S/2:?"S";
450 LC 31,I/2:?"I";
460 LC 0,12:?1
470 LC 9,12:?10
480 LC 19,12:?20
490 LC 29,12:?30
500 LC 0,1

誕生日から現在までの日数は、西暦1年1月1日からの日数を計算するフェアフィールドの公式

365y+[y/4]-[y/100]+[y/400]+[306(m+1)/10]+d-428
(y=年、m=月、d=日。[]は小数点以下切り捨て。ただし1月・2月は前年の13月・14月とする)
を差し引きに変形して計算しています。
ただし、日数(プログラムでは変数A)が32767日(約89歳)を越えると、計算がおかしくなります。プログラム容量が一杯なので、そこまで対策していません。
※対策しました(190行)。これで148歳までのバイオリズムが描けます。
f:id:shiro0922:20191208122411p:plain