mirror of
https://github.com/option8/RetroConnector.git
synced 2024-12-03 05:50:00 +00:00
Add files via upload
This commit is contained in:
parent
d70b4c865a
commit
fb69c3a108
986
A2DMS/Arduino/MIDI_to_A2DMS_ino/MIDI_to_A2DMS_ino.ino
Normal file
986
A2DMS/Arduino/MIDI_to_A2DMS_ino/MIDI_to_A2DMS_ino.ino
Normal file
@ -0,0 +1,986 @@
|
||||
/*
|
||||
Octave Note
|
||||
C C# D D# E F F# G G# A A# B
|
||||
0 0 1 2 3 4 5 6 7 8 9 10 11
|
||||
1 12 13 14 15 16 17 18 19 20 21 22 23
|
||||
2 24 25 26 27 28 29 30 31 32 33 34 35
|
||||
3 36 37 38 39 40 41 42 43 44 45 46 47
|
||||
4 48 49 50 51 52 53 54 55 56 57 58 59
|
||||
5 60 61 62 63 64 65 66 67 68 69 70 71
|
||||
6 72 73 74 75 76 77 78 79 80 81 82 83
|
||||
7 84 85 86 87 88 89 90 91 92 93 94 95
|
||||
8 96 97 98 99 100 101 102 103 104 105 106 107
|
||||
9 108 109 110 111 112 113 114 115 116 117 118 119
|
||||
10 120 121 122 123 124 125 126 127
|
||||
|
||||
|
||||
A2.DMS
|
||||
C C# D D# E F F# G G# A A# B
|
||||
|
||||
|
||||
|
||||
48 z s x d c v g b h n j m
|
||||
60 , l . ; /
|
||||
|
||||
|
||||
ESC TAB 1 q
|
||||
60 w 3 e 4 r t 6 y 7 u 8 i
|
||||
72 o 0 p - [ ] DEL \
|
||||
|
||||
|
||||
|
||||
in A2DMS "w" is the same note as ","
|
||||
|
||||
|
||||
IIe keyboard matrix
|
||||
|
||||
XO X1 X2 X3 | X4 X5 X6 X7
|
||||
------------------------------------+--------------------------------
|
||||
YO ESC TAB A Z | / ) * ESC
|
||||
|
|
||||
Y1 1! Q D X | DOWN UP LEFT RIGHT
|
||||
|
|
||||
Y2 20 W S C | 0 4 8 (
|
||||
|
|
||||
Y3 34 E H V | 1 5 9 -
|
||||
|
|
||||
Y4 4$ R F B | 2 6 . RETURN
|
||||
|
|
||||
Y5 6" Y G N | 3 7 + ,
|
||||
+----------------------------------
|
||||
Y6 5% T J M \| `~ RETURN DELETE
|
||||
|
||||
Y7 7& U K ,< += P UP DOWN
|
||||
|
||||
Y8 8* I ;: .> 0) [{ SPACE LEFT
|
||||
|
||||
Y9 9( O L /? -_ ]} '" RIGHT
|
||||
|
||||
|
||||
|
||||
IIe Col/Row
|
||||
1 Y0
|
||||
2 Y1
|
||||
3 +5V
|
||||
4 Y2
|
||||
5 SW1/SAPL*
|
||||
6 Y3
|
||||
7 SW0/OAPL*
|
||||
8 Y4
|
||||
9 CAPLOCK*
|
||||
10 Y5
|
||||
11 CNTL*
|
||||
12 Y8
|
||||
13 GND
|
||||
14 X0
|
||||
15 RESET*
|
||||
16 X2
|
||||
17 X7
|
||||
18 X1
|
||||
19 X5
|
||||
20 X3
|
||||
21 X4
|
||||
22 Y9
|
||||
23 Y6
|
||||
24 SHFT*
|
||||
25 Y7
|
||||
26 X6
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
#define HWSERIAL Serial1
|
||||
|
||||
|
||||
// change on MIDI channel 1-8 = DMS, 9 = drum
|
||||
int MIDI_CHANNEL = 1;
|
||||
/*
|
||||
1 - piano
|
||||
2 - Bass
|
||||
3 - Banjo
|
||||
4 - Guitar
|
||||
5 - Clarinet
|
||||
6 - Trumpet
|
||||
7 - Square Wave
|
||||
8 - Sawtooth
|
||||
|
||||
9 - switch to "drum" mode for DMS Drummer
|
||||
*/
|
||||
|
||||
boolean SERIAL_MODE = true ;
|
||||
// serial or keyboard control?
|
||||
|
||||
|
||||
int ledPin = 11; //teensy status LED
|
||||
|
||||
int EXIT_PIN = 12; // press for "X" to return to keyboard control.
|
||||
|
||||
int ENABLE_PIN = 0;
|
||||
int S0_PIN = 3;
|
||||
int S1_PIN = 4;
|
||||
int S2_PIN = 2;
|
||||
int S3_PIN = 1;
|
||||
|
||||
// 4051 pins
|
||||
int S0_4051 = 5;
|
||||
int S1_4051 = 6;
|
||||
int S2_4051 = 7;
|
||||
|
||||
int SHIFT_PIN = 14;
|
||||
int CONTROL_PIN = 15;
|
||||
int OPEN_APPLE_PIN = 8;
|
||||
int CLOSED_APPLE_PIN = 16;
|
||||
int CAPS_LOCK_PIN = 17;
|
||||
int RESET_PIN = 1;
|
||||
|
||||
int r0;
|
||||
int r1;
|
||||
int r2;
|
||||
|
||||
int c0;
|
||||
int c1;
|
||||
int c2;
|
||||
int c3;
|
||||
|
||||
int count= 0;
|
||||
|
||||
int CAPS_LOCK_ACTIVE = 0;
|
||||
|
||||
|
||||
const int COLUMNS = 8;
|
||||
const int ROWS = 10;
|
||||
|
||||
|
||||
uint32_t next_time;
|
||||
|
||||
|
||||
int octave = 3; // W key == MIDI 60 == middle C
|
||||
int RangeC = 48; // initial range is 1 octave down (_C)
|
||||
int RangeG = 79; // to 1.5 octaves up (^G)
|
||||
|
||||
|
||||
volatile int CURRENT_NOTE; // store the currently playing note, to check if it's ending.
|
||||
volatile long NOTE_OFF_TIMER;
|
||||
int NOTE_OFF_INTERVAL = 5;
|
||||
|
||||
|
||||
// note integer to QWERTY translation
|
||||
|
||||
int KEYS_ARRAY[ROWS][COLUMNS] = {
|
||||
{ 56, 57, -1, 48, 64, -1, -1, 56 },
|
||||
{ 58, 59, 51, 50, -1, -1, -1, -1 },
|
||||
{ -1, 60, 49, 52, 73, 63, 70, -1 },
|
||||
{ 61, 62, 56, 53, 58, -1, -1, 75 },
|
||||
{ 63, 64, -1, 55, -1, 66, 62, -1 },
|
||||
{ 66, 67, 54, 57, 61, 68, -1, 60 },
|
||||
{ -1, 65, 58, 59, 79, -1, -1, 78 },
|
||||
{ 68, 69, -1, 60, -1, 74, -1, -1 },
|
||||
{ 70, 71, 63, 62, 73, 76, -1, -1 },
|
||||
{ -1, 72, 61, 64, 75, 77, -1, -1 }
|
||||
};
|
||||
|
||||
/*
|
||||
A2.DMS
|
||||
C C# D D# E F F# G G# A A# B
|
||||
|
||||
48 z s x d c v g b h n j m 59
|
||||
60 , l . ; /
|
||||
|
||||
|
||||
ESC TAB 1 q 59
|
||||
60 w 3 e 4 r t 6 y 7 u 8 i 71
|
||||
72 o 0 p - [ ] DEL \
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
int CONTROLS_ARRAY[ROWS][COLUMNS] = {
|
||||
|
||||
{ -1, -1, -1, -1, -1, -1, -1, -1 },
|
||||
{ 49, -1, -1, 50, -1, -1, -1, -1 },
|
||||
{ 50, -1, -1, -1, -1, -1, -1, -1 },
|
||||
{ 51, -1, -1, -1, -1, -1, -1, -1 },
|
||||
{ 52, -1, -1, -1, -1, -1, -1, -1 },
|
||||
{ 54, -1, -1, -1, -1, -1, -1, -1 },
|
||||
{ 53, -1, -1, -1, -1, -1, -1, -1 },
|
||||
{ 55, -1, 107, -1, -1, -1, 48, 57 },
|
||||
{ 56, -1, -1, -1, -1, -1, -1, -1 },
|
||||
{ -1, -1, -1, -1, -1, -1, -1, -1 }
|
||||
|
||||
};
|
||||
|
||||
|
||||
// Shift 0 - 8 = instrument change,
|
||||
// shift + 9 = down octave
|
||||
// shift + 0 = up octave
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int DRUMKIT_ARRAY[ROWS][COLUMNS] = {
|
||||
{ -1, -1, 60, 48, -1, -1, -1, -1 },
|
||||
{ 84, 72, 64, 50, -1, -1, -1, -1 },
|
||||
{ 86, 74, 62, 52, -1, -1, -1, -1 },
|
||||
{ 88, 76, 69, 53, -1, -1, -1, -1 },
|
||||
{ 89, 77, 65, 55, -1, -1, -1, -1 },
|
||||
{ 93, 81, 67, 57, -1, -1, -1, -1 },
|
||||
{ 91, 79, 71, 59, -1, -1, -1, -1 },
|
||||
{ 95, 83, 61, 49, -1, -1, -1, -1 },
|
||||
{ 85, 73, -1, -1, -1, -1, -1, -1 },
|
||||
{ -1, -1, -1, -1, -1, -1, -1, -1 }
|
||||
};
|
||||
|
||||
/* DMS DRUMMER
|
||||
|
||||
|
||||
Kick Laser Rimshot Clap Snare Tom Closed Hat Open Hat
|
||||
C C# D D# E F F# G G# A A# B
|
||||
|
||||
48 z , x c v b n m 59
|
||||
|
||||
60 a k s d f g h j 71
|
||||
|
||||
72 q i w e r t y u 83
|
||||
|
||||
84 1 8 2 3 4 5 6 7 95
|
||||
|
||||
|
||||
|
||||
|
||||
XO X1 X2 X3 | X4 X5 X6 X7
|
||||
------------------------------------+--------------------------------
|
||||
YO ESC TAB A Z | / ) * ESC
|
||||
|
|
||||
Y1 1! Q D X | DOWN UP LEFT RIGHT
|
||||
|
|
||||
Y2 20 W S C | 0 4 8 (
|
||||
|
|
||||
Y3 34 E H V | 1 5 9 -
|
||||
|
|
||||
Y4 4$ R F B | 2 6 . RETURN
|
||||
|
|
||||
Y5 6" Y G N | 3 7 + ,
|
||||
+----------------------------------
|
||||
Y6 5% T J M \| `~ RETURN DELETE
|
||||
|
||||
Y7 7& U K ,< += P UP DOWN
|
||||
|
||||
Y8 8* I ;: .> 0) [{ SPACE LEFT
|
||||
|
||||
Y9 9( O L /? -_ ]} '" RIGHT
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
int KEYMAP[81]= { 0x00,
|
||||
0x21,0x40,0x23,0x24,0x25,0x5e,0x26,0x2a,0x0B,0x0A,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x7a, 0x73, 0x78, 0x64, 0x63, 0x76, 0x67, 0x62, 0x68, 0x6e, 0x6a, 0x6d,
|
||||
0x77, 0x33, 0x65, 0x34, 0x72, 0x74, 0x36, 0x79, 0x37, 0x75, 0x38, 0x69,
|
||||
0x6f, 0x30, 0x70, 0x2d, 0x5b, 0x5d, 0x7f, 0x5c };
|
||||
|
||||
|
||||
|
||||
int DRUMMAP[96]= { 0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x7A, 0x2C, 0x78, 0x00, 0x63, 0x76, 0x00, 0x62, 0x00, 0x6E, 0x00, 0x6D,
|
||||
0x61, 0x6B, 0x73, 0x00, 0x64, 0x66, 0x00, 0x67, 0x00, 0x68, 0x00, 0x6A,
|
||||
0x71, 0x69, 0x77, 0x00, 0x65, 0x72, 0x00, 0x74, 0x00, 0x79, 0x00, 0x75,
|
||||
|
||||
0x31, 0x38, 0x32, 0x00, 0x33, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37 };
|
||||
|
||||
// read MIDI
|
||||
|
||||
/*
|
||||
|
||||
specials:
|
||||
KEYMAP[9] = 0x0A = down arrow
|
||||
KEYMAP[10] = 0x0B = up arrow
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
void OnNoteOn(byte channel, byte note, byte velocity)
|
||||
{
|
||||
CURRENT_NOTE = note;
|
||||
if(SERIAL_MODE) {
|
||||
NOTE_OFF_TIMER = 0;
|
||||
}
|
||||
|
||||
digitalWrite(ledPin, HIGH);
|
||||
digitalWrite(SHIFT_PIN, HIGH);
|
||||
|
||||
|
||||
if(channel != MIDI_CHANNEL) { // switched channels
|
||||
|
||||
Serial.print("Channel: ");
|
||||
Serial.println(channel);
|
||||
|
||||
|
||||
MIDI_CHANNEL = channel;
|
||||
|
||||
if(SERIAL_MODE) {
|
||||
HWSERIAL.write(char(KEYMAP[channel]));
|
||||
Serial.println(char(KEYMAP[channel]));
|
||||
|
||||
} else {
|
||||
sendControl(channel + 48);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Serial.print("DN ");
|
||||
Serial.println(note);
|
||||
|
||||
|
||||
|
||||
|
||||
// Serial.println(note);
|
||||
|
||||
/*
|
||||
note returns as integer 0 to 127
|
||||
|
||||
|
||||
lookup note in A2.DMS keymap - returns column/row
|
||||
|
||||
|
||||
"top" octave
|
||||
0 24 - 35
|
||||
1 36 - 47
|
||||
2 48 - 59
|
||||
3 60 - 71
|
||||
4 72 - 83
|
||||
5 84 - 95
|
||||
|
||||
|
||||
|
||||
|
||||
bottom C to top G:
|
||||
|
||||
0 12 - 43
|
||||
1 24 - 55
|
||||
2 36 - 67
|
||||
3 48 - 79
|
||||
4 60 - 91
|
||||
5 72 - 103
|
||||
|
||||
|
||||
|
||||
|
||||
RangeC = (octave + 1) * 12
|
||||
RangeG = RangeC + 31
|
||||
|
||||
|
||||
noteOctave = floor( note/12 ) - 2
|
||||
|
||||
do octaveSWITCH( octave - noteOctave )
|
||||
|
||||
*/
|
||||
|
||||
|
||||
int SEARCH_COLUMN = -1;
|
||||
int SEARCH_ROW = -1;
|
||||
|
||||
|
||||
if( MIDI_CHANNEL > 8 ) { // DMS Drummer drum kit
|
||||
|
||||
|
||||
if(SERIAL_MODE) {
|
||||
|
||||
HWSERIAL.write(DRUMMAP[note]);
|
||||
Serial.println(DRUMMAP[note], BYTE);
|
||||
|
||||
} else {
|
||||
|
||||
for (int row=0; row<ROWS; row++) {
|
||||
|
||||
for (int column=0; column<COLUMNS; column++) {
|
||||
if (note == DRUMKIT_ARRAY[row][column]) {
|
||||
SEARCH_COLUMN = row;
|
||||
SEARCH_ROW = column;
|
||||
|
||||
Serial.print(SEARCH_COLUMN);
|
||||
Serial.print(" : ");
|
||||
Serial.println(SEARCH_ROW);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
} // for rows
|
||||
|
||||
SendKeyStroke(SEARCH_ROW, SEARCH_COLUMN, note);
|
||||
|
||||
} // serial mode
|
||||
|
||||
|
||||
|
||||
} else { // A2 DMS MIDI piano
|
||||
|
||||
|
||||
RangeC = (octave + 1) * 12;
|
||||
RangeG = RangeC + 31;
|
||||
|
||||
|
||||
if (note > RangeG) {
|
||||
octaveSwitch(1);
|
||||
} else if (note < RangeC) {
|
||||
octaveSwitch(-1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* int noteOctave = floor( note/12 ) - 2;
|
||||
|
||||
if (noteOctave != octave) {
|
||||
octaveSwitch(noteOctave - octave);
|
||||
delay(100);
|
||||
}
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
if ( note >= (octave + 3) * 12 ) { // higher than current range ( normal == octave 3 )
|
||||
|
||||
SendKeyStroke(6,7); // up key
|
||||
octave ++;
|
||||
Serial.println(octave);
|
||||
delay(10);
|
||||
|
||||
} else if ( note < (octave + 2) * 12 ) {
|
||||
|
||||
|
||||
SendKeyStroke(7,7); // down key
|
||||
octave -= 1;
|
||||
Serial.println(octave);
|
||||
delay(10);
|
||||
|
||||
} //else {
|
||||
*/
|
||||
|
||||
|
||||
|
||||
// transpose note for octave switch
|
||||
|
||||
note = note - 12 * (octave - 3);
|
||||
|
||||
Serial.println(note);
|
||||
|
||||
|
||||
|
||||
|
||||
for (int row=0; row<ROWS; row++) {
|
||||
|
||||
for (int column=0; column<COLUMNS; column++) {
|
||||
if (note == KEYS_ARRAY[row][column]) {
|
||||
SEARCH_COLUMN = row;
|
||||
SEARCH_ROW = column;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} // for rows
|
||||
|
||||
|
||||
SendKeyStroke(SEARCH_ROW, SEARCH_COLUMN, note);
|
||||
} // if Drum/piano
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} //OnNoteOn
|
||||
|
||||
|
||||
|
||||
void octaveSwitch(int diff) {
|
||||
|
||||
Serial.print("OCTAVE DIFF = ");
|
||||
Serial.println(diff);
|
||||
|
||||
for (int i=0; i< abs(diff); i++ ) {
|
||||
|
||||
if(diff > 0 ) {
|
||||
SendKeyStroke(6,7,9); // up key
|
||||
octave ++;
|
||||
Serial.print("OCTAVE ") ;
|
||||
Serial.println(octave);
|
||||
delay(20);
|
||||
SendKeyUp();
|
||||
} else {
|
||||
SendKeyStroke(7,7,10); // down key
|
||||
octave -= 1;
|
||||
Serial.print("OCTAVE ") ;
|
||||
Serial.println(octave);
|
||||
delay(20);
|
||||
SendKeyUp();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SendKeyStroke ( int keyRow, int keyCol, char note) {
|
||||
|
||||
|
||||
if(SERIAL_MODE) {
|
||||
HWSERIAL.write(KEYMAP[note]);
|
||||
|
||||
Serial.println(KEYMAP[note], BYTE);
|
||||
|
||||
} else {
|
||||
|
||||
digitalWrite(S0_4051, LOW);
|
||||
digitalWrite(S1_4051, LOW);
|
||||
digitalWrite(S2_4051, LOW);
|
||||
|
||||
|
||||
//select the column bits
|
||||
c0 = bitRead(keyCol,0);
|
||||
c1 = bitRead(keyCol,1);
|
||||
c2 = bitRead(keyCol,2);
|
||||
c3 = bitRead(keyCol,3);
|
||||
|
||||
// set the column signals to match selected column
|
||||
digitalWrite(S0_PIN, c0);
|
||||
digitalWrite(S1_PIN, c1);
|
||||
digitalWrite(S2_PIN, c2);
|
||||
digitalWrite(S3_PIN, c3);
|
||||
|
||||
//select the row bits
|
||||
r0 = bitRead(keyRow,0);
|
||||
r1 = bitRead(keyRow,1);
|
||||
r2 = bitRead(keyRow,2);
|
||||
|
||||
// set the column signals to match selected column
|
||||
digitalWrite(S0_4051, r0);
|
||||
digitalWrite(S1_4051, r1);
|
||||
digitalWrite(S2_4051, r2);
|
||||
|
||||
// enable the common IO
|
||||
digitalWrite(ENABLE_PIN, LOW);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
void OnControlChange(byte channel, byte control, byte value) {
|
||||
Serial.print( "CONTROL ");
|
||||
Serial.print(control);
|
||||
Serial.print( " : ");
|
||||
Serial.println(value);
|
||||
|
||||
if (control == 123) { // "all notes off"
|
||||
|
||||
|
||||
if(SERIAL_MODE) {
|
||||
HWSERIAL.write("+");
|
||||
} else {
|
||||
|
||||
SendKeyUp();
|
||||
delay(10);
|
||||
|
||||
SendKeyUp();
|
||||
delay(10);
|
||||
|
||||
SendKeyUp();
|
||||
delay(10);
|
||||
}
|
||||
|
||||
|
||||
if(channel < 9) { // to reset to default octave, down to 0, then up to 3
|
||||
|
||||
octaveSwitch(-1);
|
||||
delay(10);
|
||||
octaveSwitch(-1);
|
||||
delay(10);
|
||||
octaveSwitch(-1);
|
||||
delay(10);
|
||||
octaveSwitch(-1);
|
||||
delay(10);
|
||||
octaveSwitch(-1);
|
||||
delay(10);
|
||||
octaveSwitch(-1);
|
||||
delay(10);
|
||||
octaveSwitch(1);
|
||||
delay(10);
|
||||
octaveSwitch(1);
|
||||
delay(10);
|
||||
octaveSwitch(1);
|
||||
// octave == 3
|
||||
octave = 3;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void OnProgramChange(byte channel, byte program) {
|
||||
Serial.print( "PROGRAM ");
|
||||
Serial.print(program);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void OnNoteOff(byte channel, byte note, byte velocity)
|
||||
{
|
||||
digitalWrite(ledPin, LOW);
|
||||
|
||||
|
||||
if (MIDI_CHANNEL < 9) {
|
||||
|
||||
if( (SERIAL_MODE) && (CURRENT_NOTE == note) && (Serial.available()==false) ) {
|
||||
|
||||
// start loop timer
|
||||
NOTE_OFF_TIMER = millis();
|
||||
|
||||
|
||||
} else if( (SERIAL_MODE == false) && (CURRENT_NOTE == note) ) {
|
||||
|
||||
Serial.print("UP ");
|
||||
Serial.println(note);
|
||||
|
||||
SendKeyUp();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} //OnNoteOff
|
||||
|
||||
|
||||
|
||||
void SendKeyUp() {
|
||||
// disable the common IO
|
||||
digitalWrite(ENABLE_PIN, HIGH);
|
||||
digitalWrite(SHIFT_PIN, HIGH);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void serialEvent() {
|
||||
while (Serial.available()) {
|
||||
// get the new byte:
|
||||
char inChar = Serial.read(); //
|
||||
|
||||
|
||||
|
||||
if(inChar > 47 && inChar < 58) { // #1 - 10
|
||||
// channel/instrument change
|
||||
MIDI_CHANNEL = inChar - 48;
|
||||
|
||||
Serial.print("Channel: ");
|
||||
Serial.println(MIDI_CHANNEL);
|
||||
|
||||
if(SERIAL_MODE) {
|
||||
|
||||
HWSERIAL.write( char(KEYMAP[MIDI_CHANNEL]) );
|
||||
Serial.println(char(KEYMAP[MIDI_CHANNEL]));
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(inChar == 57) {
|
||||
SendKeyStroke(6,7,9); // up key
|
||||
|
||||
Serial.print("OCTAVE ") ;
|
||||
Serial.println(octave);
|
||||
delay(20);
|
||||
SendKeyUp();
|
||||
}
|
||||
if(inChar == 48) {
|
||||
SendKeyStroke(7,7,10); // down key
|
||||
Serial.print("OCTAVE ") ;
|
||||
Serial.println(octave);
|
||||
delay(20);
|
||||
SendKeyUp();
|
||||
}
|
||||
|
||||
|
||||
if(inChar == 75) { // K for keyboard performanxce mode in drummer
|
||||
|
||||
digitalWrite(SHIFT_PIN, LOW); // shift +
|
||||
SendKeyStroke(2,7,0); // k
|
||||
Serial.print("Keyboard mode") ;
|
||||
delay(20);
|
||||
SendKeyUp();
|
||||
digitalWrite(SHIFT_PIN, HIGH); // shift off
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
sendControl(inChar);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* while (HWSERIAL.available()) {
|
||||
// get the new byte:
|
||||
char inChar = HWSERIAL.read();
|
||||
Serial.println(inChar);
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void sendControl(char inChar) {
|
||||
|
||||
if(SERIAL_MODE) {
|
||||
HWSERIAL.write(inChar);
|
||||
|
||||
Serial.println(inChar, HEX);
|
||||
|
||||
} else {
|
||||
|
||||
digitalWrite(SHIFT_PIN, LOW);
|
||||
|
||||
Serial.print(inChar);
|
||||
Serial.print(" ");
|
||||
|
||||
// Serial.print(inChar, BIN);
|
||||
// Serial.print(" ");
|
||||
|
||||
// Serial.print(inChar, OCT);
|
||||
// Serial.print(" ");
|
||||
|
||||
Serial.println(inChar, DEC);
|
||||
|
||||
// Serial.print(inChar, HEX);
|
||||
// Serial.print(" ");
|
||||
|
||||
|
||||
|
||||
int SEARCH_COLUMN = -1;
|
||||
int SEARCH_ROW = -1;
|
||||
|
||||
for (int row=0; row<ROWS; row++) {
|
||||
|
||||
for (int column=0; column<COLUMNS; column++) {
|
||||
if (inChar == CONTROLS_ARRAY[row][column]) {
|
||||
SEARCH_COLUMN = row;
|
||||
SEARCH_ROW = column;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} // for rows
|
||||
|
||||
SendKeyStroke(SEARCH_ROW, SEARCH_COLUMN, inChar);
|
||||
delay(100);
|
||||
SendKeyUp();
|
||||
|
||||
} // if in serial mode
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// keyboard parser pieces
|
||||
|
||||
//#include <avr/pgmspace.h>
|
||||
//#include <avrpins.h>
|
||||
//#include <max3421e.h>
|
||||
//#include <address.h>
|
||||
//#include <printhex.h>
|
||||
//#include <message.h>
|
||||
//#include <hexdump.h>
|
||||
//#include <parsetools.h>
|
||||
//#include <hidboot.h>
|
||||
|
||||
|
||||
|
||||
|
||||
// write to keystrokes
|
||||
|
||||
/*void SetMods(uint8_t m, uint8_t key)
|
||||
{
|
||||
MODIFIERKEYS mod;
|
||||
*((uint8_t*)&mod) = m;
|
||||
|
||||
// send APPLE keys as key presses, not just as modifiers.
|
||||
|
||||
if(mod.bmLeftAlt == 1) {
|
||||
digitalWrite(OPEN_APPLE_PIN, HIGH);
|
||||
} else {
|
||||
digitalWrite(OPEN_APPLE_PIN, LOW);
|
||||
}
|
||||
|
||||
if(mod.bmRightAlt == 1) {
|
||||
digitalWrite(CLOSED_APPLE_PIN, HIGH);
|
||||
} else {
|
||||
digitalWrite(CLOSED_APPLE_PIN, LOW);
|
||||
}
|
||||
|
||||
if((mod.bmLeftShift == 1) || (mod.bmRightShift == 1) ) {
|
||||
digitalWrite(SHIFT_PIN, LOW);
|
||||
} else {
|
||||
digitalWrite(SHIFT_PIN, HIGH);
|
||||
}
|
||||
|
||||
if((mod.bmRightCtrl == 1) || (mod.bmLeftCtrl == 1) ) {
|
||||
digitalWrite(CONTROL_PIN, LOW);
|
||||
} else {
|
||||
digitalWrite(CONTROL_PIN, HIGH);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
pinMode(ledPin, OUTPUT);
|
||||
pinMode(EXIT_PIN, INPUT_PULLUP);
|
||||
|
||||
usbMIDI.setHandleNoteOff(OnNoteOff);
|
||||
usbMIDI.setHandleNoteOn(OnNoteOn) ;
|
||||
|
||||
usbMIDI.setHandleControlChange(OnControlChange);
|
||||
usbMIDI.setHandleProgramChange(OnProgramChange);
|
||||
|
||||
|
||||
digitalWrite(ledPin, HIGH);
|
||||
delay(1000);
|
||||
digitalWrite(ledPin, LOW);
|
||||
delay(1000);
|
||||
|
||||
Serial.begin(9600);
|
||||
|
||||
if(SERIAL_MODE) {
|
||||
HWSERIAL.begin(9600);
|
||||
}
|
||||
|
||||
pinMode(ENABLE_PIN, OUTPUT);
|
||||
pinMode(S0_PIN, OUTPUT);
|
||||
pinMode(S1_PIN, OUTPUT);
|
||||
pinMode(S2_PIN, OUTPUT);
|
||||
pinMode(S3_PIN, OUTPUT);
|
||||
pinMode(SHIFT_PIN, OUTPUT);
|
||||
pinMode(CONTROL_PIN, OUTPUT);
|
||||
pinMode(OPEN_APPLE_PIN, OUTPUT);
|
||||
pinMode(CLOSED_APPLE_PIN, OUTPUT);
|
||||
pinMode(CAPS_LOCK_PIN, OUTPUT);
|
||||
pinMode(RESET_PIN, OUTPUT);
|
||||
pinMode(S0_4051, OUTPUT);
|
||||
pinMode(S1_4051, OUTPUT);
|
||||
pinMode(S2_4051, OUTPUT);
|
||||
|
||||
|
||||
digitalWrite(ENABLE_PIN, HIGH); // write low to enable, high to disable
|
||||
digitalWrite(S0_PIN, LOW);
|
||||
digitalWrite(S1_PIN, LOW);
|
||||
digitalWrite(S2_PIN, LOW);
|
||||
digitalWrite(S3_PIN, LOW);
|
||||
|
||||
digitalWrite(CAPS_LOCK_PIN, HIGH);
|
||||
digitalWrite(RESET_PIN, HIGH);
|
||||
|
||||
digitalWrite(OPEN_APPLE_PIN, LOW);
|
||||
digitalWrite(CLOSED_APPLE_PIN, LOW);
|
||||
|
||||
// modifier keys - HIGH == not pressed. LOW == pressed.
|
||||
digitalWrite(SHIFT_PIN, HIGH);
|
||||
digitalWrite(CONTROL_PIN, HIGH);
|
||||
|
||||
|
||||
|
||||
digitalWrite(S0_4051, LOW);
|
||||
digitalWrite(S1_4051, LOW);
|
||||
digitalWrite(S2_4051, LOW);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void loop()
|
||||
{
|
||||
if( usbMIDI.read() ) {
|
||||
// Serial.println( usbMIDI.getType() );
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
serialEvent();
|
||||
|
||||
if(SERIAL_MODE) { // no need for this with keyboard mode.
|
||||
|
||||
// check loop timer for noteOff
|
||||
if(( NOTE_OFF_TIMER ) && ( millis() > NOTE_OFF_TIMER + NOTE_OFF_INTERVAL )) {
|
||||
// when loop timer ends, if a new note has been sent, ignore the noteOff
|
||||
|
||||
// else, if offnote hasn't been replaced, send noteOff
|
||||
HWSERIAL.write("+");
|
||||
|
||||
Serial.println(NOTE_OFF_TIMER);
|
||||
NOTE_OFF_TIMER = 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (digitalRead(EXIT_PIN) == LOW) {
|
||||
// send "X"
|
||||
HWSERIAL.write("X");
|
||||
Serial.println("RESET BUTTON");
|
||||
//delay(500);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
26
A2DMS/PCB/Teensy-RS232_contour.gm1
Normal file
26
A2DMS/PCB/Teensy-RS232_contour.gm1
Normal file
@ -0,0 +1,26 @@
|
||||
G04 MADE WITH FRITZING*
|
||||
G04 WWW.FRITZING.ORG*
|
||||
G04 DOUBLE SIDED*
|
||||
G04 HOLES PLATED*
|
||||
G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
|
||||
%ASAXBY*%
|
||||
%FSLAX23Y23*%
|
||||
%MOIN*%
|
||||
%OFA0B0*%
|
||||
%SFA1.0B1.0*%
|
||||
%ADD10R,2.509690X1.258780*%
|
||||
%ADD11C,0.008000*%
|
||||
%ADD10C,0.008*%
|
||||
%LNCONTOUR*%
|
||||
G90*
|
||||
G70*
|
||||
G54D10*
|
||||
G54D11*
|
||||
X4Y1255D02*
|
||||
X2506Y1255D01*
|
||||
X2506Y4D01*
|
||||
X4Y4D01*
|
||||
X4Y1255D01*
|
||||
D02*
|
||||
G04 End of contour*
|
||||
M02*
|
12914
A2DMS/PCB/Teensy-RS232_copperBottom.gbl
Normal file
12914
A2DMS/PCB/Teensy-RS232_copperBottom.gbl
Normal file
File diff suppressed because it is too large
Load Diff
13006
A2DMS/PCB/Teensy-RS232_copperTop.gtl
Normal file
13006
A2DMS/PCB/Teensy-RS232_copperTop.gtl
Normal file
File diff suppressed because it is too large
Load Diff
121
A2DMS/PCB/Teensy-RS232_drill.txt
Normal file
121
A2DMS/PCB/Teensy-RS232_drill.txt
Normal file
@ -0,0 +1,121 @@
|
||||
; NON-PLATED HOLES START AT T1
|
||||
; THROUGH (PLATED) HOLES START AT T100
|
||||
M48
|
||||
INCH
|
||||
T100C0.032000
|
||||
T101C0.031497
|
||||
T102C0.030000
|
||||
T103C0.038000
|
||||
T104C0.038492
|
||||
T105C0.040000
|
||||
T106C0.130000
|
||||
T107C0.035000
|
||||
%
|
||||
T100
|
||||
X018765Y000834
|
||||
X015765Y003834
|
||||
X014765Y003834
|
||||
X015765Y000834
|
||||
X014765Y000834
|
||||
X019765Y003834
|
||||
X019765Y000834
|
||||
X017765Y003834
|
||||
X020765Y003834
|
||||
X016765Y003834
|
||||
X017765Y000834
|
||||
X020765Y000834
|
||||
X016765Y000834
|
||||
X013765Y003834
|
||||
X013765Y000834
|
||||
X018765Y003834
|
||||
T101
|
||||
X013531Y011084
|
||||
X014515Y011084
|
||||
T102
|
||||
X015765Y011834
|
||||
X016765Y011834
|
||||
X019765Y010832
|
||||
X018765Y010834
|
||||
X020765Y010832
|
||||
X019765Y011834
|
||||
X018765Y011836
|
||||
X020765Y011834
|
||||
X015765Y010832
|
||||
X016765Y010832
|
||||
T103
|
||||
X003765Y000834
|
||||
X004765Y011834
|
||||
X002765Y011834
|
||||
X000765Y000834
|
||||
X001765Y011834
|
||||
X008765Y000834
|
||||
X009765Y011834
|
||||
X011765Y000834
|
||||
X007765Y011834
|
||||
X010765Y011834
|
||||
X005765Y000834
|
||||
X006765Y011834
|
||||
X004765Y000834
|
||||
X002765Y000834
|
||||
X003765Y011834
|
||||
X001765Y000834
|
||||
X000765Y011834
|
||||
X009765Y000834
|
||||
X007765Y000834
|
||||
X008765Y011834
|
||||
X010765Y000834
|
||||
X011765Y011834
|
||||
X006765Y000834
|
||||
X005765Y011834
|
||||
T104
|
||||
X007765Y003334
|
||||
X003765Y009334
|
||||
X010765Y003334
|
||||
X006765Y003334
|
||||
X011765Y007334
|
||||
X000765Y009334
|
||||
X011765Y004334
|
||||
X003765Y003334
|
||||
X004765Y004334
|
||||
X000765Y003334
|
||||
X008765Y009334
|
||||
X011765Y009334
|
||||
X011765Y006334
|
||||
X005765Y009334
|
||||
X008765Y003334
|
||||
X004765Y009334
|
||||
X011765Y003334
|
||||
X002765Y009334
|
||||
X005765Y003334
|
||||
X001765Y009334
|
||||
X004765Y003334
|
||||
X011765Y008334
|
||||
X002765Y003334
|
||||
X001765Y003334
|
||||
X011765Y005334
|
||||
X009765Y009334
|
||||
X004765Y008334
|
||||
X007765Y009334
|
||||
X010765Y009334
|
||||
X006765Y009334
|
||||
X009765Y003334
|
||||
T105
|
||||
X024265Y007925
|
||||
X023147Y008472
|
||||
X024265Y004657
|
||||
X023147Y004110
|
||||
X024265Y005747
|
||||
X023147Y006291
|
||||
X024265Y006834
|
||||
X023147Y005200
|
||||
X023147Y007381
|
||||
T106
|
||||
X023706Y011212
|
||||
X023706Y001370
|
||||
T107
|
||||
X013015Y005584
|
||||
X014787Y005584
|
||||
X013015Y008143
|
||||
X014787Y008143
|
||||
T00
|
||||
M30
|
4715
A2DMS/PCB/Teensy-RS232_maskBottom.gbs
Normal file
4715
A2DMS/PCB/Teensy-RS232_maskBottom.gbs
Normal file
File diff suppressed because it is too large
Load Diff
4744
A2DMS/PCB/Teensy-RS232_maskTop.gts
Normal file
4744
A2DMS/PCB/Teensy-RS232_maskTop.gts
Normal file
File diff suppressed because it is too large
Load Diff
114
A2DMS/PCB/Teensy-RS232_pnp.txt
Normal file
114
A2DMS/PCB/Teensy-RS232_pnp.txt
Normal file
@ -0,0 +1,114 @@
|
||||
*Pick And Place List
|
||||
*Company=
|
||||
*Author=
|
||||
*eMail=
|
||||
*
|
||||
*Project=Teensy-RS232
|
||||
*Date=01:18:20
|
||||
*CreatedBy=Fritzing 0.9.2b.11.19.8d2d5970658f0bed09c661c9ea9a515b5f40f44c
|
||||
*
|
||||
*
|
||||
*Coordinates in mm, always center of component
|
||||
*Origin 0/0=Lower left corner of PCB
|
||||
*Rotation in degree (0-360, math. pos.)
|
||||
*
|
||||
*No;Value;Package;X;Y;Rotation;Side;Name
|
||||
1;;;38.3286;-20.7082;0;Bottom;Copper Fill23
|
||||
2;;;20.9804;-5.3539;0;Bottom;Copper Fill15
|
||||
3;;;10.8204;-5.3539;0;Bottom;Copper Fill11
|
||||
4;;;51.4858;-28.7981;0;Bottom;Copper Fill3
|
||||
5;;;15.9142;-16.09;-90;Bottom;Teensy 2.0
|
||||
6;;;5.7404;-26.8423;0;Bottom;Copper Fill49
|
||||
7;100nF;100 mil [THT, multilayer];50.2042;-28.79;90;Bottom;C2
|
||||
8;100nF;100 mil [THT, multilayer];52.7442;-28.79;90;Bottom;C5
|
||||
9;;;1.0668;-2.16628;0;Bottom;Copper Fill80
|
||||
10;;;18.4404;-26.8423;0;Bottom;Copper Fill54
|
||||
11;;;48.0144;-18.5379;0;Bottom;IMG1
|
||||
12;;THT;15.9142;-2.12;-90;Bottom;GND
|
||||
13;;;36.6522;-14.2566;0;Bottom;Copper Fill72
|
||||
14;;;13.3604;-26.8423;0;Bottom;Copper Fill52
|
||||
15;;;18.4404;-5.3539;0;Bottom;Copper Fill14
|
||||
16;;;31.8516;-15.9965;0;Bottom;Copper Fill5
|
||||
17;;;15.9004;-26.8423;0;Bottom;Copper Fill53
|
||||
18;;;36.8173;-27.4519;0;Bottom;Copper Fill31
|
||||
19;;;37.4777;-13.4057;0;Bottom;Copper Fill71
|
||||
20;;;15.1892;-16.0981;0;Bottom;Copper Fill62
|
||||
21;;;50.1269;-1.41698;0;Bottom;Copper Fill40
|
||||
22;;;37.4777;-19.8827;0;Bottom;Copper Fill68
|
||||
23;;;8.2804;-5.3539;0;Bottom;Copper Fill10
|
||||
24;;;1.1176;-8.5162;0;Bottom;Copper Fill76
|
||||
25;;;1.9177;-7.6653;0;Bottom;Copper Fill75
|
||||
26;;;1.0668;-2.16628;0;Bottom;Copper Fill39
|
||||
27;;;45.1104;-3.85538;0;Bottom;Copper Fill66
|
||||
28;;[THT];35.3093;-17.4351;90;Bottom;S1
|
||||
29;;;20.9804;-26.8423;0;Bottom;Copper Fill55
|
||||
30;;;1.9177;-1.36618;0;Bottom;Copper Fill38
|
||||
31;;;48.9458;-28.7981;0;Bottom;Copper Fill2
|
||||
32;100nF;100 mil [THT, multilayer];40.0442;-28.79;90;Bottom;C3
|
||||
33;;;1.9177;-9.3925;0;Bottom;Copper Fill33
|
||||
34;;;57.8612;-21.5718;0;Bottom;Copper Fill36
|
||||
35;;;13.3604;-5.3539;0;Bottom;Copper Fill12
|
||||
36;;;8.2804;-26.8423;0;Bottom;Copper Fill50
|
||||
37;;db9;60.0843;-15.98;90;Bottom;RS232 Serial
|
||||
38;;;36.6522;-20.7082;0;Bottom;Copper Fill22
|
||||
39;;;28.6258;-8.8083;0;Bottom;Copper Fill64
|
||||
40;;;3.2004;-26.8423;0;Bottom;Copper Fill48
|
||||
41;;;50.1269;-1.41698;0;Bottom;Copper Fill82
|
||||
42;;;5.7404;-5.3539;0;Bottom;Copper Fill9
|
||||
43;;;23.5966;-6.5731;0;Bottom;Copper Fill63
|
||||
44;;;41.3258;-28.7981;0;Bottom;Copper Fill43
|
||||
45;;;41.3258;-28.7981;0;Bottom;Copper Fill1
|
||||
46;;;28.6004;-26.8423;0;Bottom;Copper Fill58
|
||||
47;;;54.5084;-23.1085;0;Bottom;Copper Fill4
|
||||
48;;;36.195;-3.22038;0;Bottom;Copper Fill67
|
||||
49;;dil16;43.8542;-5.93;180;Bottom;MAX232
|
||||
50;;;46.3804;-19.3747;0;Bottom;Copper Fill41
|
||||
51;;;26.0604;-5.3539;0;Bottom;Copper Fill17
|
||||
52;;;23.5204;-5.3539;0;Bottom;Copper Fill16
|
||||
53;;;1.9177;-1.36618;0;Bottom;Copper Fill79
|
||||
54;;;36.8173;-28.9505;0;Bottom;Copper Fill74
|
||||
55;;;36.6522;-14.2566;0;Bottom;Copper Fill27
|
||||
56;;;28.956;-16.1362;0;Bottom;Copper Fill32
|
||||
57;;;35.0266;-19.3747;0;Bottom;Copper Fill46
|
||||
58;;;50.1269;-30.8301;0;Bottom;Copper Fill29
|
||||
59;;;53.467;-30.1062;0;Bottom;Copper Fill25
|
||||
60;;;15.9004;-5.3539;0;Bottom;Copper Fill13
|
||||
61;;;48.9204;-17.4443;0;Bottom;Copper Fill60
|
||||
62;;;2.4638;-5.3539;0;Bottom;Copper Fill19
|
||||
63;;;36.6522;-20.7082;0;Bottom;Copper Fill69
|
||||
64;;;39.9669;-30.8301;0;Bottom;Copper Fill77
|
||||
65;;THT;15.9142;-30.06;-90;Bottom;+5V
|
||||
66;;;37.4777;-15.1075;0;Bottom;Copper Fill26
|
||||
67;;;43.8404;-18.6381;0;Bottom;Copper Fill47
|
||||
68;;;23.5204;-26.8423;0;Bottom;Copper Fill56
|
||||
69;;;15.5302;-26.6389;0;Bottom;TXT1
|
||||
70;;;50.1269;-3.16958;0;Bottom;Copper Fill81
|
||||
71;;5 mm [THT];35.0202;-28.155;90;Bottom;LED1
|
||||
72;;;17.7038;-4.4903;0;Bottom;Copper Fill65
|
||||
73;;;52.6669;-30.8301;0;Bottom;Copper Fill24
|
||||
74;;;37.4777;-21.5845;0;Bottom;Copper Fill20
|
||||
75;;;46.7695;-18.8768;0;Bottom;IMG2
|
||||
76;;;52.6796;-15.4885;0;Bottom;Copper Fill61
|
||||
77;;;51.4858;-28.7981;0;Bottom;Copper Fill45
|
||||
78;;;57.9374;-15.9965;0;Bottom;Copper Fill42
|
||||
79;;;1.9177;-3.06798;0;Bottom;Copper Fill78
|
||||
80;;;56.5658;-13.9391;0;Bottom;Copper Fill7
|
||||
81;;;41.3004;-17.4443;0;Bottom;Copper Fill59
|
||||
82;;;26.0604;-26.8423;0;Bottom;Copper Fill57
|
||||
83;100nF;100 mil [THT, multilayer];42.5842;-28.79;90;Bottom;C4
|
||||
84;;;58.7121;-22.4481;0;Bottom;Copper Fill35
|
||||
85;;;38.3286;-14.2566;0;Bottom;Copper Fill28
|
||||
86;;;39.9669;-30.8301;0;Bottom;Copper Fill37
|
||||
87;100nF;100 mil [THT, multilayer];47.6642;-28.79;-90;Bottom;C1
|
||||
88;;;10.8204;-26.8423;0;Bottom;Copper Fill51
|
||||
89;;;1.1176;-8.5162;0;Bottom;Copper Fill34
|
||||
90;;;150.366;62.9467;0;Bottom;IMG1
|
||||
91;;;48.9458;-28.7981;0;Bottom;Copper Fill44
|
||||
92;;;36.8173;-28.9505;0;Bottom;Copper Fill30
|
||||
93;;;15.9258;-18.6381;0;Bottom;Copper Fill6
|
||||
94;;;52.6669;-30.8301;0;Bottom;Copper Fill70
|
||||
95;;;28.6004;-5.3539;0;Bottom;Copper Fill18
|
||||
96;;;15.1892;-11.1197;0;Bottom;Copper Fill8
|
||||
97;;;15.4425;-5.13715;0;Bottom;TXT2
|
||||
98;;;50.1269;-30.8301;0;Bottom;Copper Fill73
|
||||
99;;;37.4777;-19.8827;0;Bottom;Copper Fill21
|
1615
A2DMS/PCB/Teensy-RS232_silkBottom.gbo
Normal file
1615
A2DMS/PCB/Teensy-RS232_silkBottom.gbo
Normal file
File diff suppressed because it is too large
Load Diff
16821
A2DMS/PCB/Teensy-RS232_silkTop.gto
Normal file
16821
A2DMS/PCB/Teensy-RS232_silkTop.gto
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user