日経ソフトウエア2018年1月号


24日発売の雑誌「日経ソフトウエア2018年1月号」で記事を2件ほど書かせて頂きました。
・特集の記事、オンライン版 将棋対局ソフト
・ラズパイの連載記事

▲将棋対局ソフトをiPhoneで実行中の様子です。
↓対局中の様子を動画にしてみました。
https://plus.google.com/u/0/photos/photo/113110699367375549701/6491771762127414994?icm=false&iso=true

▲ラズパイZero Wを使ったロボットです。

▲使用したラズパイZero Wです。

LEGO MINDSTORMS用自作センサーのEV3対応

LEGO MINDSTORMS用自作センサーをEV3に対応させました。
詳しくはこちらをご覧ください。
https://sites.google.com/site/yugenkaisyanico/nicosensor_ev3

LEGO MINDSTORMS用自作センサーとしては今回初めてArduinoを使ってみました。それ以前はAVR Studioでした。
Arduino対応基板にモジュラージャックをつないで、端子をプルアップするだけで作ることができます。

▲自前の関数もArduino向けに書き直しました。
I2Cの関数は完全にオリジナルで、ソフトウェアで制御しています。信号の上げ下げ処理で割込みを使っていないのでタイミング的に間に合うのか心配でしたが、問題ないみたいです。

▲画面の右下に注目してください。
EV3ソフトウェアでは超音波センサとして認識されています。
I2Cは転送速度が遅いのか、EV3以降のセンサーではUARTに切り替わっています。

PasocomMini用の自作ファイルビューア


▲PasocomMini用のファイルビューアを作ってみました。
こちらで公開中です。
https://sites.google.com/site/yugenkaisyanico/pcmprogram1
ファイルを実行したり、中身を見たり、コピーしたり、いろいろな操作に使うことができます。
かなり過激なプログラムなので、扱いには注意してください。
実行するプログラムはPRG0に読み込みます。
そのため苦肉の策ですが、ファイルビューアをPRG3で実行するようにしました。
一回終了してから、また実行するには「RUN 3[Enter]」と入力します。

▲ファイルの名前変更。

▲ファイルの削除。

PNGファイル表示。
ちなみにPasocomMiniではSAVEすると、PNGで画像が保存されます。

PasocomMiniとラズパイのテキストファイル送受信






▲PasocomMiniとラズパイ3をつないで、プログラム(テキストファイル)を送信したり、受信できるようにしてみました。
特に名前が無くて、いまのところ「SPI通信プログラム」と呼んでます。

以下がPasocomMini側の通信プログラムです。

'PASOCOM-MINI SPI THUUSHIN PROGRAM BY TAKUYA MATSUBARA
'(MASTER)19PIN MOSI(OUT) --> (SLAVE)37PIN(IN)
'(MASTER)21PIN MISO(IN)  <-- (SLAVE)35PIN(OUT)
'(MASTER)23PIN SCLK(OUT) --> (SLAVE)33PIN(IN)
'(MASTER)24PIN CE0(OUT)  --> (SLAVE)31PIN(IN)
ACLS
DIM BUF%[256]
CLKRATE=4800
TIMING=0
'0:CPOL=0,CPHA=0 : RISING EDGE=SAMPLE,FALLING=RELOAD
'1:CPOL=0,CPHA=1
'2:CPOL=1,CPHA=0
'3:CPOL=1,CPHA=1
SPISTART CLKRATE,TIMING
WHILE 1
 COLOR #RED
 PRINT ""
 PRINT "PASOCOM-MINI SPI THUUSHIN PROGRAM BY TAKUYA MASTUBARA"
 COLOR #WHITE
 INPUT "COMMAND 1:IMPORT/2:EXPORT/3:TEST/4:END>";A
 IF A==1 THEN GOSUB @S2M
 IF A==2 THEN GOSUB @M2S
 IF A==3 THEN GOSUB @TEST
 IF A==4 THEN BREAK
WEND
BUF%[0]=ASC("E")
SPISEND BUF%,1
SPISTOP
END
'----
@TEST
BUF%[0]=ASC("T")
SPISEND BUF%,1
RETURN
'----
@S2M
COLOR #YELLOW
BUF%[0]=ASC("R")
SPISEND BUF%,1
T$=""
EOF=0
WHILE EOF==0
 WAIT 10
 SSIZE=256
 FOR I=0 TO SSIZE-1
  BUF%[I]=0
 NEXT
 SPIRECV BUF%,SSIZE
 FOR I=0 TO SSIZE-1 STEP 2
  C = BUF%[I+0] + (BUF%[I+1] * &H100)
  PRINT CHR$(C);
  T$ = T$+CHR$(C)
 NEXT
 FOR I=0 TO SSIZE-1 STEP 2
  IF (BUF%[I]==0) AND (BUF%[I+1]==0) THEN EOF=1
 NEXT
WEND
PRINT
COLOR #WHITE
INPUT "INPUT SAVE FILE> TXT:";F$
SAVE "TXT:"+F$,T$
RETURN
'-----
@M2S
INPUT "INPUT LOAD FILE> TXT:";F$
BUF%[0]=ASC("W")
SPISEND BUF%,1
WAIT 30
LOAD "TXT:"+F$ OUT T$
COLOR #YELLOW
TOTAL = LEN(T$)*2
PTR=0
WHILE TOTAL>0
 SSIZE = TOTAL
 IF SSIZE>=256 THEN SSIZE=256
 FOR I=0 TO SSIZE-1 STEP 2
  C=ASC(MID$(T$,PTR,1))
  PRINT CHR$(C);
  PTR=PTR+1
  BUF%[I+0] = C AND &HFF
  BUF%[I+1] = (C >> 8) AND &HFF
 NEXT
 SPISEND BUF%,SSIZE
 TOTAL =TOTAL-SSIZE
 WAIT 30
WEND
COLOR #WHITE
RETURN

くわしい説明とラズパイ側のプログラムはこちらで公開中です。
https://sites.google.com/site/yugenkaisyanico/pasocommini