はじめに
N-PrologにWiringPiの組み込み述語を用意しました。ラズパイ専用です。
インストール
ラズパイでインストールするときには "make raspi" としてください。これによりWiringPiの述語が組み込まれます。以前はこれをCラッパを使ってコンパイルするということをやっていました。めんどくさいので単純な方法にしました。
組み込み述語
N-Prolog <==================================> C
wiringpi_spi_setup(ch speed) <===> wiringPiSPISetup (SPI_CH, SPI_SPEED)
wiringpi_setup_gpio <===> wiringPiSetupGpio()
pin_mode(n, 'output) <====> pinMode(n, OUTPUT) or 'input -> INPUT 'pwm-output -> PWM_OUTPUT
digital_write(n, v) <===> digitalWrite(n, v)
digital_write_byte(v) <===> digitalWriteByte(value)
digital_read(pin) <===> digitalRead(pin)
delay(howlong) <===> void delay(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チカの例
setup :-
not(flag),wiringpi_setup_gpio,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). のように実行します。10回LEDが点滅します。
まだテストが不十分です。どなたかお試しいただければ幸いです。
自立型の知的推論をするロボット制作に使えると思います。
サーボを動かす例
setup :-
not(flag),wiringpi_setup_gpio,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
Github
ここにおいてあります。
https://github.com/sasagawa888/nprolog