#define KCL 1 #define KDA 0 #define CLK 3 #define DAT 4 #define WAIT 20 void setup() { pinMode(KCL, OUTPUT); pinMode(KDA, INPUT); pinMode(CLK, OUTPUT); pinMode(DAT, OUTPUT); digitalWrite(KCL, LOW); digitalWrite(CLK, HIGH); delay(300); } void loop() { uint8_t code; char buff[10]; code = getKeycode(); if(code != 0xFF) { sprintf(buff, "%02X", code); sendStr(buff); } delay(100); } uint8_t getKeycode() { uint8_t val = 0; digitalWrite(KCL, HIGH); //スタートビット delay(WAIT); digitalWrite(KCL, LOW); delay(WAIT); for(int i=0; i<8; i++) { digitalWrite(KCL, HIGH); delay(WAIT); digitalWrite(KCL, LOW); val |= digitalRead(KDA) << i; delay(WAIT); } return val; } void sendStr(uint8_t* str) { static int count = 0; uint8_t* p; p = str; while(*p != 0) { sendChar(*(p++)); if(++count > 15) { sendChar(0x80); //カーソルを先頭へ count = 0; } } } void sendChar(uint8_t chr) { for(int n = 0; n < 8; n++) { digitalWrite(DAT, (chr >> n) & 1); delayMicroseconds(WAIT); digitalWrite(CLK, LOW); delayMicroseconds(WAIT); digitalWrite(CLK, HIGH); } }