CommonLisp에서 RaspberryPi 전자 공작 ~GPIO 입력편~
소개
지난번에 계속해서 이번에는 GPIO 입력을 해보고 싶습니다.
이번에도 SBCL + Quicklisp를 사용합니다.
패키징
마지막과 똑같은
packages.lisp;; cffiをQuicklispでロード
(ql:quickload "cffi")
;; cl-cffiパッケージを定義
(defpackage :cl-cffi
(:use :common-lisp :cffi))
API 래퍼 작성
마지막으로 만든 것에 필요한 함수를 더해갑니다.
다음 두 가지 추가.
· pullUpDnControl
단자에 아무것도 연결되어 있지 않은 경우의 상태를 설정하는데 사용.
3.3V의 경우는 "2", 0V의 경우는 "1"로 설정한다.
·digitalRead
GPIO 단자의 상태를 읽습니다.
버튼을 누르면 "0", 놓으면 "1"이 된다.
libwiringPi.lisp(define-foreign-library libwiringPi
(:unix "libwiringPi.so"))
(use-foreign-library libwiringPi)
;; wiringPi初期化
(defcfun "wiringPiSetupGpio" :int)
;; GPIOピンのモード設定
(defcfun "pinMode" :void (pin :int) (mode :int))
;; GPIOピンの出力制御
(defcfun "digitalWrite" :void (pin :int) (value :int))
;; 待機処理
(defcfun "delay" :void (howlong :uint))
;; 端子に何も接続されていない場合の状態を設定
(defcfun "pullUpDnControl" :void (pin :int) (pud :int))
;; GPIO端子の状態を読み込む
(defcfun "digitalRead" :int (pin :int))
GPIO 입력 프로그램 본체 작성
프로그램 본체는 다음과 같이 되었습니다.
pullUpDnControl 을 추가한 것과 무한 루프내를 조금 줄인 것뿐입니다.
input.lisp;; パッケージをロード
(load "packages.lisp" :external-format :utf-8)
;; 定義したパッケージに入る
(in-package :cl-cffi)
;; ラッパーAPIをロード
(load "libwiringPi.lisp" :external-format :utf-8)
;; GPIO17(11ピン)を「+pin+」の名前で定義
(defconstant +pin+ 17)
(defun digi-input ()
;; GPIO初期化
(wiringPiSetupGpio)
;; GPIO17を入力モード(0)に設定
(pinMode +pin+ 0)
;; 端子に何も接続されていない場合の状態を設定
(pullUpDnControl +pin+ 2)
;; 無限ループ:"Ctrl-c"でループを抜ける
(loop
(if (equal (digitalRead +pin+) 0)
(format t "Switch ON~%")
(format t "Switch OFF~%"))
(delay 500)))
;; 実行!
(digi-input)
회로도
회로도는 다음과 같습니다.
사용한 것은, 「택트 스위치」와 「1kΩ 저항(차흑 적금)」입니다.
실행
SBCL을 시작하고 다음 명령으로 실행.
(load "input.lisp" :external-format :utf-8)
택트 스위치를 누르지 않으면 콘솔에 "Switch OFF"가 표시되고, 누르면 "Switch ON"으로 변경됩니다.
이하 실행중인 모습
마지막으로
GPIO 표준 입력도 무사? 할 수 있었습니다.
이것으로 입출력을 할 수 있게 되었으므로, 이것들을 조합해 나가면 여러가지 재미있을 수 있을 것 같네요.
이번 소스 코드도 Github에서 공개하고 있습니다.
· Github
Reference
이 문제에 관하여(CommonLisp에서 RaspberryPi 전자 공작 ~GPIO 입력편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/d5385c6aa268afcdeb99
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
마지막과 똑같은
packages.lisp
;; cffiをQuicklispでロード
(ql:quickload "cffi")
;; cl-cffiパッケージを定義
(defpackage :cl-cffi
(:use :common-lisp :cffi))
API 래퍼 작성
마지막으로 만든 것에 필요한 함수를 더해갑니다.
다음 두 가지 추가.
· pullUpDnControl
단자에 아무것도 연결되어 있지 않은 경우의 상태를 설정하는데 사용.
3.3V의 경우는 "2", 0V의 경우는 "1"로 설정한다.
·digitalRead
GPIO 단자의 상태를 읽습니다.
버튼을 누르면 "0", 놓으면 "1"이 된다.
libwiringPi.lisp(define-foreign-library libwiringPi
(:unix "libwiringPi.so"))
(use-foreign-library libwiringPi)
;; wiringPi初期化
(defcfun "wiringPiSetupGpio" :int)
;; GPIOピンのモード設定
(defcfun "pinMode" :void (pin :int) (mode :int))
;; GPIOピンの出力制御
(defcfun "digitalWrite" :void (pin :int) (value :int))
;; 待機処理
(defcfun "delay" :void (howlong :uint))
;; 端子に何も接続されていない場合の状態を設定
(defcfun "pullUpDnControl" :void (pin :int) (pud :int))
;; GPIO端子の状態を読み込む
(defcfun "digitalRead" :int (pin :int))
GPIO 입력 프로그램 본체 작성
프로그램 본체는 다음과 같이 되었습니다.
pullUpDnControl 을 추가한 것과 무한 루프내를 조금 줄인 것뿐입니다.
input.lisp;; パッケージをロード
(load "packages.lisp" :external-format :utf-8)
;; 定義したパッケージに入る
(in-package :cl-cffi)
;; ラッパーAPIをロード
(load "libwiringPi.lisp" :external-format :utf-8)
;; GPIO17(11ピン)を「+pin+」の名前で定義
(defconstant +pin+ 17)
(defun digi-input ()
;; GPIO初期化
(wiringPiSetupGpio)
;; GPIO17を入力モード(0)に設定
(pinMode +pin+ 0)
;; 端子に何も接続されていない場合の状態を設定
(pullUpDnControl +pin+ 2)
;; 無限ループ:"Ctrl-c"でループを抜ける
(loop
(if (equal (digitalRead +pin+) 0)
(format t "Switch ON~%")
(format t "Switch OFF~%"))
(delay 500)))
;; 実行!
(digi-input)
회로도
회로도는 다음과 같습니다.
사용한 것은, 「택트 스위치」와 「1kΩ 저항(차흑 적금)」입니다.
실행
SBCL을 시작하고 다음 명령으로 실행.
(load "input.lisp" :external-format :utf-8)
택트 스위치를 누르지 않으면 콘솔에 "Switch OFF"가 표시되고, 누르면 "Switch ON"으로 변경됩니다.
이하 실행중인 모습
마지막으로
GPIO 표준 입력도 무사? 할 수 있었습니다.
이것으로 입출력을 할 수 있게 되었으므로, 이것들을 조합해 나가면 여러가지 재미있을 수 있을 것 같네요.
이번 소스 코드도 Github에서 공개하고 있습니다.
· Github
Reference
이 문제에 관하여(CommonLisp에서 RaspberryPi 전자 공작 ~GPIO 입력편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/d5385c6aa268afcdeb99
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(define-foreign-library libwiringPi
(:unix "libwiringPi.so"))
(use-foreign-library libwiringPi)
;; wiringPi初期化
(defcfun "wiringPiSetupGpio" :int)
;; GPIOピンのモード設定
(defcfun "pinMode" :void (pin :int) (mode :int))
;; GPIOピンの出力制御
(defcfun "digitalWrite" :void (pin :int) (value :int))
;; 待機処理
(defcfun "delay" :void (howlong :uint))
;; 端子に何も接続されていない場合の状態を設定
(defcfun "pullUpDnControl" :void (pin :int) (pud :int))
;; GPIO端子の状態を読み込む
(defcfun "digitalRead" :int (pin :int))
프로그램 본체는 다음과 같이 되었습니다.
pullUpDnControl 을 추가한 것과 무한 루프내를 조금 줄인 것뿐입니다.
input.lisp
;; パッケージをロード
(load "packages.lisp" :external-format :utf-8)
;; 定義したパッケージに入る
(in-package :cl-cffi)
;; ラッパーAPIをロード
(load "libwiringPi.lisp" :external-format :utf-8)
;; GPIO17(11ピン)を「+pin+」の名前で定義
(defconstant +pin+ 17)
(defun digi-input ()
;; GPIO初期化
(wiringPiSetupGpio)
;; GPIO17を入力モード(0)に設定
(pinMode +pin+ 0)
;; 端子に何も接続されていない場合の状態を設定
(pullUpDnControl +pin+ 2)
;; 無限ループ:"Ctrl-c"でループを抜ける
(loop
(if (equal (digitalRead +pin+) 0)
(format t "Switch ON~%")
(format t "Switch OFF~%"))
(delay 500)))
;; 実行!
(digi-input)
회로도
회로도는 다음과 같습니다.
사용한 것은, 「택트 스위치」와 「1kΩ 저항(차흑 적금)」입니다.
실행
SBCL을 시작하고 다음 명령으로 실행.
(load "input.lisp" :external-format :utf-8)
택트 스위치를 누르지 않으면 콘솔에 "Switch OFF"가 표시되고, 누르면 "Switch ON"으로 변경됩니다.
이하 실행중인 모습
마지막으로
GPIO 표준 입력도 무사? 할 수 있었습니다.
이것으로 입출력을 할 수 있게 되었으므로, 이것들을 조합해 나가면 여러가지 재미있을 수 있을 것 같네요.
이번 소스 코드도 Github에서 공개하고 있습니다.
· Github
Reference
이 문제에 관하여(CommonLisp에서 RaspberryPi 전자 공작 ~GPIO 입력편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/d5385c6aa268afcdeb99
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
SBCL을 시작하고 다음 명령으로 실행.
(load "input.lisp" :external-format :utf-8)
택트 스위치를 누르지 않으면 콘솔에 "Switch OFF"가 표시되고, 누르면 "Switch ON"으로 변경됩니다.
이하 실행중인 모습
마지막으로
GPIO 표준 입력도 무사? 할 수 있었습니다.
이것으로 입출력을 할 수 있게 되었으므로, 이것들을 조합해 나가면 여러가지 재미있을 수 있을 것 같네요.
이번 소스 코드도 Github에서 공개하고 있습니다.
· Github
Reference
이 문제에 관하여(CommonLisp에서 RaspberryPi 전자 공작 ~GPIO 입력편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/d5385c6aa268afcdeb99
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(CommonLisp에서 RaspberryPi 전자 공작 ~GPIO 입력편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fireflower0/items/d5385c6aa268afcdeb99텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)