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