![見出し画像](https://assets.st-note.com/production/uploads/images/143490175/rectangle_large_type_2_57e3788ad688d34951048100410de1a7.jpeg?width=1200)
Tang Nano 9K で Apple II を再現する(11)キーボード
第七章 On-Board I/O
USB シリアルをパラレル信号に変換する Arduino プログラム A2Keyboard.ino を作成します。
Arduino の D2 - D8 ピンに Apple II Keyboard B1 - B7 を、D9 ピンに STROBE 信号を割り当てました。
リセットキーは、Tang Nano の S2 (Pin 3) を割り当てました。
// Serial to Apple II keyboard
#define b1_pin 2
#define b2_pin 3
#define b3_pin 4
#define b4_pin 5
#define b5_pin 6
#define b6_pin 7
#define b7_pin 8
#define strobe_pin 9
#define strobe_width 1 // ms
#define delay_key 100 // ms
void setup() {
Serial.begin(9600);
pinMode(b1_pin, OUTPUT);
pinMode(b2_pin, OUTPUT);
pinMode(b3_pin, OUTPUT);
pinMode(b4_pin, OUTPUT);
pinMode(b5_pin, OUTPUT);
pinMode(b6_pin, OUTPUT);
pinMode(b7_pin, OUTPUT);
pinMode(strobe_pin, OUTPUT);
digitalWrite(strobe_pin, LOW);
}
void loop() {
byte key;
if(Serial.available() > 0) {
key = Serial.read();
digitalWrite(b1_pin, key & 0x01 ? HIGH : LOW);
digitalWrite(b2_pin, key & 0x02 ? HIGH : LOW);
digitalWrite(b3_pin, key & 0x04 ? HIGH : LOW);
digitalWrite(b4_pin, key & 0x08 ? HIGH : LOW);
digitalWrite(b5_pin, key & 0x10 ? HIGH : LOW);
digitalWrite(b6_pin, key & 0x20 ? HIGH : LOW);
digitalWrite(b7_pin, key & 0x40 ? HIGH : LOW);
digitalWrite(strobe_pin, HIGH);
Serial.write(key);
delayMicroseconds(strobe_width);
digitalWrite(strobe_pin, LOW);
}
delay(delay_key);
}
以下の回路図に示すように、Arduino の GPIO 出力 5V を、SN74LVC245AN を介して 3.3V に変換し Tang Nano 9K に接続しました。
![](https://assets.st-note.com/img/1718019931859-N3i9MTzsvY.png?width=1200)