Connect Arduino digital I/O to 11-pin interface.
Arduino | Pocket computer |
---|---|
GND | 3 GND |
D9 | 4 BUSY |
D8 | 5 DOUT |
D7 | 6 XIN |
D6 | 7 XOUT |
D5 | 8 DIN |
D4 | 9 ACK |
#include <Arduino.h> | |
#include <HardwareSerial.h> | |
#define BUSY D9 | |
#define DOUT D8 | |
#define XIN D7 | |
#define XOUT D6 | |
#define DIN D5 | |
#define ACK D4 | |
#define EX1 D3 | |
#define EX2 D2 | |
String recieveData(bool clock) | |
{ | |
String ret = ""; | |
uint32_t timeout = millis(); | |
byte r = 0; | |
int readCount = 0; | |
while (1) | |
{ | |
// デバイスレディ | |
digitalWrite(ACK, clock); | |
// クロックを待つ | |
while (!digitalRead(BUSY)) | |
{ | |
if (millis() - timeout > 10) | |
{ | |
digitalWrite(ACK, LOW); | |
return ret + "\n"; | |
} | |
} | |
// データ受信 | |
r += digitalRead(DOUT) << readCount; | |
digitalWrite(ACK, !clock); | |
if (++readCount == 8) | |
{ | |
if (r == 0xf0) | |
r = '0'; | |
if (!clock && r != 0xf && r != 0xe) | |
{ | |
ret += (char)r; | |
} | |
readCount = r = 0; | |
} | |
timeout = millis(); | |
// クロックを待つ | |
while (digitalRead(BUSY)) | |
; | |
} | |
} | |
void setup() | |
{ | |
// ピンIO | |
pinMode(BUSY, INPUT); | |
pinMode(DOUT, INPUT); | |
pinMode(XOUT, INPUT); | |
pinMode(XIN, OUTPUT); | |
pinMode(XOUT, INPUT); | |
pinMode(DIN, OUTPUT); | |
pinMode(ACK, OUTPUT); | |
pinMode(EX1, OUTPUT); | |
pinMode(EX2, OUTPUT); | |
// 初期化 | |
digitalWrite(XIN, LOW); | |
digitalWrite(DIN, LOW); | |
digitalWrite(ACK, LOW); | |
digitalWrite(EX1, LOW); | |
digitalWrite(EX2, LOW); | |
Serial.begin(115200); | |
} | |
void loop() | |
{ | |
bool xout = digitalRead(XOUT), busy = digitalRead(BUSY); | |
if (xout) | |
recieveData(HIGH); | |
if (busy && !xout) | |
{ | |
String data = recieveData(LOW); | |
Serial.print(data); | |
} | |
} |