Edited at

O-PrologでLチカ

More than 1 year has passed since last update.

ArcSoft_画像17.PNG


はじめに

自作のProlog処理系(O-Prolog)のラズパイバージョンにWiringPIを操作する組込み述語を追加しました。LチカなどがPrologからお手軽にできます。仕様の覚書です。


組み込み関数

当初はProlog組込述語として提供していたのですが、コンパイラを作り、Cラッパを追加しましたので、現在ではPrologコードとして提供しています。wiringpi.plがそのソースです。これをコンパイルしてwiringpi.oを生成し、これをconsultしてお使いください。(2018年3月23日追記)

O-Prolog                                    C言語

wiringpi_spi_setup(ch,speed) <===>  wiringPiSPISetup (SPI_CH, SPI_SPEED)
wiringpi_setup_gpio(X) <===> X=wiringPiSetupGpio()
pin-mode(N,output) <====> pinMode(N, OUTPUT) or input -> INPUT or pwm_output ->PWM-OUTPUT
digital_write(n,v) <===> digitalWrite(n, v);
digital_write_byte(value) <===> digitalWriteByte(value)
digital_read(pin,X) <===> X=digitalRead(pin)
delay(howlong) <===> void delay(unsigned int howLong)
delay_microseconds(howlong) <===> void delayMicroseconds(unsigned int howLong)
pull_up_dn_control(pin, pud) <===> pullUpDnControl(pin,pud)
pwm_set_mode(pwm_mode_ms) <===> pwmSetMode(PWM_MODE_MS) or pwm_mode_bal -> PWM_MODE_BAL
pwm_set_clock(n) <===> pwmSetClock(n);
pwm_set_range(n) <===> pwmSetRange(n);
pwm_write(pin,value) <===> pwmWrite(pin , value)


Lチカ Prologコード

wiringPiのセットアップをするにはroot権限が必要です。次のようにして起動してください。

sudo ./opl

コード

setup :-

not(flag),wiringpi_setup_gpio(X),assert(flag),
pin_mode(5,output).

test(0).
test(N) :-
digital_write(5,1),
delay(1000),
digital_write(5,0),
delay(1000),
N1 is N - 1,
test(N1).

実行

プロンプトから次のように入力してください。

setup.

test(10).


サーボを動かす例

setup :-

not(flag),wiringpi_setup_gpio(X),assert(flag),
pin_mode(18,pwm_output),
pwm_set_mode(pwm_mode_ms),
pwm_set_clock(400),
pwm_set_range(1024).

test1(N) :-
pwm_write(18,N).

次のように実行します。

setup.

test1(24).
test1(115).

サーボとPWMについては下記の記事がわかりやすいです。

http://qiita.com/locatw/items/f15fd9df40153bbb4d27

wiringPi参考ページ

http://nya03n.hatenablog.com/entry/2015/07/05/114301


実行ファイル

以下のページにて無償提供しております。

なお、個人的な楽しみのための非商用利用に限っております。また、本ソフトウェアを使用したことによる損害には責任を負いません。自己責任でお願いします。

http://eisl.kan-be.com/library/oprolog.html


簡易エディタ

ラズパイで実験をするのに、簡易なCUIエディタを装備しました。

http://qiita.com/sym_num/items/4af619de02191c95e3b9


ソースコード

電子書籍の付録として販売しております。

https://www.amazon.co.jp/dp/B01M3TVQ5M

ラズパイバージョンをコンパイルするにはUbuntu版を解凍した後に次のようにしてmakeしてください。function.c のinitbuiltin関数にて組み込み関数の定義をしています。wiringPi関係はコメントアウトしてあります。このコメントを外してからmakeをしますとwiringPiの組込み述語が機能するようになります。

make -f rasmake