東芝から発売されているFlashAirを用いた開発を行う人々向けのまとめwikiです。※本wikiは東芝及びフィックスターズ、キオクシアとは何の関係もありません。お問合わせは管理者へお願いします。

FlashAirのPIOをArduino風に扱う


FlashAirのPIO関数は、入出力の設定と、出力状態を同時に指定する形ですが、
いかんせん1bit単位でいじるのが面倒くさい、ということで、
Arduinoでお馴染みdigitalWrite、digiralRead、pinModeで扱えるようにしてみました。

s, indata = pinMode(port,mode)

入出力設定
OUTPUT(1)で出力
INPUT(1以外)で入力に設定。

sは制御可否(pio関数の戻り値参照)
indataがくっついているのは、pioの返却値をそのまま返しているため。

s, indata = digitalWrite(port,dat)

出力。
HIGH(0以外)で3,3V
LOW(0)で0Vを出力。

sは制御可否(pio関数の戻り値参照)
indataがくっついているのは、pioの返却値をそのまま返しているため。

dat , s = digitalRead(port)

指定したピンの入力状態をHIGH(1)もしくはLOW(0)で返却する。
sは制御可否(pio関数の戻り値参照)

ダウンロード

ダウンロードは以下のURL
https://github.com/gpsnmeajp/FlashToolsLib
https://sites.google.com/site/gpsnmeajp/electricme...

あるいは以下のコードを「pioduino.lua」としてファイルに保存する
PIO_MODE = 0x00   --ピン入出力変数(触らないこと)
PIO_DATA  = 0x00   --ピン状態変数(触らないこと)

HIGH  = 0x1 --定数
LOW  = 0x0 --定数

INPUT  =  0x0 --定数
OUTPUT  =  0x1 --定数

function delay(t)
	sleep(t)
end

function digitalWrite(port,dat)
	local mask = bit32.lshift(1,port)
	local nmask = bit32.bnot (mask)

	if(dat == LOW) then
		PIO_DATA = bit32.band(PIO_DATA, nmask)
	else
		PIO_DATA = bit32.bor(PIO_DATA, mask)	
	end

	return fa.pio(PIO_MODE,PIO_DATA)
end

function digitalRead(port)
	local PIO_STATUS = 0
	local mask = bit32.lshift(1,port)
	
	PIO_STATUS, PIO_INFO = fa.pio(PIO_MODE, PIO_DATA)
	
	if(bit32.btest (PIO_INFO,mask)) then
		return HIGH, PIO_STATUS
	end
	
	return LOW, PIO_STATUS
--(IF文や他の関数に直接突っ込めるよう、第一引数にポート状態を置いてある)
end

function pinMode(port,mode)
	local mask = bit32.lshift(1,port)
	local nmask = bit32.bnot (mask)

	if (mode == OUTPUT) then
		PIO_MODE = bit32.bor(PIO_MODE, mask)	
	else
		PIO_MODE = bit32.band(PIO_MODE, nmask)
	end

	return fa.pio(PIO_MODE,PIO_DATA)
end

dW = digitalWrite
dR = digitalRead
pM = pinMode

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

スマートフォンの方は画面下部よりPC版に切り替えることをおすすめします

アクセス解析中

忍者アナライズ

GoogleAnalytics

編集にはIDが必要です