├── CV DAC.xlsx ├── Quantizer Schematic.pdf ├── Pictures ├── Quantizer 1.jpg ├── Quantizer 2.jpg └── Quantizer 3.jpg ├── Quantizer Cheat Sheet.PNG ├── README.md └── Quantizer1.0.ino /CV DAC.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luislutz/Arduino_Quantizer/HEAD/CV DAC.xlsx -------------------------------------------------------------------------------- /Quantizer Schematic.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luislutz/Arduino_Quantizer/HEAD/Quantizer Schematic.pdf -------------------------------------------------------------------------------- /Pictures/Quantizer 1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luislutz/Arduino_Quantizer/HEAD/Pictures/Quantizer 1.jpg -------------------------------------------------------------------------------- /Pictures/Quantizer 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luislutz/Arduino_Quantizer/HEAD/Pictures/Quantizer 2.jpg -------------------------------------------------------------------------------- /Pictures/Quantizer 3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luislutz/Arduino_Quantizer/HEAD/Pictures/Quantizer 3.jpg -------------------------------------------------------------------------------- /Quantizer Cheat Sheet.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luislutz/Arduino_Quantizer/HEAD/Quantizer Cheat Sheet.PNG -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Arduino_Quantizer 2 | Eurorack format Quantizer with Arduino Nano 3 | (based on Hagiwo Modulars original Design) 4 | 5 | Feature List: 6 | 7 | 8 | Scale Modes: 9 | The Scale is chosen by turning the Encoder Knob: 10 | 11 | 1. Chromatic 12 | 2. Major 13 | 3. Major Pentatonic 14 | 4. Major Pentatonic + 7 15 | 5. Natural Minor 16 | 6. Minor Pentatonic 17 | 7. Octaves 18 | 19 | 20 | Root Modes: 21 | The Root-Note is Selected by turning the same Encoder Knob while held pressed down! 22 | With the Rotate function All Scales are availiable from C, C-sharp, D, D-Sharp, E .... A, A-Sharp, B. So no need to transpose your oscillator anymore! 23 | Every Scale Mode is availiable with every Root Note Selected! 24 | 25 | 26 | CV-Modes: 27 | The CV-Mode is chosen by double clicking (and holding) the encoder button and turning the knob while pressed! 28 | CV-modes determin what the Mode CV input does: 29 | 30 | 1. Control Slide Function via CV (ON or OFF) 31 | 2. Control Slide Time via CV, in addition to what is set on the Slide Knob 32 | 3. Select the Scales via CV 33 | 4. Select the Root Note via CV 34 | 5. Transpose the incoming Pitch CV in Semitone-Steps 35 | 6. Transpose the incoming Pitch CV in Fifths (7 Semitones) 36 | 7. Transpose the incoming Pitch CV in Octaves (12 Semitones) 37 | 38 | 39 | TB-303 type Slide Function with Knob! 40 | 41 | Encoder with Switch to select everything 42 | 43 | A RGB LED to indicate the selected Scale. And in addition the Root, and CV Mode, when it is in the corresponding select mode. 44 | 45 | Pitch CV Input 46 | Mode CV Input for all the additional CV functions 47 | Gate/Trigger Output 48 | Quantized Pitch CV Output 49 | 50 | Toggle Switch to activate and deactivate current selected CV_Mode 51 | 52 | Buffered Output with Scale trimpot for calibraion! 53 | 54 | Inputs safe for Eurorack levels. 55 | 56 | 57 | -------------------------------------------------------------------------------- /Quantizer1.0.ino: -------------------------------------------------------------------------------- 1 | #define ENCODER_OPTIMIZE_INTERRUPTS 2 | #include 3 | #include 4 | 5 | 6 | //CV 7 | float CV_IN = 512;//CV_IN 8 | float old_CV_IN = 512;// 9 | int CV_INr = 512;//CV_IN 10 | int CV_INh = 10; 11 | int i = 0; // 12 | long old_CV_OUT = 0; 13 | 14 | 15 | static int DOUBLE_CLICK_TIME = 500; //Max time beetween double click detection in ms 16 | 17 | //slide 18 | int slide_CV = 0 ; //slide_knob 19 | int slide_time = 1 ; 20 | int scale = 1; 21 | int scale_enc = 1; 22 | int scale_CV = 0; 23 | int rotate = 0; 24 | int rotate_enc = 0; 25 | int rotate_CV = 0; 26 | int control = 0; 27 | int control_mode = 0; 28 | byte enc_switch_in = 0; 29 | unsigned long enc_switch_timer = 0; 30 | bool enc_switch_latch = false; 31 | byte enc_switch_counter = 0; 32 | byte enc_switch = 0; 33 | byte slide = 0;//0=OFF,1=ON 34 | byte toggle_switch = 0;//0=EXT,1=ON 35 | int j = 0; 36 | 37 | 38 | int CV_transpose = 0; 39 | 40 | 41 | 42 | 43 | int LED_Brightness = 50; 44 | 45 | 46 | Encoder myEnc(2, 3); 47 | float oldPosition1 = -999; 48 | float newPosition1 = -999; 49 | 50 | float oldPosition2 = -999; 51 | float newPosition2 = -999; 52 | 53 | float oldPosition3 = -999; 54 | float newPosition3 = -999; 55 | 56 | 57 | 58 | 59 | 60 | //------------------------------------scale list begin --------------------------------------- 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | //0=major 71 | const static word DAC_LSB_C_maj[61] PROGMEM = { 72 | 0, 136, 272, 340, 476, 612, 748, 816, 952, 1088, 1156, 1292, 1428, 1564, 1632, 1768, 1904, 1972, 2108, 2244, 2380, 2448, 2584, 2720, 2788, 2924, 3060, 3196, 3264, 3400, 3536, 3604, 3740 , 3876 , 4012 , 4080 73 | }; 74 | const static word CVIN_th_C_maj[62] PROGMEM = { 75 | 0, 17, 51, 77, 102, 136, 170, 196, 221, 255, 281, 306, 340, 374, 400, 425, 459, 485, 510, 544, 578, 604, 629, 663, 689, 714, 748, 782, 808, 833, 867, 893, 918, 952, 986, 1012 76 | }; 77 | 78 | 79 | 80 | 81 | 82 | 83 | const static word DAC_LSB_CS_maj[61] PROGMEM = { 84 | 0, 68, 204, 340, 408, 544, 680, 816, 884, 1020, 1156, 1224, 1360, 1496, 1632, 1700, 1836, 1972, 2040, 2176, 2312, 2448, 2516, 2652, 2788, 2856, 2992, 3128, 3264, 3332, 3468, 3604, 3672, 3808, 3944, 4080 85 | }; 86 | const static word CVIN_th_CS_maj[62] PROGMEM = { 87 | 0, 9, 34, 68, 94, 119, 153, 187, 213, 238, 272, 298, 323, 357, 391, 417, 442, 476, 502, 527, 561, 595, 621, 646, 680, 706, 731, 765, 799, 825, 850, 884, 910, 935, 969, 1003 88 | }; 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | const static word DAC_LSB_D_maj[61] PROGMEM = { 97 | 68, 136, 272, 408, 476, 612, 748, 884, 952, 1088, 1224, 1292, 1428, 1564, 1700, 1768, 1904, 2040, 2108, 2244, 2380, 2516, 2584, 2720, 2856, 2924, 3060, 3196, 3332, 3400, 3536, 3672, 3740, 3876, 4012 98 | }; 99 | const static word CVIN_th_D_maj[62] PROGMEM = { 100 | 0, 26, 51, 85, 111, 136, 170, 204, 230, 255, 289, 315, 340, 374, 408, 434, 459, 493, 519, 544, 578, 612, 638, 663, 697, 723, 748, 782, 816, 842, 867, 901, 927, 952, 986 101 | }; 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | const static word DAC_LSB_DS_maj[61] PROGMEM = { 110 | 0, 136, 204, 340, 476, 544, 680, 816, 952, 1020, 1156, 1292, 1360, 1496, 1632, 1768, 1836, 1972, 2108, 2176, 2312, 2448, 2584, 2652, 2788, 2924, 2992, 3128, 3264, 3400, 3468, 3604, 3740, 3808, 3944, 4080 111 | }; 112 | const static word CVIN_th_DS_maj[62] PROGMEM = { 113 | 0, 17, 43, 68, 102, 128, 153, 187, 221, 247, 272, 306, 332, 357, 391, 425, 451, 476, 510, 536, 561, 595, 629, 655, 680, 714, 740, 765, 799, 833, 859, 884, 918, 944, 969, 1003 114 | }; 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | const static word DAC_LSB_E_maj[61] PROGMEM = { 123 | 68, 204, 272, 408, 544, 612, 748, 884, 1020, 1088, 1224, 1360, 1428, 1564, 1700, 1836, 1904, 2040, 2176, 2244, 2380, 2516, 2652, 2720, 2856, 2992, 3060, 3196, 3332, 3468, 3536, 3672, 3808, 3876, 4012 124 | }; 125 | const static word CVIN_th_E_maj[62] PROGMEM = { 126 | 0, 34, 60, 85, 119, 145, 170, 204, 238, 264, 289, 323, 349, 374, 408, 442, 468, 493, 527, 553, 578, 612, 646, 672, 697, 731, 757, 782, 816, 850, 876, 901, 935, 961, 986 127 | }; 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | const static word DAC_LSB_F_maj[61] PROGMEM = { 136 | 0, 136, 272, 340, 476, 612, 680, 816, 952, 1088, 1156, 1292, 1428, 1496, 1632, 1768, 1904, 1972, 2108, 2244, 2312, 2448, 2584, 2720, 2788, 2924, 3060, 3128, 3264, 3400, 3536, 3604, 3740, 3876, 3944, 4080 137 | }; 138 | const static word CVIN_th_F_maj[62] PROGMEM = { 139 | 0, 17, 51, 77, 102, 136, 162, 187, 221, 255, 281, 306, 340, 366, 391, 425, 459, 485, 510, 544, 570, 595, 629, 663, 689, 714, 748, 774, 799, 833, 867, 893, 918, 952, 978, 1003 140 | }; 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | const static word DAC_LSB_FS_maj[61] PROGMEM = { 149 | 68, 204, 340, 408, 544, 680, 748, 884, 1020, 1156, 1224, 1360, 1496, 1564, 1700, 1836, 1972, 2040, 2176, 2312, 2380, 2516, 2652, 2788, 2856, 2992, 3128, 3196, 3332, 3468, 3604, 3672, 3808, 3944, 4012 150 | }; 151 | const static word CVIN_th_FS_maj[62] PROGMEM = { 152 | 0, 34, 68, 94, 119, 153, 179, 204, 238, 272, 298, 323, 357, 383, 408, 442, 476, 502, 527, 561, 587, 612, 646, 680, 706, 731, 765, 791, 816, 850, 884, 910, 935, 969, 995 153 | }; 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | const static word DAC_LSB_G_maj[61] PROGMEM = { 162 | 0, 136, 272, 408, 476, 612, 748, 816, 952, 1088, 1224, 1292, 1428, 1564, 1632, 1768, 1904, 2040, 2108, 2244, 2380, 2448, 2584, 2720, 2856, 2924, 3060, 3196, 3264, 3400, 3536, 3672, 3740, 3876, 4012, 4080 163 | }; 164 | const static word CVIN_th_G_maj[62] PROGMEM = { 165 | 0, 17, 51, 85, 111, 136, 170, 196, 221, 255, 289, 315, 340, 374, 400, 425, 459, 493, 519, 544, 578, 604, 629, 663, 697, 723, 748, 782, 808, 833, 867, 901, 927, 952, 986, 1012 166 | }; 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | const static word DAC_LSB_GS_maj[61] PROGMEM = { 175 | 0, 68, 204, 340, 476, 544, 680, 816, 884, 1020, 1156, 1292, 1360, 1496, 1632, 1700, 1836, 1972, 2108, 2176, 2312, 2448, 2516, 2652, 2788, 2924, 2992, 3128, 3264, 3332, 3468, 3604, 3740, 3808, 3944, 4080 176 | }; 177 | const static word CVIN_th_GS_maj[62] PROGMEM = { 178 | 0, 9, 34, 68, 102, 128, 153, 187, 213, 238, 272, 306, 332, 357, 391, 417, 442, 476, 510, 536, 561, 595, 621, 646, 680, 714, 740, 765, 799, 825, 850, 884, 918, 944, 969, 1003 179 | }; 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | const static word DAC_LSB_A_maj[61] PROGMEM = { 188 | 68, 136, 272, 408, 544, 612, 748, 884, 952, 1088, 1224, 1360, 1428, 1564, 1700, 1768, 1904, 2040, 2176, 2244, 2380, 2516, 2584, 2720, 2856, 2992, 3060, 3196, 3332, 3400, 3536, 3672, 3808, 3876, 4012 189 | }; 190 | const static word CVIN_th_A_maj[62] PROGMEM = { 191 | 0, 26, 51, 85, 119, 145, 170, 204, 230, 255, 289, 323, 349, 374, 408, 434, 459, 493, 527, 553, 578, 612, 638, 663, 697, 731, 757, 782, 816, 842, 867, 901, 935, 961, 986 192 | }; 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | const static word DAC_LSB_AS_maj[61] PROGMEM = { 201 | 0, 136, 204, 340, 476, 612, 680, 816, 952, 1020, 1156, 1292, 1428, 1496, 1632, 1768, 1836, 1972, 2108, 2244, 2312, 2448, 2584, 2652, 2788, 2924, 3060, 3128, 3264, 3400, 3468, 3604, 3740, 3876, 3944, 4080 202 | }; 203 | const static word CVIN_th_AS_maj[62] PROGMEM = { 204 | 0, 17, 43, 68, 102, 136, 162, 187, 221, 247, 272, 306, 340, 366, 391, 425, 451, 476, 510, 544, 570, 595, 629, 655, 680, 714, 748, 774, 799, 833, 859, 884, 918, 952, 978, 1003 205 | }; 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | const static word DAC_LSB_B_maj[61] PROGMEM = { 214 | 68, 204, 272, 408, 544, 680, 748, 884, 1020, 1088, 1224, 1360, 1496, 1564, 1700, 1836, 1904, 2040, 2176, 2312, 2380, 2516, 2652, 2720, 2856, 2992, 3128, 3196, 3332, 3468, 3536, 3672, 3808, 3944, 4012 215 | }; 216 | const static word CVIN_th_B_maj[62] PROGMEM = { 217 | 0, 34, 60, 85, 119, 153, 179, 204, 238, 264, 289, 323, 357, 383, 408, 442, 468, 493, 527, 561, 587, 612, 646, 672, 697, 731, 765, 791, 816, 850, 876, 901, 935, 969, 995 218 | }; 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | //1=major_pentatonic 239 | const static word DAC_LSB_C_mp[61] PROGMEM = { 240 | 0, 136, 272, 476, 612, 816, 952, 1088, 1292, 1428, 1632, 1768, 1904, 2108, 2244, 2448, 2584, 2720, 2924, 3060, 3264, 3400, 3536, 3740, 3876, 4080 241 | }; 242 | const static word CVIN_th_C_mp[62] PROGMEM = { 243 | 0, 17, 51, 94, 136, 179, 221, 255, 298, 340, 383, 425, 459, 502, 544, 587, 629, 663, 706, 748, 791, 833, 867, 910, 952, 995 244 | }; 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | const static word DAC_LSB_CS_mp[61] PROGMEM = { 254 | 68, 204, 340, 544, 680, 902, 1020, 1156, 1360, 1496, 1718, 1836, 1972, 2176, 2312, 2534, 2652, 2788, 2992, 3128, 3350, 3468, 3604, 3808, 3944 255 | }; 256 | const static word CVIN_th_CS_mp[62] PROGMEM = { 257 | 0, 34, 68, 111, 153, 198, 240, 272, 315, 357, 402, 444, 476, 519, 561, 606, 648, 680, 723, 765, 810, 852, 884, 927, 969 258 | }; 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | const static word DAC_LSB_D_mp[61] PROGMEM = { 267 | 136, 272, 408, 612, 748, 952, 1088, 1224, 1428, 1564, 1768, 1904, 2040, 2244, 2380, 2584, 2720, 2856, 3060, 3196, 3400, 3536, 3672, 3876, 4012 268 | }; 269 | const static word CVIN_th_D_mp[62] PROGMEM = { 270 | 0, 51, 85, 128, 170, 213, 255, 289, 332, 374, 417, 459, 493, 536, 578, 621, 663, 697, 740, 782, 825, 867, 901, 944, 986 271 | }; 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | const static word DAC_LSB_DS_mp[61] PROGMEM = { 280 | 0, 204, 340, 476, 680, 816, 1020, 1156, 1292, 1496, 1632, 1836, 1972, 2108, 2312, 2448, 2652, 2788, 2924, 3128, 3264, 3468, 3604, 3740, 3944, 4080 281 | }; 282 | const static word CVIN_th_DS_mp[62] PROGMEM = { 283 | 0, 26, 68, 102, 145, 187, 230, 272, 306, 349, 391, 434, 476, 510, 553, 595, 638, 680, 714, 757, 799, 842, 884, 918, 961, 1003 284 | }; 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | const static word DAC_LSB_E_mp[61] PROGMEM = { 293 | 68, 272, 408, 544, 748, 884, 1088, 1224, 1360, 1564, 1700, 1904, 2040, 2176, 2380, 2516, 2720, 2856, 2992, 3196, 3332, 3536, 3672, 3808, 4012 294 | }; 295 | const static word CVIN_th_E_mp[62] PROGMEM = { 296 | 0, 43, 85, 119, 162, 204, 247, 289, 323, 366, 408, 451, 493, 527, 570, 612, 655, 697, 731, 774, 816, 859, 901, 935, 978 297 | }; 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | const static word DAC_LSB_F_mp[61] PROGMEM = { 306 | 0, 136, 340, 476, 612, 816, 952, 1156, 1292, 1428, 1632, 1768, 1972, 2108, 2244, 2448, 2584, 2788, 2924, 3060, 3264, 3400, 3604, 3740, 3876, 4080 307 | }; 308 | const static word CVIN_th_F_mp[62] PROGMEM = { 309 | 0, 17, 60, 102, 136, 179, 221, 264, 306, 340, 383, 425, 468, 510, 544, 587, 629, 672, 714, 748, 791, 833, 876, 918, 952, 995 310 | }; 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | const static word DAC_LSB_FS_mp[61] PROGMEM = { 319 | 68, 204, 408, 544, 680, 884, 1020, 1224, 1360, 1496, 1700, 1836, 2040, 2176, 2312, 2516, 2652, 2856, 2992, 3128, 3332, 3468, 3672, 3808, 3944 320 | }; 321 | const static word CVIN_th_FS_mp[62] PROGMEM = { 322 | 0, 34, 77, 119, 153, 196, 238, 281, 323, 357, 400, 442, 485, 527, 561, 604, 646, 689, 731, 765, 808, 850, 893, 935, 969 323 | }; 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | const static word DAC_LSB_G_mp[61] PROGMEM = { 332 | 136, 272, 476, 612, 748, 952, 1088, 1292, 1428, 1564, 1768, 1904, 2108, 2244, 2380, 2584, 2720, 2924, 3060, 3196, 3400, 3536, 3740, 3876, 4012 333 | }; 334 | const static word CVIN_th_G_mp[62] PROGMEM = { 335 | 0, 51, 94, 136, 170, 213, 255, 298, 340, 374, 417, 459, 502, 544, 578, 621, 663, 706, 748, 782, 825, 867, 910, 952, 986 336 | }; 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | const static word DAC_LSB_GS_mp[61] PROGMEM = { 345 | 0, 204, 340, 544, 680, 816, 1020, 1156, 1360, 1496, 1632, 1836, 1972, 2176, 2312, 2448, 2652, 2788, 2992, 3128, 3264, 3468, 3604, 3808, 3944, 4080 346 | }; 347 | const static word CVIN_th_GS_mp[62] PROGMEM = { 348 | 0, 26, 68, 111, 153, 187, 230, 272, 315, 357, 391, 434, 476, 519, 561, 595, 638, 680, 723, 765, 799, 842, 884, 927, 969, 1003 349 | }; 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | const static word DAC_LSB_A_mp[61] PROGMEM = { 358 | 68, 272, 408, 612, 748, 884, 1088, 1224, 1428, 1564, 1700, 1904, 2040, 2244, 2380, 2516, 2720, 2856, 3060, 3196, 3332, 3536, 3672, 3876, 4012 359 | }; 360 | const static word CVIN_th_A_mp[62] PROGMEM = { 361 | 0, 43, 85, 128, 170, 204, 247, 289, 332, 374, 408, 451, 493, 536, 578, 612, 655, 697, 740, 782, 816, 859, 901, 944, 986 362 | }; 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | const static word DAC_LSB_AS_mp[61] PROGMEM = { 371 | 0, 136, 340, 476, 680, 816, 952, 1156, 1292, 1496, 1632, 1768, 1972, 2108, 2312, 2448, 2584, 2788, 2924, 3128, 3264, 3400, 3604, 3740, 3944, 4080 372 | }; 373 | const static word CVIN_th_AS_mp[62] PROGMEM = { 374 | 0, 17, 60, 102, 145, 187, 221, 264, 306, 349, 391, 425, 468, 510, 553, 595, 629, 672, 714, 757, 799, 833, 876, 918, 961, 1003 375 | }; 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | const static word DAC_LSB_B_mp[61] PROGMEM = { 384 | 68, 204, 408, 544, 748, 884, 1020, 1224, 1360, 1564, 1700, 1836, 2040, 2176, 2380, 2516, 2652, 2856, 2992, 3196, 3332, 3468, 3672, 3808, 4012 385 | }; 386 | const static word CVIN_th_B_mp[62] PROGMEM = { 387 | 0, 34, 77, 119, 162, 204, 238, 281, 323, 366, 408, 442, 485, 527, 570, 612, 646, 689, 731, 774, 816, 850, 893, 935, 978 388 | }; 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | //2=major_pentatonic+7 405 | const static word DAC_LSB_C_mp7[61] PROGMEM = { 406 | 0, 136, 272, 476, 612, 748, 816, 952, 1088, 1292, 1428, 1564, 1632, 1768, 1904, 2108, 2244, 2380, 2448 , 2584 , 2720 , 2924 , 3060 ,3196 , 3264 , 3400, 3536 , 3740, 3876 , 4012 , 4080 407 | }; 408 | const static word CVIN_th_C_mp7[62] PROGMEM = { 409 | 0, 17, 51, 94, 136, 170, 196, 221, 255, 298, 340, 374, 400, 425, 459, 502, 544, 578, 604, 629, 663, 706, 748, 782, 808, 833, 867, 910, 952, 986, 1012 410 | }; 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | const static word DAC_LSB_CS_mp7[61] PROGMEM = { 419 | 0, 68, 204, 340, 544, 680, 816, 884, 1020, 1156, 1360, 1496, 1632, 1700, 1836, 1972, 2176, 2312, 2448, 2516, 2652, 2788, 2992, 3128, 3264, 3332, 3468, 3604, 3808, 3944, 4080 420 | }; 421 | const static word CVIN_th_CS_mp7[62] PROGMEM = { 422 | 0, 9, 34, 68, 111, 153, 187, 213, 238, 272, 315, 357, 391, 417, 442, 476, 519, 561, 595, 621, 646, 680, 723, 765, 799, 825, 850, 884, 927, 969, 1003 423 | }; 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | const static word DAC_LSB_D_mp7[61] PROGMEM = { 432 | 68, 136, 272, 408, 612, 748, 884, 952, 1088, 1224, 1428, 1564, 1700, 1768, 1904, 2040, 2244, 2380, 2516, 2584, 2720, 2856, 3060, 3196, 3332, 3400, 3536, 3672, 3876, 4012 433 | 434 | }; 435 | const static word CVIN_th_D_mp7[62] PROGMEM = { 436 | 0, 26, 51, 85, 128, 170, 204, 230, 255, 289, 332, 374, 408, 434, 459, 493, 536, 578, 612, 638, 663, 697, 740, 782, 816, 842, 867, 901, 944, 986 437 | 438 | }; 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | const static word DAC_LSB_DS_mp7[61] PROGMEM = { 447 | 0, 136, 204, 340, 476, 680, 816, 952, 1020, 1156, 1292, 1496, 1632, 1768, 1836, 1972, 2108, 2312, 2448, 2584, 2652, 2788, 2924, 3128, 3264, 3400, 3468, 3604, 3740, 3944, 4080 448 | 449 | }; 450 | const static word CVIN_th_DS_mp7[62] PROGMEM = { 451 | 0, 17, 43, 68, 102, 145, 187, 221, 247, 272, 306, 349, 391, 425, 451, 476, 510, 553, 595, 629, 655, 680, 714, 757, 799, 833, 859, 884, 918, 961, 1003 452 | 453 | }; 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | const static word DAC_LSB_E_mp7[61] PROGMEM = { 462 | 68, 204, 272, 408, 544, 748, 884, 1020, 1088, 1224, 1360, 1564, 1700, 1836, 1904, 2040, 2176, 2380, 2516, 2652, 2720, 2856, 2992, 3196, 3332, 3468, 3536, 3672, 3808, 4012 463 | 464 | }; 465 | const static word CVIN_th_E_mp7[62] PROGMEM = { 466 | 0, 34, 60, 85, 119, 162, 204, 238, 264, 289, 323, 366, 408, 442, 468, 493, 527, 570, 612, 646, 672, 697, 731, 774, 816, 850, 876, 901, 935, 978 467 | 468 | }; 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | const static word DAC_LSB_F_mp7[61] PROGMEM = { 477 | 0, 136, 272, 340, 476, 612, 816, 952, 1088, 1156, 1292, 1428, 1632, 1768, 1904, 1972, 2108, 2244, 2448, 2584, 2720, 2788, 2924, 3060, 3264, 3400, 3536, 3604, 3740, 3876, 4080 478 | 479 | }; 480 | const static word CVIN_th_F_mp7[62] PROGMEM = { 481 | 0, 17, 51, 77, 102, 136, 179, 221, 255, 281, 306, 340, 383, 425, 459, 485, 510, 544, 587, 629, 663, 689, 714, 748, 791, 833, 867, 893, 918, 952, 995 482 | 483 | }; 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | const static word DAC_LSB_FS_mp7[61] PROGMEM = { 492 | 68, 204, 340, 408, 544, 680, 884, 1020, 1156, 1224, 1360, 1496, 1700, 1836, 1972, 2040, 2176, 2312, 2516, 2652, 2788, 2856, 2992, 3128, 3332, 3468, 3604, 3672, 3808, 3944 493 | 494 | }; 495 | const static word CVIN_th_FS_mp7[62] PROGMEM = { 496 | 0, 34, 68, 94, 119, 153, 196, 238, 272, 298, 323, 357, 400, 442, 476, 502, 527, 561, 604, 646, 680, 706, 731, 765, 808, 850, 884, 910, 935, 969 497 | 498 | }; 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | const static word DAC_LSB_G_mp7[61] PROGMEM = { 507 | 136, 272, 408, 476, 612, 748, 952, 1088, 1224, 1292, 1428, 1564, 1768, 1904, 2040, 2108, 2244, 2380, 2584, 2720, 2856, 2924, 3060, 3196, 3400, 3536, 3672, 3740, 3876, 4012 508 | 509 | }; 510 | const static word CVIN_th_G_mp7[62] PROGMEM = { 511 | 0, 51, 85, 111, 136, 170, 213, 255, 289, 315, 340, 374, 417, 459, 493, 519, 544, 578, 621, 663, 697, 723, 748, 782, 825, 867, 901, 927, 952, 986 512 | 513 | }; 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | const static word DAC_LSB_GS_mp7[61] PROGMEM = { 522 | 0, 204, 340, 476, 544, 680, 816, 1020, 1156, 1292, 1360, 1496, 1632, 1836, 1972, 2108, 2176, 2312, 2448, 2652, 2788, 2924, 2992, 3128, 3264, 3468, 3604, 3740, 3808, 3944, 4080 523 | 524 | }; 525 | const static word CVIN_th_GS_mp7[62] PROGMEM = { 526 | 0, 26, 68, 102, 128, 153, 187, 230, 272, 306, 332, 357, 391, 434, 476, 510, 536, 561, 595, 638, 680, 714, 740, 765, 799, 842, 884, 918, 944, 969, 1003 527 | 528 | }; 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | const static word DAC_LSB_A_mp7[61] PROGMEM = { 537 | 68, 272, 408, 544, 612, 748, 884, 1088, 1224, 1360, 1428, 1564, 1700, 1904, 2040, 2176, 2244, 2380, 2516, 2720, 2856, 2992, 3060, 3196, 3332, 3536, 3672, 3808, 3876, 4012 538 | 539 | }; 540 | const static word CVIN_th_A_mp7[62] PROGMEM = { 541 | 0, 43, 85, 119, 145, 170, 204, 247, 289, 323, 349, 374, 408, 451, 493, 527, 553, 578, 612, 655, 697, 731, 757, 782, 816, 859, 901, 935, 961, 986 542 | 543 | }; 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | const static word DAC_LSB_AS_mp7[61] PROGMEM = { 552 | 0, 136, 340, 476, 612, 680, 816, 952, 1156, 1292, 1428, 1496, 1632, 1768, 1972, 2108, 2244, 2312, 2448, 2584, 2788, 2924, 3060, 3128, 3264, 3400, 3604, 3740, 3876, 3944, 4080 553 | 554 | }; 555 | const static word CVIN_th_AS_mp7[62] PROGMEM = { 556 | 0, 17, 60, 102, 136, 162, 187, 221, 264, 306, 340, 366, 391, 425, 468, 510, 544, 570, 595, 629, 672, 714, 748, 774, 799, 833, 876, 918, 952, 978, 1003 557 | 558 | }; 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | const static word DAC_LSB_B_mp7[61] PROGMEM = { 567 | 68, 204, 408, 544, 680, 748, 884, 1020, 1224, 1360, 1496, 1564, 1700, 1836, 2040, 2176, 2312, 2380, 2516, 2652, 2856, 2992, 3128, 3196, 3332, 3468, 3672, 3808, 3944, 4012 568 | 569 | }; 570 | const static word CVIN_th_B_mp7[62] PROGMEM = { 571 | 0, 34, 77, 119, 153, 179, 204, 238, 281, 323, 357, 383, 408, 442, 485, 527, 561, 587, 612, 646, 689, 731, 765, 791, 816, 850, 893, 935, 969, 995 572 | 573 | }; 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | //3=natural minor , derived from major scales list 590 | //4=minor pentatonic , derived from major pentatonic scales list 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | //5=chromatic 608 | const static word DAC_LSB_chr[61] PROGMEM = { 609 | 0, 68, 136, 204, 272, 340, 408, 476, 544, 612, 680, 748, 816, 884, 952, 1020, 1088, 1156, 1224, 1292, 1360, 1428, 1496, 1564, 1632, 1700, 1768, 1836, 1904, 1972, 2040 , 2108, 2176, 2244, 2312 , 2380, 2448, 2516, 2584, 2652 , 2720, 2788, 2856, 2924, 2992, 3060 , 3128, 3196, 3264, 3332, 3400 , 3468 , 3536 , 3604, 3672, 3740, 3808, 3876, 3944, 4012, 4080 610 | }; 611 | const static word CVIN_th_chr[62] PROGMEM = { 612 | 0 , 9 ,26, 43, 60, 77, 94, 111, 128, 145, 162, 179, 196, 213, 230, 247, 264, 281, 298, 315, 332, 349, 366, 383, 400, 417, 434, 451, 468, 485, 502, 519, 536, 553, 570 ,587, 604, 621, 638, 655, 672, 689, 706, 723, 740, 757, 774, 791, 808, 825, 842, 859 ,876, 893, 910, 927, 944, 961, 978, 995, 1012 613 | }; 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | //6=octave 627 | const static word DAC_LSB_C_oct[61] PROGMEM = { 628 | 0, 816, 1632, 2448, 3264, 4080 629 | }; 630 | const static word CVIN_th_C_oct[62] PROGMEM = { 631 | 0, 102, 306, 510, 714, 918 632 | }; 633 | 634 | 635 | 636 | 637 | 638 | const static word DAC_LSB_CS_oct[61] PROGMEM = { 639 | 68, 884, 1700, 2516, 3332 640 | }; 641 | const static word CVIN_th_CS_oct[62] PROGMEM = { 642 | 0, 119, 323, 527, 731 643 | }; 644 | 645 | 646 | 647 | 648 | 649 | const static word DAC_LSB_D_oct[61] PROGMEM = { 650 | 136, 952, 1768, 2584, 3400 651 | }; 652 | const static word CVIN_th_D_oct[62] PROGMEM = { 653 | 0, 136, 340, 544, 748 654 | }; 655 | 656 | 657 | 658 | 659 | 660 | const static word DAC_LSB_DS_oct[61] PROGMEM = { 661 | 204, 1020, 1836, 2652, 3468 662 | }; 663 | const static word CVIN_th_DS_oct[62] PROGMEM = { 664 | 0, 153, 357, 561, 765 665 | }; 666 | 667 | 668 | 669 | 670 | const static word DAC_LSB_E_oct[61] PROGMEM = { 671 | 272, 1088, 1904, 2720, 3536 672 | }; 673 | const static word CVIN_th_E_oct[62] PROGMEM = { 674 | 0, 170, 374, 578, 782 675 | }; 676 | 677 | 678 | 679 | 680 | const static word DAC_LSB_F_oct[61] PROGMEM = { 681 | 340, 1156, 1972, 2788, 3604 682 | }; 683 | const static word CVIN_th_F_oct[62] PROGMEM = { 684 | 0, 187, 391, 595, 799 685 | }; 686 | 687 | 688 | 689 | 690 | 691 | const static word DAC_LSB_FS_oct[61] PROGMEM = { 692 | 408, 1224, 2040, 2856, 3672 693 | }; 694 | const static word CVIN_th_FS_oct[62] PROGMEM = { 695 | 0, 204, 408, 612, 816 696 | }; 697 | 698 | 699 | 700 | 701 | 702 | const static word DAC_LSB_G_oct[61] PROGMEM = { 703 | 476, 1292, 2108, 2924, 3740 704 | }; 705 | const static word CVIN_th_G_oct[62] PROGMEM = { 706 | 0, 221, 425, 629, 833 707 | }; 708 | 709 | 710 | 711 | 712 | 713 | const static word DAC_LSB_GS_oct[61] PROGMEM = { 714 | 544, 1360, 2176, 2992, 3808 715 | }; 716 | const static word CVIN_th_GS_oct[62] PROGMEM = { 717 | 0, 238, 442, 646, 850 718 | }; 719 | 720 | 721 | 722 | 723 | 724 | const static word DAC_LSB_A_oct[61] PROGMEM = { 725 | 612, 1428, 2244, 3060, 3876 726 | }; 727 | const static word CVIN_th_A_oct[62] PROGMEM = { 728 | 0, 255, 459, 663, 867 729 | }; 730 | 731 | 732 | 733 | 734 | 735 | const static word DAC_LSB_AS_oct[61] PROGMEM = { 736 | 680, 1496, 2312, 3128, 3944 737 | }; 738 | const static word CVIN_th_AS_oct[62] PROGMEM = { 739 | 0, 272, 476, 680, 884 740 | }; 741 | 742 | 743 | 744 | 745 | 746 | const static word DAC_LSB_B_oct[61] PROGMEM = { 747 | 748, 1564, 2380, 3196, 4012 748 | }; 749 | const static word CVIN_th_B_oct[62] PROGMEM = { 750 | 0, 289, 493, 697, 901 751 | }; 752 | 753 | 754 | 755 | 756 | 757 | // ------------------------SCale List DONE !-------------------------- 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | void setup() { 770 | 771 | pinMode(9, OUTPUT); //Color_LED_R 772 | pinMode(11, OUTPUT); //Color_LED_G 773 | pinMode(10, OUTPUT); //Color_LED_B 774 | pinMode(5, OUTPUT); //gate_out 775 | pinMode(6, INPUT_PULLUP); //Encoder Button 776 | pinMode(7, INPUT_PULLUP); //switch 777 | 778 | 779 | Serial.begin(9600); 780 | Wire.begin(); 781 | 782 | } 783 | 784 | 785 | 786 | 787 | 788 | void loop() { 789 | 790 | 791 | 792 | 793 | 794 | 795 | enc_switch_in = !digitalRead(6); 796 | 797 | if ((enc_switch_in == true) && (enc_switch_latch == false)) { //Count Times Button Pressed 798 | enc_switch_counter++; 799 | enc_switch_timer = millis(); 800 | enc_switch_latch = true; 801 | } 802 | else if (enc_switch_in == false) { 803 | enc_switch_latch = false; 804 | } 805 | 806 | 807 | if ((millis() >= enc_switch_timer + DOUBLE_CLICK_TIME) && (enc_switch_in == false)) { //Reset Count when no Button Pressed 808 | enc_switch_counter = 0; 809 | } 810 | 811 | 812 | 813 | 814 | if ((enc_switch_in == true) && (enc_switch_counter == 1)) { 815 | enc_switch = 1; 816 | } 817 | 818 | else if ((enc_switch_in == true) && (enc_switch_counter >= 2)) { 819 | enc_switch = 2; 820 | } 821 | 822 | else if ((enc_switch_counter == 0) && (enc_switch_in == false)) { 823 | enc_switch = 0; 824 | } 825 | 826 | 827 | 828 | 829 | Serial.println(enc_switch_latch); 830 | 831 | 832 | old_CV_IN = CV_IN; 833 | 834 | 835 | if (enc_switch == 0) { 836 | newPosition1 = myEnc.read(); 837 | if ( (newPosition1 - 3) / 4 > oldPosition1 / 4) { 838 | oldPosition1 = newPosition1; 839 | oldPosition2 = newPosition1; 840 | oldPosition3 = newPosition1; 841 | scale_enc = scale_enc - 1; 842 | } 843 | 844 | else if ( (newPosition1 + 3) / 4 < oldPosition1 / 4 ) { 845 | oldPosition1 = newPosition1; 846 | oldPosition2 = newPosition1; 847 | oldPosition3 = newPosition1; 848 | scale_enc = scale_enc + 1; 849 | } 850 | 851 | if ( scale_enc < 0) { 852 | scale_enc = 6; 853 | } 854 | else if ( scale_enc >= 7 ) { 855 | scale_enc = 0; 856 | } 857 | 858 | scale = scale_enc + scale_CV; 859 | if (scale >= 7) { 860 | scale = scale - 7; 861 | } 862 | 863 | 864 | } 865 | 866 | 867 | 868 | else if (enc_switch == 1) { 869 | 870 | newPosition2 = myEnc.read(); 871 | if ( (newPosition2 - 3) / 4 > oldPosition2 / 4) { 872 | oldPosition2 = newPosition2; 873 | oldPosition1 = newPosition2; 874 | oldPosition3 = newPosition2; 875 | rotate_enc = rotate_enc - 1; 876 | } 877 | 878 | else if ( (newPosition2 + 3) / 4 < oldPosition2 / 4 ) { 879 | oldPosition2 = newPosition2; 880 | oldPosition1 = newPosition2; 881 | oldPosition3 = newPosition2; 882 | rotate_enc = rotate_enc + 1; 883 | } 884 | 885 | if ( rotate_enc < 0) { 886 | rotate_enc = 11; 887 | } 888 | else if ( rotate_enc >= 12 ) { 889 | rotate_enc = 0; 890 | } 891 | } 892 | 893 | rotate = rotate_enc + rotate_CV; 894 | if (rotate >= 12) { 895 | rotate = rotate - 12; 896 | } 897 | 898 | 899 | 900 | 901 | 902 | else if (enc_switch == 2) { 903 | 904 | newPosition3 = myEnc.read(); 905 | if ( (newPosition3 - 3) / 4 > oldPosition3 / 4) { 906 | oldPosition3 = newPosition3; 907 | oldPosition1 = newPosition3; 908 | oldPosition2 = newPosition3; 909 | control_mode = control_mode - 1; 910 | } 911 | 912 | else if ( (newPosition3 + 3) / 4 < oldPosition3 / 4 ) { 913 | oldPosition3 = newPosition3; 914 | oldPosition1 = newPosition3; 915 | oldPosition2 = newPosition3; 916 | control_mode = control_mode + 1; 917 | } 918 | 919 | if ( control_mode < 0) { 920 | control_mode = 6; 921 | } 922 | else if ( control_mode >= 7 ) { 923 | control_mode = 0; 924 | } 925 | 926 | } 927 | 928 | 929 | 930 | 931 | 932 | 933 | //-------------------LED---------------------- 934 | 935 | if (enc_switch == 0) { 936 | 937 | switch (scale) { 938 | case 0://紫 939 | LED(255, 0, 0); 940 | break; 941 | 942 | case 1://青 943 | LED(255, 127, 0); 944 | break; 945 | 946 | case 2://水色 947 | LED(0, 255, 0); 948 | break; 949 | 950 | case 3://緑 951 | LED(0, 255, 255); 952 | break; 953 | 954 | case 4://黄色 955 | LED(0, 0, 255); 956 | break; 957 | 958 | case 5://赤 959 | LED(255, 0, 255); 960 | break; 961 | 962 | case 6://白 963 | LED(255, 255, 255); 964 | break; 965 | } 966 | } 967 | 968 | else if (enc_switch == 1) { 969 | 970 | switch (rotate) { 971 | case 0: 972 | LED(255, 0, 0); 973 | break; 974 | 975 | case 1: 976 | LED(255, 127, 0); 977 | break; 978 | 979 | case 2: 980 | LED(255, 255, 0); 981 | break; 982 | 983 | case 3: 984 | LED(127, 255, 0); 985 | break; 986 | 987 | case 4: 988 | LED(0, 255, 0); 989 | break; 990 | 991 | case 5: 992 | LED(0, 255, 127); 993 | break; 994 | 995 | case 6: 996 | LED(0, 255, 255); 997 | break; 998 | 999 | case 7: 1000 | LED(0, 127, 255); 1001 | break; 1002 | 1003 | case 8: 1004 | LED(0, 0, 255); 1005 | break; 1006 | 1007 | case 9: 1008 | LED(127, 0, 255); 1009 | break; 1010 | 1011 | case 10: 1012 | LED(255, 0, 255); 1013 | break; 1014 | 1015 | case 11: 1016 | LED(255, 0, 127); 1017 | break; 1018 | } 1019 | } 1020 | 1021 | 1022 | 1023 | 1024 | else if (enc_switch == 2) { 1025 | 1026 | switch (control_mode) { 1027 | case 0:// 1028 | LED(255, 0, 0); 1029 | break; 1030 | 1031 | case 1:// 1032 | LED(255, 127, 0); 1033 | break; 1034 | 1035 | case 2:// 1036 | LED(0, 255, 0); 1037 | break; 1038 | 1039 | case 3:// 1040 | LED(0, 255, 255); 1041 | break; 1042 | 1043 | case 4:// 1044 | LED(0, 0, 255); 1045 | break; 1046 | 1047 | case 5:// 1048 | LED(255, 0, 255); 1049 | break; 1050 | 1051 | case 6:// 1052 | LED(255, 255, 255); 1053 | break; 1054 | } 1055 | } 1056 | 1057 | 1058 | 1059 | 1060 | 1061 | //--------------slide-------------------------------------- 1062 | toggle_switch = digitalRead(7); 1063 | slide_CV = analogRead(0); 1064 | control = analogRead(3); 1065 | slide_time = pow(slide_CV / 50, 2) + 1; 1066 | 1067 | switch (control_mode) { 1068 | 1069 | 1070 | case 0: //CV controlling Slide ON/OFF 1071 | if (toggle_switch == 0 ) { 1072 | 1073 | if (control > 255) { 1074 | slide = 1; 1075 | } 1076 | 1077 | else { 1078 | slide = 0; 1079 | } 1080 | } 1081 | 1082 | else if (toggle_switch == 1 ) { 1083 | slide = 1; 1084 | } 1085 | break; 1086 | 1087 | 1088 | 1089 | 1090 | 1091 | case 1: //CV controlling Slide Time 1092 | 1093 | if (toggle_switch == 0 ) { 1094 | slide = 1; 1095 | slide_CV = slide_CV + control; 1096 | slide_time = pow(slide_CV / 50, 2) + 1; 1097 | } 1098 | 1099 | else if (toggle_switch == 1 ) { 1100 | slide = 1; 1101 | } 1102 | break; 1103 | 1104 | 1105 | 1106 | 1107 | 1108 | case 2: //CV controlling Scales 1109 | if (toggle_switch == 0 ) { 1110 | scale_CV = map(control,0,1023,0,7); 1111 | slide = 1; 1112 | } 1113 | 1114 | else if (toggle_switch == 1 ) { 1115 | slide = 1; 1116 | scale_CV = 0; 1117 | } 1118 | break; 1119 | 1120 | 1121 | 1122 | 1123 | 1124 | case 3: //CV controlling Rotation (C to B) 1125 | if (toggle_switch == 0 ) { 1126 | rotate_CV = map(control,0,1023,0,12); 1127 | slide = 1; 1128 | } 1129 | 1130 | else if (toggle_switch == 1 ) { 1131 | slide = 1; 1132 | rotate_CV=0; 1133 | } 1134 | break; 1135 | 1136 | 1137 | 1138 | 1139 | 1140 | case 4: //CV transposing in Semitones 1141 | if (toggle_switch == 0 ) { 1142 | CV_transpose = 17*map(control,0,1023,0,60); 1143 | slide = 1; 1144 | } 1145 | 1146 | else if (toggle_switch == 1 ) { 1147 | CV_transpose = 0; 1148 | slide = 1; 1149 | } 1150 | break; 1151 | 1152 | 1153 | 1154 | 1155 | 1156 | case 5: //CV transposing in Fifths (7 Semitones) 1157 | if (toggle_switch == 0 ) { 1158 | CV_transpose = 119*map(control,0,1023,0,8); 1159 | slide = 1; 1160 | } 1161 | 1162 | else if (toggle_switch == 1 ) { 1163 | CV_transpose = 0; 1164 | slide = 1; 1165 | } 1166 | break; 1167 | 1168 | 1169 | 1170 | 1171 | case 6: //CV transposing in Octaves (12 Semitones) 1172 | if (toggle_switch == 0 ) { 1173 | CV_transpose = 204*map(control,0,1023,0,5); 1174 | slide = 1; 1175 | } 1176 | 1177 | else if (toggle_switch == 1 ) { 1178 | CV_transpose = 0; 1179 | slide = 1; 1180 | } 1181 | break; 1182 | 1183 | 1184 | 1185 | } 1186 | 1187 | 1188 | 1189 | 1190 | 1191 | //----------------CV-------------------------------------- 1192 | CV_IN = analogRead(7)+CV_transpose; 1193 | 1194 | if ( abs(old_CV_IN - CV_IN ) > 10 ) {//ノ 1195 | 1196 | j = 0;//slide reset 1197 | 1198 | for ( i = 0; i <= 61 ; i++ ) { 1199 | switch (scale) { 1200 | 1201 | 1202 | 1203 | 1204 | 1205 | case 0://0=chromatic 1206 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_chr[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_chr[i + 1])))) { 1207 | CV_INh = i; 1208 | DAC(pgm_read_word(&(DAC_LSB_chr[CV_INh]))); 1209 | goto DAC_done; 1210 | } 1211 | break; 1212 | 1213 | 1214 | 1215 | 1216 | 1217 | 1218 | 1219 | 1220 | 1221 | 1222 | 1223 | case 1://1=major 1224 | switch (rotate) { 1225 | 1226 | case 0: 1227 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_C_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_C_maj[i + 1])))) { 1228 | CV_INh = i; 1229 | DAC(pgm_read_word(&(DAC_LSB_C_maj[CV_INh]))); 1230 | goto DAC_done; 1231 | } 1232 | break; 1233 | 1234 | case 1: 1235 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_CS_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_CS_maj[i + 1])))) { 1236 | CV_INh = i; 1237 | DAC(pgm_read_word(&(DAC_LSB_CS_maj[CV_INh]))); 1238 | goto DAC_done; 1239 | } 1240 | break; 1241 | 1242 | case 2: 1243 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_D_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_D_maj[i + 1])))) { 1244 | CV_INh = i; 1245 | DAC(pgm_read_word(&(DAC_LSB_D_maj[CV_INh]))); 1246 | goto DAC_done; 1247 | } 1248 | break; 1249 | 1250 | case 3: 1251 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_DS_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_DS_maj[i + 1])))) { 1252 | CV_INh = i; 1253 | DAC(pgm_read_word(&(DAC_LSB_DS_maj[CV_INh]))); 1254 | goto DAC_done; 1255 | } 1256 | break; 1257 | 1258 | case 4: 1259 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_E_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_E_maj[i + 1])))) { 1260 | CV_INh = i; 1261 | DAC(pgm_read_word(&(DAC_LSB_E_maj[CV_INh]))); 1262 | goto DAC_done; 1263 | } 1264 | break; 1265 | 1266 | case 5: 1267 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_F_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_F_maj[i + 1])))) { 1268 | CV_INh = i; 1269 | DAC(pgm_read_word(&(DAC_LSB_F_maj[CV_INh]))); 1270 | goto DAC_done; 1271 | } 1272 | break; 1273 | 1274 | case 6: 1275 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_FS_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_FS_maj[i + 1])))) { 1276 | CV_INh = i; 1277 | DAC(pgm_read_word(&(DAC_LSB_FS_maj[CV_INh]))); 1278 | goto DAC_done; 1279 | } 1280 | break; 1281 | 1282 | case 7: 1283 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_G_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_G_maj[i + 1])))) { 1284 | CV_INh = i; 1285 | DAC(pgm_read_word(&(DAC_LSB_G_maj[CV_INh]))); 1286 | goto DAC_done; 1287 | } 1288 | break; 1289 | 1290 | case 8: 1291 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_GS_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_GS_maj[i + 1])))) { 1292 | CV_INh = i; 1293 | DAC(pgm_read_word(&(DAC_LSB_GS_maj[CV_INh]))); 1294 | goto DAC_done; 1295 | } 1296 | break; 1297 | 1298 | case 9: 1299 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_A_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_A_maj[i + 1])))) { 1300 | CV_INh = i; 1301 | DAC(pgm_read_word(&(DAC_LSB_A_maj[CV_INh]))); 1302 | goto DAC_done; 1303 | } 1304 | break; 1305 | 1306 | case 10: 1307 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_AS_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_AS_maj[i + 1])))) { 1308 | CV_INh = i; 1309 | DAC(pgm_read_word(&(DAC_LSB_AS_maj[CV_INh]))); 1310 | goto DAC_done; 1311 | } 1312 | break; 1313 | 1314 | case 11: 1315 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_B_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_B_maj[i + 1])))) { 1316 | CV_INh = i; 1317 | DAC(pgm_read_word(&(DAC_LSB_B_maj[CV_INh]))); 1318 | goto DAC_done; 1319 | } 1320 | break; 1321 | } 1322 | 1323 | break; 1324 | 1325 | 1326 | 1327 | 1328 | 1329 | 1330 | 1331 | 1332 | 1333 | 1334 | case 2://2=major_pentatonic 1335 | switch (rotate) { 1336 | 1337 | case 0: 1338 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_C_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_C_mp[i + 1])))) { 1339 | CV_INh = i; 1340 | DAC(pgm_read_word(&(DAC_LSB_C_mp[CV_INh]))); 1341 | goto DAC_done; 1342 | } 1343 | break; 1344 | 1345 | case 1: 1346 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_CS_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_CS_mp[i + 1])))) { 1347 | CV_INh = i; 1348 | DAC(pgm_read_word(&(DAC_LSB_CS_mp[CV_INh]))); 1349 | goto DAC_done; 1350 | } 1351 | break; 1352 | 1353 | case 2: 1354 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_D_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_D_mp[i + 1])))) { 1355 | CV_INh = i; 1356 | DAC(pgm_read_word(&(DAC_LSB_D_mp[CV_INh]))); 1357 | goto DAC_done; 1358 | } 1359 | break; 1360 | 1361 | case 3: 1362 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_DS_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_DS_mp[i + 1])))) { 1363 | CV_INh = i; 1364 | DAC(pgm_read_word(&(DAC_LSB_DS_mp[CV_INh]))); 1365 | goto DAC_done; 1366 | } 1367 | break; 1368 | 1369 | case 4: 1370 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_E_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_E_mp[i + 1])))) { 1371 | CV_INh = i; 1372 | DAC(pgm_read_word(&(DAC_LSB_E_mp[CV_INh]))); 1373 | goto DAC_done; 1374 | } 1375 | break; 1376 | 1377 | case 5: 1378 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_F_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_F_mp[i + 1])))) { 1379 | CV_INh = i; 1380 | DAC(pgm_read_word(&(DAC_LSB_F_mp[CV_INh]))); 1381 | goto DAC_done; 1382 | } 1383 | break; 1384 | 1385 | case 6: 1386 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_FS_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_FS_mp[i + 1])))) { 1387 | CV_INh = i; 1388 | DAC(pgm_read_word(&(DAC_LSB_FS_mp[CV_INh]))); 1389 | goto DAC_done; 1390 | } 1391 | break; 1392 | 1393 | case 7: 1394 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_G_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_G_mp[i + 1])))) { 1395 | CV_INh = i; 1396 | DAC(pgm_read_word(&(DAC_LSB_G_mp[CV_INh]))); 1397 | goto DAC_done; 1398 | } 1399 | break; 1400 | 1401 | case 8: 1402 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_GS_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_GS_mp[i + 1])))) { 1403 | CV_INh = i; 1404 | DAC(pgm_read_word(&(DAC_LSB_GS_mp[CV_INh]))); 1405 | goto DAC_done; 1406 | } 1407 | break; 1408 | 1409 | case 9: 1410 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_A_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_A_mp[i + 1])))) { 1411 | CV_INh = i; 1412 | DAC(pgm_read_word(&(DAC_LSB_A_mp[CV_INh]))); 1413 | goto DAC_done; 1414 | } 1415 | break; 1416 | 1417 | case 10: 1418 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_AS_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_AS_mp[i + 1])))) { 1419 | CV_INh = i; 1420 | DAC(pgm_read_word(&(DAC_LSB_AS_mp[CV_INh]))); 1421 | goto DAC_done; 1422 | } 1423 | break; 1424 | 1425 | case 11: 1426 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_B_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_B_mp[i + 1])))) { 1427 | CV_INh = i; 1428 | DAC(pgm_read_word(&(DAC_LSB_B_mp[CV_INh]))); 1429 | goto DAC_done; 1430 | } 1431 | break; 1432 | } 1433 | 1434 | break; 1435 | 1436 | 1437 | 1438 | 1439 | 1440 | 1441 | case 3://3=major_pentatonic+7 1442 | 1443 | switch (rotate) { 1444 | case 0: 1445 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_C_mp7[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_C_mp7[i + 1])))) { 1446 | CV_INh = i; 1447 | DAC(pgm_read_word(&(DAC_LSB_C_mp7[CV_INh]))); 1448 | goto DAC_done; 1449 | } 1450 | break; 1451 | 1452 | case 1: 1453 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_CS_mp7[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_CS_mp7[i + 1])))) { 1454 | CV_INh = i; 1455 | DAC(pgm_read_word(&(DAC_LSB_CS_mp7[CV_INh]))); 1456 | goto DAC_done; 1457 | } 1458 | break; 1459 | 1460 | case 2: 1461 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_D_mp7[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_D_mp7[i + 1])))) { 1462 | CV_INh = i; 1463 | DAC(pgm_read_word(&(DAC_LSB_D_mp7[CV_INh]))); 1464 | goto DAC_done; 1465 | } 1466 | break; 1467 | 1468 | case 3: 1469 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_DS_mp7[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_DS_mp7[i + 1])))) { 1470 | CV_INh = i; 1471 | DAC(pgm_read_word(&(DAC_LSB_DS_mp7[CV_INh]))); 1472 | goto DAC_done; 1473 | } 1474 | break; 1475 | 1476 | case 4: 1477 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_E_mp7[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_E_mp7[i + 1])))) { 1478 | CV_INh = i; 1479 | DAC(pgm_read_word(&(DAC_LSB_E_mp7[CV_INh]))); 1480 | goto DAC_done; 1481 | } 1482 | break; 1483 | 1484 | case 5: 1485 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_F_mp7[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_F_mp7[i + 1])))) { 1486 | CV_INh = i; 1487 | DAC(pgm_read_word(&(DAC_LSB_F_mp7[CV_INh]))); 1488 | goto DAC_done; 1489 | } 1490 | break; 1491 | 1492 | case 6: 1493 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_FS_mp7[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_FS_mp7[i + 1])))) { 1494 | CV_INh = i; 1495 | DAC(pgm_read_word(&(DAC_LSB_FS_mp7[CV_INh]))); 1496 | goto DAC_done; 1497 | } 1498 | break; 1499 | 1500 | case 7: 1501 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_G_mp7[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_G_mp7[i + 1])))) { 1502 | CV_INh = i; 1503 | DAC(pgm_read_word(&(DAC_LSB_G_mp7[CV_INh]))); 1504 | goto DAC_done; 1505 | } 1506 | break; 1507 | 1508 | case 8: 1509 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_GS_mp7[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_GS_mp7[i + 1])))) { 1510 | CV_INh = i; 1511 | DAC(pgm_read_word(&(DAC_LSB_GS_mp7[CV_INh]))); 1512 | goto DAC_done; 1513 | } 1514 | break; 1515 | 1516 | case 9: 1517 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_A_mp7[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_A_mp7[i + 1])))) { 1518 | CV_INh = i; 1519 | DAC(pgm_read_word(&(DAC_LSB_A_mp7[CV_INh]))); 1520 | goto DAC_done; 1521 | } 1522 | break; 1523 | 1524 | case 10: 1525 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_AS_mp7[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_AS_mp7[i + 1])))) { 1526 | CV_INh = i; 1527 | DAC(pgm_read_word(&(DAC_LSB_AS_mp7[CV_INh]))); 1528 | goto DAC_done; 1529 | } 1530 | break; 1531 | 1532 | case 11: 1533 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_B_mp7[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_B_mp7[i + 1])))) { 1534 | CV_INh = i; 1535 | DAC(pgm_read_word(&(DAC_LSB_B_mp7[CV_INh]))); 1536 | goto DAC_done; 1537 | } 1538 | break; 1539 | } 1540 | 1541 | break; 1542 | 1543 | 1544 | 1545 | 1546 | 1547 | 1548 | case 4://4=natural minor 1549 | 1550 | switch (rotate) { 1551 | case 0: 1552 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_DS_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_DS_maj[i + 1])))) { 1553 | CV_INh = i; 1554 | DAC(pgm_read_word(&(DAC_LSB_DS_maj[CV_INh]))); 1555 | goto DAC_done; 1556 | } 1557 | break; 1558 | 1559 | case 1: 1560 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_E_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_E_maj[i + 1])))) { 1561 | CV_INh = i; 1562 | DAC(pgm_read_word(&(DAC_LSB_E_maj[CV_INh]))); 1563 | goto DAC_done; 1564 | } 1565 | break; 1566 | 1567 | case 2: 1568 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_F_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_F_maj[i + 1])))) { 1569 | CV_INh = i; 1570 | DAC(pgm_read_word(&(DAC_LSB_F_maj[CV_INh]))); 1571 | goto DAC_done; 1572 | } 1573 | break; 1574 | 1575 | case 3: 1576 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_FS_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_FS_maj[i + 1])))) { 1577 | CV_INh = i; 1578 | DAC(pgm_read_word(&(DAC_LSB_FS_maj[CV_INh]))); 1579 | goto DAC_done; 1580 | } 1581 | break; 1582 | 1583 | case 4: 1584 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_G_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_G_maj[i + 1])))) { 1585 | CV_INh = i; 1586 | DAC(pgm_read_word(&(DAC_LSB_G_maj[CV_INh]))); 1587 | goto DAC_done; 1588 | } 1589 | break; 1590 | 1591 | case 5: 1592 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_GS_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_GS_maj[i + 1])))) { 1593 | CV_INh = i; 1594 | DAC(pgm_read_word(&(DAC_LSB_GS_maj[CV_INh]))); 1595 | goto DAC_done; 1596 | } 1597 | break; 1598 | 1599 | case 6: 1600 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_A_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_A_maj[i + 1])))) { 1601 | CV_INh = i; 1602 | DAC(pgm_read_word(&(DAC_LSB_A_maj[CV_INh]))); 1603 | goto DAC_done; 1604 | } 1605 | break; 1606 | 1607 | case 7: 1608 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_AS_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_AS_maj[i + 1])))) { 1609 | CV_INh = i; 1610 | DAC(pgm_read_word(&(DAC_LSB_AS_maj[CV_INh]))); 1611 | goto DAC_done; 1612 | } 1613 | break; 1614 | 1615 | case 8: 1616 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_B_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_B_maj[i + 1])))) { 1617 | CV_INh = i; 1618 | DAC(pgm_read_word(&(DAC_LSB_B_maj[CV_INh]))); 1619 | goto DAC_done; 1620 | } 1621 | break; 1622 | 1623 | case 9: 1624 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_C_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_C_maj[i + 1])))) { 1625 | CV_INh = i; 1626 | DAC(pgm_read_word(&(DAC_LSB_C_maj[CV_INh]))); 1627 | goto DAC_done; 1628 | } 1629 | break; 1630 | 1631 | case 10: 1632 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_CS_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_CS_maj[i + 1])))) { 1633 | CV_INh = i; 1634 | DAC(pgm_read_word(&(DAC_LSB_CS_maj[CV_INh]))); 1635 | goto DAC_done; 1636 | } 1637 | break; 1638 | 1639 | case 11: 1640 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_D_maj[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_D_maj[i + 1])))) { 1641 | CV_INh = i; 1642 | DAC(pgm_read_word(&(DAC_LSB_D_maj[CV_INh]))); 1643 | goto DAC_done; 1644 | } 1645 | break; 1646 | 1647 | 1648 | 1649 | } 1650 | 1651 | 1652 | break; 1653 | 1654 | 1655 | 1656 | 1657 | 1658 | 1659 | case 5://5=minor_pentatonic 1660 | 1661 | switch (rotate) { 1662 | case 0: 1663 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_DS_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_DS_mp[i + 1])))) { 1664 | CV_INh = i; 1665 | DAC(pgm_read_word(&(DAC_LSB_DS_mp[CV_INh]))); 1666 | goto DAC_done; 1667 | } 1668 | break; 1669 | 1670 | case 1: 1671 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_E_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_E_mp[i + 1])))) { 1672 | CV_INh = i; 1673 | DAC(pgm_read_word(&(DAC_LSB_E_mp[CV_INh]))); 1674 | goto DAC_done; 1675 | } 1676 | break; 1677 | 1678 | case 2: 1679 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_F_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_F_mp[i + 1])))) { 1680 | CV_INh = i; 1681 | DAC(pgm_read_word(&(DAC_LSB_F_mp[CV_INh]))); 1682 | goto DAC_done; 1683 | } 1684 | break; 1685 | 1686 | case 3: 1687 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_FS_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_FS_mp[i + 1])))) { 1688 | CV_INh = i; 1689 | DAC(pgm_read_word(&(DAC_LSB_FS_mp[CV_INh]))); 1690 | goto DAC_done; 1691 | } 1692 | break; 1693 | 1694 | case 4: 1695 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_G_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_G_mp[i + 1])))) { 1696 | CV_INh = i; 1697 | DAC(pgm_read_word(&(DAC_LSB_G_mp[CV_INh]))); 1698 | goto DAC_done; 1699 | } 1700 | break; 1701 | 1702 | case 5: 1703 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_GS_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_GS_mp[i + 1])))) { 1704 | CV_INh = i; 1705 | DAC(pgm_read_word(&(DAC_LSB_GS_mp[CV_INh]))); 1706 | goto DAC_done; 1707 | } 1708 | break; 1709 | 1710 | case 6: 1711 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_A_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_A_mp[i + 1])))) { 1712 | CV_INh = i; 1713 | DAC(pgm_read_word(&(DAC_LSB_A_mp[CV_INh]))); 1714 | goto DAC_done; 1715 | } 1716 | break; 1717 | 1718 | case 7: 1719 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_AS_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_AS_mp[i + 1])))) { 1720 | CV_INh = i; 1721 | DAC(pgm_read_word(&(DAC_LSB_AS_mp[CV_INh]))); 1722 | goto DAC_done; 1723 | } 1724 | break; 1725 | 1726 | case 8: 1727 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_B_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_B_mp[i + 1])))) { 1728 | CV_INh = i; 1729 | DAC(pgm_read_word(&(DAC_LSB_B_mp[CV_INh]))); 1730 | goto DAC_done; 1731 | } 1732 | break; 1733 | 1734 | case 9: 1735 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_C_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_C_mp[i + 1])))) { 1736 | CV_INh = i; 1737 | DAC(pgm_read_word(&(DAC_LSB_C_mp[CV_INh]))); 1738 | goto DAC_done; 1739 | } 1740 | break; 1741 | 1742 | case 10: 1743 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_CS_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_CS_mp[i + 1])))) { 1744 | CV_INh = i; 1745 | DAC(pgm_read_word(&(DAC_LSB_CS_mp[CV_INh]))); 1746 | goto DAC_done; 1747 | } 1748 | break; 1749 | 1750 | case 11: 1751 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_D_mp[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_D_mp[i + 1])))) { 1752 | CV_INh = i; 1753 | DAC(pgm_read_word(&(DAC_LSB_D_mp[CV_INh]))); 1754 | goto DAC_done; 1755 | } 1756 | break; 1757 | 1758 | 1759 | } 1760 | 1761 | 1762 | break; 1763 | 1764 | 1765 | 1766 | 1767 | 1768 | 1769 | 1770 | case 6://6=octave 1771 | switch (rotate) { 1772 | case 0: 1773 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_C_oct[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_C_oct[i + 1])))) { 1774 | CV_INh = i; 1775 | DAC(pgm_read_word(&(DAC_LSB_C_oct[CV_INh]))); 1776 | goto DAC_done; 1777 | } 1778 | break; 1779 | 1780 | case 1: 1781 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_CS_oct[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_CS_oct[i + 1])))) { 1782 | CV_INh = i; 1783 | DAC(pgm_read_word(&(DAC_LSB_CS_oct[CV_INh]))); 1784 | goto DAC_done; 1785 | } 1786 | break; 1787 | 1788 | case 2: 1789 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_D_oct[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_D_oct[i + 1])))) { 1790 | CV_INh = i; 1791 | DAC(pgm_read_word(&(DAC_LSB_D_oct[CV_INh]))); 1792 | goto DAC_done; 1793 | 1794 | case 3: 1795 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_DS_oct[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_DS_oct[i + 1])))) { 1796 | CV_INh = i; 1797 | DAC(pgm_read_word(&(DAC_LSB_DS_oct[CV_INh]))); 1798 | goto DAC_done; 1799 | } 1800 | break; 1801 | 1802 | case 4: 1803 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_E_oct[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_E_oct[i + 1])))) { 1804 | CV_INh = i; 1805 | DAC(pgm_read_word(&(DAC_LSB_E_oct[CV_INh]))); 1806 | goto DAC_done; 1807 | } 1808 | break; 1809 | 1810 | case 5: 1811 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_F_oct[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_F_oct[i + 1])))) { 1812 | CV_INh = i; 1813 | DAC(pgm_read_word(&(DAC_LSB_F_oct[CV_INh]))); 1814 | goto DAC_done; 1815 | } 1816 | break; 1817 | 1818 | case 6: 1819 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_FS_oct[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_FS_oct[i + 1])))) { 1820 | CV_INh = i; 1821 | DAC(pgm_read_word(&(DAC_LSB_FS_oct[CV_INh]))); 1822 | goto DAC_done; 1823 | } 1824 | break; 1825 | 1826 | case 7: 1827 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_G_oct[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_G_oct[i + 1])))) { 1828 | CV_INh = i; 1829 | DAC(pgm_read_word(&(DAC_LSB_G_oct[CV_INh]))); 1830 | goto DAC_done; 1831 | } 1832 | break; 1833 | 1834 | case 8: 1835 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_GS_oct[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_GS_oct[i + 1])))) { 1836 | CV_INh = i; 1837 | DAC(pgm_read_word(&(DAC_LSB_GS_oct[CV_INh]))); 1838 | goto DAC_done; 1839 | } 1840 | break; 1841 | 1842 | case 9: 1843 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_A_oct[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_A_oct[i + 1])))) { 1844 | CV_INh = i; 1845 | DAC(pgm_read_word(&(DAC_LSB_A_oct[CV_INh]))); 1846 | goto DAC_done; 1847 | } 1848 | break; 1849 | 1850 | case 10: 1851 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_AS_oct[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_AS_oct[i + 1])))) { 1852 | CV_INh = i; 1853 | DAC(pgm_read_word(&(DAC_LSB_AS_oct[CV_INh]))); 1854 | goto DAC_done; 1855 | } 1856 | break; 1857 | 1858 | case 11: 1859 | if ( CV_IN >= (pgm_read_word(&(CVIN_th_B_oct[i]))) && CV_IN < (pgm_read_word(&(CVIN_th_B_oct[i + 1])))) { 1860 | CV_INh = i; 1861 | DAC(pgm_read_word(&(DAC_LSB_B_oct[CV_INh]))); 1862 | goto DAC_done; 1863 | } 1864 | break; 1865 | 1866 | } 1867 | break; 1868 | } 1869 | 1870 | break; 1871 | 1872 | 1873 | 1874 | 1875 | } 1876 | } 1877 | } 1878 | DAC_done: ; 1879 | 1880 | 1881 | } 1882 | 1883 | 1884 | void DAC(long CV_OUT) { //CV_12bit_0-4095 1885 | digitalWrite(5, HIGH);//gateON 1886 | 1887 | //-----------slide OFFCV------------------ 1888 | if ( slide == 0 || slide_time <= 3) { 1889 | Wire.beginTransmission(0x60); 1890 | Wire.write((CV_OUT >> 8) & 0x0F); 1891 | Wire.write(CV_OUT); 1892 | Wire.endTransmission(); 1893 | delay(5); 1894 | digitalWrite(5, LOW); 1895 | 1896 | } 1897 | 1898 | //-----------slide ONCV------------------ 1899 | else if ( slide == 1 && slide_time > 3 ) { 1900 | 1901 | if ( old_CV_OUT <= CV_OUT) { 1902 | while ( j <= slide_time) { 1903 | Wire.beginTransmission(0x60); 1904 | Wire.write((old_CV_OUT + (CV_OUT - old_CV_OUT) * j / slide_time >> 8) & 0x0F); 1905 | Wire.write(old_CV_OUT + (CV_OUT - old_CV_OUT) * j / slide_time); 1906 | Wire.endTransmission(); 1907 | delay(5); 1908 | j++; 1909 | 1910 | } 1911 | } 1912 | 1913 | else if (old_CV_OUT > CV_OUT) { 1914 | while ( j <= slide_time) { 1915 | Wire.beginTransmission(0x60); 1916 | Wire.write((old_CV_OUT - (old_CV_OUT - CV_OUT) * j / slide_time >> 8) & 0x0F); 1917 | Wire.write(old_CV_OUT - (old_CV_OUT - CV_OUT) * j / slide_time); 1918 | Wire.endTransmission(); 1919 | delay(5); 1920 | j++; 1921 | 1922 | } 1923 | } 1924 | 1925 | old_CV_OUT = CV_OUT; 1926 | } 1927 | digitalWrite(5, LOW) ;//gateOFF 1928 | } 1929 | 1930 | void LED(byte R, byte G, byte B) { 1931 | 1932 | 1933 | analogWrite(9,255-map(R,0,255,0,LED_Brightness)); 1934 | analogWrite(11,255-map(G,0,255,0,LED_Brightness)); 1935 | analogWrite(10,255-map(B,0,255,0,LED_Brightness)); 1936 | } 1937 | --------------------------------------------------------------------------------