From 5d89af0220f9ef48ebe0c47146de6987f0f80f65 Mon Sep 17 00:00:00 2001 From: Tropicananass Date: Sun, 12 Apr 2020 19:19:11 +0200 Subject: [PATCH] fixed octave shift buttons --- .gitignore | 3 ++ res/doc/buttonMatrixMap.ods | Bin 12510 -> 17714 bytes src/main.cpp | 65 +++++++++++++++++++----------------- 3 files changed, 37 insertions(+), 31 deletions(-) diff --git a/.gitignore b/.gitignore index 3060fee..9a254d5 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,6 @@ dkms.conf .vscode/ipch .vscode *.code-workspace + +# Libreoffice +.~lock.* \ No newline at end of file diff --git a/res/doc/buttonMatrixMap.ods b/res/doc/buttonMatrixMap.ods index 4a7e9b4acc2658f610a1dca875fc57d76e214efc..63e26e3364dff2d22f3408bcd5ad32494aa0b690 100644 GIT binary patch literal 17714 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/_%HSWKPd1C9hU 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 b`uH-1C?S|c8VLgv3KQz*%Lm`F{K5DirTQ|U diff --git a/src/main.cpp b/src/main.cpp index 0023f94..e05d7af 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -47,40 +47,41 @@ CD74HC4067 multiplexer{mux_sig, mux_addr, mux_en}; /* keyboard (IN) */ CCPotentiometer potentiometers[] = { - {multiplexer.pin(0), {1, channel}}, - {multiplexer.pin(1), {2, channel}}, - {multiplexer.pin(2), {3, channel}}, - {multiplexer.pin(3), {4, channel}}, - {multiplexer.pin(4), {5, channel}}, - {multiplexer.pin(5), {6, channel}}, - {multiplexer.pin(6), {7, channel}}, - {multiplexer.pin(7), {8, channel}}, - {multiplexer.pin(8), {9, channel}}, - {multiplexer.pin(9), {10, channel}}, + {multiplexer.pin(0), {1, channel}}, + {multiplexer.pin(1), {2, channel}}, + {multiplexer.pin(2), {3, channel}}, + {multiplexer.pin(3), {4, channel}}, + {multiplexer.pin(4), {5, channel}}, + {multiplexer.pin(5), {6, channel}}, + {multiplexer.pin(6), {7, channel}}, + {multiplexer.pin(7), {8, channel}}, + {multiplexer.pin(8), {9, channel}}, + {multiplexer.pin(9), {10, channel}}, }; byte matrix[16][6][2] = { -/* 0 | 1 | 2 | 3 | 4 | 5 */ -/*0*/ {{1, 0}, {1, 1}, {1, 2}, {1, 3}, {1, 4}, {1, 5}}, -/*1*/ {{1, 6}, {1, 7}, {1, 8}, {1, 9}, {1, 10}, {1, 11}}, -/*2*/ {{1, 18}, {1, 19}, {1, 20}, {1, 21}, {1, 22}, {1, 23}}, -/*3*/ {{1, 48}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, -/*4*/ {{1, 42}, {1, 43}, {1, 44}, {1, 45}, {1, 46}, {1, 47}}, -/*5*/ {{1, 36}, {1, 37}, {1, 38}, {1, 39}, {1, 40}, {1, 41}}, -/*6*/ {{1, 30}, {1, 31}, {1, 32}, {1, 33}, {1, 34}, {1, 35}}, -/*7*/ {{1, 24}, {1, 25}, {1, 26}, {1, 27}, {1, 28}, {1, 29}}, -/*8*/ {{1, 12}, {1, 13}, {1, 14}, {1, 15}, {1, 16}, {1, 17}}, -/*a*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, -/*b*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, -/*c*/ {{2, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, -/*d*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, -/*e*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, -/*f*/ {{2, 1}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, + /* 0 | 1 | 2 | 3 | 4 | 5 */ + /*0*/ {{1, 0}, {1, 1}, {1, 2}, {1, 3}, {1, 4}, {1, 5}}, + /*1*/ {{1, 6}, {1, 7}, {1, 8}, {1, 9}, {1, 10}, {1, 11}}, + /*2*/ {{1, 18}, {1, 19}, {1, 20}, {1, 21}, {1, 22}, {1, 23}}, + /*3*/ {{1, 48}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, + /*4*/ {{1, 42}, {1, 43}, {1, 44}, {1, 45}, {1, 46}, {1, 47}}, + /*5*/ {{1, 36}, {1, 37}, {1, 38}, {1, 39}, {1, 40}, {1, 41}}, + /*6*/ {{1, 30}, {1, 31}, {1, 32}, {1, 33}, {1, 34}, {1, 35}}, + /*7*/ {{1, 24}, {1, 25}, {1, 26}, {1, 27}, {1, 28}, {1, 29}}, + /*8*/ {{1, 12}, {1, 13}, {1, 14}, {1, 15}, {1, 16}, {1, 17}}, + /*9*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, + /*a*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, + /*b*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, + /*c*/ {{2, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, + /*d*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, + /*e*/ {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, + /*f*/ {{2, 1}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, }; bool ref[16][6] = {{false}}; -unsigned char shift = 0; +unsigned char shift = 12; void setup() { for (size_t i = 0; i < KEYBOARD_INSIZE; ++i) { @@ -128,13 +129,16 @@ void button_matrix_mgt(void) { #ifndef DEBUG_MATRIX byte type = matrix[i][j][0]; byte key = matrix[i][j][1]; +#ifdef __PLATFORMIO_BUILD_DEBUG__ + midi.sendNoteOn({type, CHANNEL_3}, key); +#endif /* __PLATFORMIO_BUILD_DEBUG__ */ if (type == 1) { midi.sendNoteOn({key + shift, channel}, NOTE_VELOCITY); } else if (type == 2) { - // todo : note off + // todo : note off if (key == 0 && shift >= 12) { shift -= 12; - } else if (key == 1 && shift <= 0xFF - 47 - 12) { + } else if (key == 1 && shift <= 6 * 12) { shift += 12; } } @@ -164,8 +168,7 @@ void capa_sensor_mgt(void) { int static lasttouched; int currtouched = capa_sensor.touched(); - for (uint8_t i = 0; i < 12; i++) - { + for (uint8_t i = 0; i < 12; i++) { // it if *is* touched and *wasnt* touched before, alert! if ((currtouched & _BV(i)) && !(lasttouched & _BV(i))) { midi.sendCC({i, channel}, ON);