Add files via upload
This commit is contained in:
parent
d70b4c865a
commit
fb69c3a108
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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*
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -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
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -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
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue