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

概要

また、fa.spiやLuaSPIが実装されていない時期に、Arduinoと通信する手段として考案したソフトSPI実装です。
PWMもPIO直接叩けば早くなったし、こっちもやる価値あるんじゃね?ということで、
出来る限り操作回数が少なくなるよう調整して作ってみました。103.4[Byte/sec]と約3倍の速度になりました。



ライセンス

スクリプト

function send_spi(DATA)
	fa.pio(PIO_MODE,1)
 
	for i=0,8 do
		if bit32.btest(DATA,1) then
			fa.pio(PIO_MODE,2)
			fa.pio(PIO_MODE,18)
		else
			fa.pio(PIO_MODE,0)
			fa.pio(PIO_MODE,16)
		end

	DATA = bit32.rshift (DATA, 1)
	end
 
	fa.pio(PIO_MODE,0)
end

print("HTTP/1.1 200 OK\n\n")
print("<HTML>")

if not arg[1] then
	s=""
else
	s = arg[1]
end

print(s)
ls = string.len(s) - 1 --なぜかarg[1]の末端には0x0Aがくっつくのでそれ削除
print("<br>")

for i=1,ls do
	code = string.byte(s, i)
	send_spi(code)
	print(code)
end

print("OK")
print("</HTML>")

Arduino側コード

#include <SoftwareSerial.h>
SoftwareSerial ss(7, 8); // RX, TX

void setup()
{
  #define MOSI 11
  #define MISO 12
  #define CS   4
  
  Serial.begin(115200);
  
  pinMode(3,INPUT); //LED_R
  pinMode(4,INPUT); //CS
  pinMode(5,INPUT); //LED_G
  pinMode(6,INPUT); //LED_B

//Arduino Uno
  pinMode(11,INPUT); //MOSI(SW1);
  pinMode(13,INPUT); //SCK

// DO NOT TOUCH!!  
// DO NOT TOUCH!!  
  pinMode(12,INPUT); //MISO(絶対入力!);
// DO NOT TOUCH!!  
// DO NOT TOUCH!!  

  ss.begin(9600);
}

void loop()
{
  while(digitalRead(MOSI) != LOW);
  while(digitalRead(MOSI) != HIGH);
  while(digitalRead(MOSI) != LOW);
  
  byte dat = 0;
  for(int i=0;i<8;i++)
  {
    dat >>= 1;
    while(digitalRead(CS) != HIGH);
    
    if(digitalRead(MISO) == HIGH)
      dat |= 0x80;
    
    while(digitalRead(CS) != LOW);  
  }
  ss.write(dat);
  
 // Serial.print("DAT:");
 // Serial.println(dat,HEX);
}

コメントをかく


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

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

Menu

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

アクセス解析中

忍者アナライズ

GoogleAnalytics

編集にはIDが必要です