mirror of
https://github.com/option8/RetroConnector.git
synced 2024-06-04 13:29:26 +00:00
working revision 2 of //c board.
tested with //c model a2s4000, ca. 1983.
This commit is contained in:
parent
0e2600c53f
commit
d3eb9f3d01
290
IIc-USB/Arduino/IIc_keyboard/IIc_keyboard.ino
Normal file
290
IIc-USB/Arduino/IIc_keyboard/IIc_keyboard.ino
Normal file
|
@ -0,0 +1,290 @@
|
|||
/* requires keypad library by Mark Stanley, Alexander Brevig from:
|
||||
http://www.arduino.cc/playground/Code/Keypad
|
||||
|
||||
Uses the PJRC Teensy++ 2.0 and Teensyduino libraries, specifically USB HID and Keyboard():
|
||||
http://www.pjrc.com/teensy/teensyduino.html
|
||||
*/
|
||||
|
||||
#include <Keypad.h>
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Declares the matrix rows/cols of the Apple IIe keyboard.
|
||||
|
||||
More information here:
|
||||
http://apple2.info/wiki/index.php?title=Pinouts#Apple_.2F.2Fe_Motherboard_keyboard_connector
|
||||
|
||||
|
||||
*/
|
||||
|
||||
const byte ROWS = 8; // rows
|
||||
const byte COLS = 10; // columns
|
||||
char keys[ROWS][COLS] = {
|
||||
|
||||
|
||||
{ KEY_ESC, KEY_1, KEY_2, KEY_3, KEY_4, KEY_6, KEY_5, KEY_7, KEY_8, KEY_9 },
|
||||
|
||||
{ KEY_TAB, KEY_Q, KEY_W, KEY_E, KEY_R, KEY_Y, KEY_T, KEY_U, KEY_I, KEY_O},
|
||||
|
||||
{ KEY_A, KEY_D, KEY_S, KEY_H, KEY_F, KEY_G, KEY_J, KEY_K, KEY_SEMICOLON, KEY_L},
|
||||
|
||||
{ KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, KEY_N, KEY_M, KEY_COMMA, KEY_PERIOD, KEY_SLASH},
|
||||
|
||||
{ 0, 0, 0, 0, 0, 0, KEY_BACKSLASH, KEY_EQUAL, KEY_0, KEY_MINUS},
|
||||
|
||||
{ 0, 0, 0, 0, 0, 0, KEY_TILDE, KEY_P, KEY_LEFT_BRACE, KEY_RIGHT_BRACE},
|
||||
|
||||
{ 0, 0, 0 , 0, 0, 0, KEY_ENTER, KEY_UP, KEY_SPACE, KEY_QUOTE},
|
||||
|
||||
{ 0, 0, 0, 0, 0, 0, KEY_BACKSPACE, KEY_DOWN, KEY_LEFT, KEY_RIGHT},
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Keyboard matrix
|
||||
|
||||
X0 1 2 3 4 5 6 7 8 9
|
||||
Y0 ESC 1 2 3 4 6 5 7 8 9
|
||||
|
||||
1 TAB Q W E R Y T U I O
|
||||
|
||||
2 A D S H F G J K ; L
|
||||
|
||||
3 Z X C V B N M < > ?
|
||||
|
||||
4 \ + 0 -
|
||||
|
||||
5 ~ P [ ]
|
||||
|
||||
6 RET UP SPC "
|
||||
|
||||
7 DEL DN LT RT
|
||||
|
||||
|
||||
Matrix
|
||||
J9 Teensy
|
||||
|
||||
X0 31 26
|
||||
1 24 4
|
||||
2 22 5
|
||||
3 8 14
|
||||
4 14 17
|
||||
5 6 13
|
||||
6 10 15
|
||||
7 1 3
|
||||
8 4 12
|
||||
9 2 11
|
||||
|
||||
Y0 12 16
|
||||
1 33 25
|
||||
2 18 7
|
||||
3 20 22
|
||||
4 3 2
|
||||
5 5 1
|
||||
6 7 0
|
||||
7 9 27
|
||||
|
||||
NC 13
|
||||
17
|
||||
30
|
||||
|
||||
GND 21
|
||||
|
||||
SFT 34 24
|
||||
CTL 32 23
|
||||
CMD 16 8
|
||||
CMD 26 20
|
||||
CAPS 28 21
|
||||
|
||||
|
||||
J9 pinout
|
||||
1 X7
|
||||
2 X9
|
||||
3 Y4
|
||||
4 X8
|
||||
5 Y5
|
||||
6 X5
|
||||
7 Y6
|
||||
8 X3
|
||||
9 Y7
|
||||
10 X6
|
||||
11 DISK LED (5v)
|
||||
12 Y0
|
||||
13 NC
|
||||
14 X4
|
||||
15 KEYBOARD SW
|
||||
16 CLOSED APPLE
|
||||
17 NC
|
||||
18 Y2
|
||||
19 40/80 COL SWITCH
|
||||
20 Y3
|
||||
21 GROUND ???
|
||||
22 X2
|
||||
23 GROUND ???
|
||||
24 X1
|
||||
25 POWER LED (5v)
|
||||
26 OPEN APPLE
|
||||
27 LED GROUND ???
|
||||
28 CAPS LOCK
|
||||
29 RESET
|
||||
30 NC
|
||||
31 X0
|
||||
32 CONTROL
|
||||
33 Y1
|
||||
34 SHIFT
|
||||
|
||||
|
||||
*/
|
||||
|
||||
byte rowPins[ROWS] = { // Y0 - Y9
|
||||
16,25,7,22,2,1,0,27}; //connect to the row pinouts of the keypad
|
||||
|
||||
byte colPins[COLS] = { // X0 - X7
|
||||
26,4,5,14,17,13,15,3,12,11 }; //connect to the column pinouts of the keypad
|
||||
|
||||
Keypad KPD = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
|
||||
|
||||
|
||||
const int SHIFTPin = 24; // the pin that the shift key is attached to
|
||||
const int CTRLPin = 23; // the pin that the control key is attached to
|
||||
const int APPLEPin1 = 43; // the pin that the open-apple key is attached to
|
||||
const int APPLEPin2 = 44; // the pin that the closed-apple key is attached to
|
||||
// these pins are special in that they are dis/connected to ground, instead of to a row/col
|
||||
|
||||
|
||||
/***
|
||||
|
||||
open/closed apple are grounded through resistors on the //c. need to detect voltage drop as analogread, not digital.
|
||||
|
||||
must be on analog pin.
|
||||
|
||||
***/
|
||||
|
||||
|
||||
|
||||
|
||||
char modifierKeys[4];
|
||||
|
||||
|
||||
void setup(){
|
||||
|
||||
pinMode(SHIFTPin, INPUT);
|
||||
pinMode(CTRLPin, INPUT);
|
||||
pinMode(APPLEPin1, INPUT);
|
||||
pinMode(APPLEPin2, INPUT);
|
||||
|
||||
digitalWrite(APPLEPin1, HIGH);
|
||||
digitalWrite(APPLEPin2, HIGH);
|
||||
|
||||
digitalWrite(SHIFTPin, HIGH);
|
||||
digitalWrite(CTRLPin, HIGH);
|
||||
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
|
||||
char SHIFTState = digitalRead(SHIFTPin);
|
||||
|
||||
if (SHIFTState == LOW) {
|
||||
modifierKeys[0] = MODIFIERKEY_SHIFT;
|
||||
digitalWrite(SHIFTPin, HIGH);
|
||||
} else {
|
||||
digitalWrite(SHIFTPin, HIGH);
|
||||
modifierKeys[0] = 0;
|
||||
}
|
||||
|
||||
char CTRLState = digitalRead(CTRLPin);
|
||||
|
||||
if (CTRLState == LOW) {
|
||||
modifierKeys[1] = MODIFIERKEY_CTRL;
|
||||
digitalWrite(CTRLPin, HIGH);
|
||||
} else {
|
||||
modifierKeys[1] = 0;
|
||||
digitalWrite(CTRLPin, HIGH);
|
||||
}
|
||||
|
||||
|
||||
|
||||
char OAPPLEState = analogRead(APPLEPin2);
|
||||
char CAPPLEState = analogRead(APPLEPin1);
|
||||
|
||||
|
||||
// *** NOW USING CLOSED APPLE AS ALT/OPTION
|
||||
if (OAPPLEState < 20) {
|
||||
modifierKeys[2] = MODIFIERKEY_GUI;
|
||||
digitalWrite(APPLEPin1, HIGH);
|
||||
} else {
|
||||
modifierKeys[2] = 0;
|
||||
digitalWrite(APPLEPin1, HIGH);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (CAPPLEState < 20) {
|
||||
modifierKeys[3] = MODIFIERKEY_ALT;
|
||||
digitalWrite(APPLEPin2, HIGH);
|
||||
} else {
|
||||
modifierKeys[3] = 0;
|
||||
digitalWrite(APPLEPin2, HIGH);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// to use the TILDE key as ALT/OPTION
|
||||
/* modifierKeys[3] = 0;
|
||||
if( KPD.isPressed(KEY_TILDE) ) {
|
||||
modifierKeys[3] = MODIFIERKEY_ALT;
|
||||
}
|
||||
*/
|
||||
|
||||
// *** NOW USING CLOSED APPLE AS ALT/OPTION
|
||||
|
||||
Keyboard.set_modifier( modifierKeys[0] | modifierKeys[1] | modifierKeys[2] | modifierKeys[3] );
|
||||
|
||||
KPD.getKeys(); // Scan for all pressed keys. 6 Max, + 4 modifiers. Should be plenty, but can be extended to 10+
|
||||
|
||||
// Set keyboard keys to default values.
|
||||
Keyboard.set_key1(0);
|
||||
Keyboard.set_key2(0);
|
||||
Keyboard.set_key3(0);
|
||||
Keyboard.set_key4(0);
|
||||
Keyboard.set_key5(0);
|
||||
Keyboard.set_key6(0);
|
||||
|
||||
// Update keyboard keys to active values.
|
||||
if( KPD.key[0].kchar && ( KPD.key[0].kstate==PRESSED || KPD.key[0].kstate==HOLD ))
|
||||
Keyboard.set_key1( KPD.key[0].kchar );
|
||||
|
||||
if( KPD.key[1].kchar && ( KPD.key[1].kstate==PRESSED || KPD.key[1].kstate==HOLD ))
|
||||
Keyboard.set_key2( KPD.key[1].kchar );
|
||||
|
||||
if( KPD.key[2].kchar && ( KPD.key[2].kstate==PRESSED || KPD.key[2].kstate==HOLD ))
|
||||
Keyboard.set_key3( KPD.key[2].kchar );
|
||||
|
||||
if( KPD.key[3].kchar && ( KPD.key[3].kstate==PRESSED || KPD.key[3].kstate==HOLD ))
|
||||
Keyboard.set_key4( KPD.key[3].kchar );
|
||||
|
||||
if( KPD.key[4].kchar && ( KPD.key[4].kstate==PRESSED || KPD.key[4].kstate==HOLD ))
|
||||
Keyboard.set_key5( KPD.key[4].kchar );
|
||||
|
||||
if( KPD.key[5].kchar && ( KPD.key[5].kstate==PRESSED || KPD.key[5].kstate==HOLD ))
|
||||
Keyboard.set_key6( KPD.key[5].kchar );
|
||||
|
||||
Keyboard.send_now();
|
||||
Keyboard.set_modifier(0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -21,25 +21,28 @@ Y0 ESC 1 2 3 4 6 5 7 8 9
|
|||
Matrix
|
||||
J9
|
||||
|
||||
X0 31
|
||||
1 24
|
||||
2 22
|
||||
3 8
|
||||
4 14
|
||||
5 6
|
||||
6 10
|
||||
7 1
|
||||
8 4
|
||||
9 2
|
||||
Matrix
|
||||
J9 Teensy
|
||||
|
||||
Y0 12
|
||||
1 33
|
||||
2 18
|
||||
3 20
|
||||
4 3
|
||||
5 5
|
||||
6 7
|
||||
7 9
|
||||
X0 31 26
|
||||
1 24 4
|
||||
2 22 5
|
||||
3 8 14
|
||||
4 14 17
|
||||
5 6 13
|
||||
6 10 15
|
||||
7 1 3
|
||||
8 4 12
|
||||
9 2 11
|
||||
|
||||
Y0 12 16
|
||||
1 33 25
|
||||
2 18 7
|
||||
3 20 6
|
||||
4 3 2
|
||||
5 5 1
|
||||
6 7 0
|
||||
7 9 27
|
||||
|
||||
NC 13
|
||||
17
|
||||
|
@ -47,12 +50,12 @@ NC 13
|
|||
|
||||
GND 21
|
||||
|
||||
SFT 34
|
||||
CTL 32
|
||||
CMD 16
|
||||
CMD 26
|
||||
CAPS 28
|
||||
|
||||
SFT 34 24
|
||||
CTL 32 23
|
||||
CMD 16 8
|
||||
CMD 26 20
|
||||
CAPS 28 21
|
||||
zzzzzzzzzzzzzzzzbbbbb
|
||||
|
||||
J9 pinout
|
||||
1 X7
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user