Skip to content

Instantly share code, notes, and snippets.

@plageoj
Created December 10, 2019 06:11
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save plageoj/7ee3254a429d384c1adb4d1b4601c33d to your computer and use it in GitHub Desktop.
Save plageoj/7ee3254a429d384c1adb4d1b4601c33d to your computer and use it in GitHub Desktop.
Turn an Arduino into a CE-126P printer interface decoder

Pin connection

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);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment