Paso 10: El código fuente
El código de buzón con escrito por Sam Stratter (aka humanharddrive) suena impresionante. Tiene 6 formas de onda, 2 osciladores, un LFO. El código está disponible bajo su Instructable. He utilizado su código casi igual, excepto que he quitado lo de arpegio y había modificado para que pudiera usar todas las 6 perillas.
El código de detección capacitivo que usé es un recorte pequeño de no sé dónde, he estado copiando y pegándolo de proyecto a proyecto. Hay una biblioteca de detección capacitiva toda en el Arduino Playground que tiene muchas más opciones. El código que tengo es simple, no requiere una resistencia Lee un pin y devuelve un número, que es el número de ciclos que tarda para que el pin descargar. Generalmente, el valor devuelto es 1 a 20 o algo así.
Una nota sobre la detección táctil capacitiva - no funcionará bien a menos que tenga un buen campo de. Descubrí esto la manera dura después de trabajar en este proyecto. Con alimentación mediante el cable USB, todos los botones de tapa leen bien. Cuando me Desconecte y poder por mi pila de 9V, las lecturas todos me erráticas. Era capaz de moverse por el problema en poner 2 que más metal tachuelas en la parte inferior de la caja donde se iría naturalmente los pulgares y los dos cables a tierra. Esto era realmente una buena cosa ya que da los pulgares algo para agarrarse. Después de hacer las lecturas son más normales pero todavía hay un constante "inquietud".
El código sólo vale la pena compartir en este momento es para el cálculo de lo que cuenta para jugar. Aquí está:
nonote int = 1;
int curnote = 0;
noteMultiplier = 0;
para (int x = 0; x < 4; x ++) {}
Si (readCapacitivePin(multPins[x]) > 1) {noteMultiplier = x + 1;}
Si (readCapacitivePin(notePins[x]) > 1) {curnote ++; nonote = 0;}
}
multPins es una matriz de qué pines de Arduino los botones de "multiplicador" de la izquierda se unen a.
notePins es una matriz de qué pines de Arduino los botones del lado derecho "Nota" se unen a.
Si (nonote == 1) {}
notePlaying = false;
} else {}
noteSelect=43+((noteMultiplier*4)+curnote);
notePlaying = true;
}
El primer bucle Lee los 4 pernos en cada lado. Si el valor del pin es mayor que 1, es ser tocado. En el lado izquierdo como Lee que hace cualquiera que sea el botón más alto ser tocado el multiplicador. Así que si estás tocando el botón #4, multiplica al número de botones que tiene en sus manos hacia abajo a la derecha por 4. El lado izquierdo es secuencial. Si oprime #1 y #4 al mismo tiempo, noteMultiplier se va a terminar siendo 4, ya que lee secuencialmente los valores y establece noteMultiplier.
Las variables nonote/notePlaying determinan que si no presiona ningún botón en la derecha (nonote todavía es igual a 1 después de ejecutar el bucle) y notePlaying = false, no tocar nada. notePlaying es una variable utilizada por el código de sintetizador que dice generar sonido o no.
noteSelect es el código del motor sintetizador para qué número de nota jugar. Desde una nota base (43 en este caso, que es una C) y agregar el valor del multiplicador, además de lo que el valor de curnote es llegar a que nota se está reproduciendo. Esto le permite dar un paso de la nota #47 (nada presionado izquierda, 1 tecla de derecha) hasta un máximo de nota #67. (4 botones en la izquierda y 4 a la derecha)