Paso 3: Código de manual de reparacion 1
Programación
El código de este nuevo esquema en su totalidad puede encontrarse aquí en mi perfil de pastebin.com. Por el bien de este tutorial se cubren la mayoría de los conceptos clave de la sintaxis que he usado. En primer lugar el Arduino utiliza un lenguaje de programación que es orientado a objetos; C++. Esta lengua es muy poderosa y alimenta mucho de la lógica del sitio web de moderno-día, microcontroladores y mucho más!
Teclado
Primero creamos un dos matriz bidimensional de enteros que utilizamos para la celebración de las frecuencias especificadas por dígitos por la página de la caja azul de Wikipedia. También establecemos una duración como un array de entero sin signo de typedef. Estos enteros son reproducción períodos de duración.
int bb[16][2] = { // MF 0,1,2,3,4,5,6,7,8,9,kp,st,2400+2600,kp2,st2,ss4 super<br> {1300,1500},{700,900},{700,1100}, // 0,1,2 {900,1100},{700,1300},{900,1300}, // 3,4,5 {1100,1300},{700,1500},{900,1500}, // 6,7,8 {1100,1500},{1100,1700},{1500,1700}, // 9,kp,st {2600,2400},{1300,1700},{900,1700}, // 2400+2600,kp2,st2 {2400,2040}, // ss4 Supervisory }; <p>uint8_t bbdur[2] = {60,100};</p>
A continuación, creamos una matriz matriz de claves como personajes. Estos caracteres se utilizará cada vez que se presiona un botón en el teclado. También fijamos las filas y pasadores de arrays de enteros.
char keys[4][4] = {<br> {'1','2','3','a'}, {'4','5','6','b'}, {'7','8','9','c'}, {'#','0','*','d'} }; <p>byte rowPins[4] = {5,4,3,2}; //connect to the row pinouts of the keypad<br>byte colPins[4] = {9,8,7,6}; //connect to the column pinouts of the keypad</p>
A continuación creamos un objeto de teclado y una matriz simple de tono objetos. Ya que estamos jugando tonos de dos pins a la vez, esto hace nuestra vida más simple al escribir y depurar el código.
Tone freq[2]; // array of Tone objects, now we can play as freq[0].play(); etc<br>Keypad keypad = Keypad(makeKeymap(keys),rowPins,colPins,4,4);
Botones de lectura y reproducción de tonos
En la función setup() , necesitamos establecer las clavijas freq [0] y frecuencia [1] para la salida. Esto es simple. También Seleccione el "modo de pin" para el botón de 2600 y establece un detector de eventos, que es una llamada de función personalizada de procesamiento del botón de procButton() . Esta es la programación orientada a eventos. Esto básicamente significa que nos "escucha" de teclas a presionar, que sería un "evento". La función principal loop() es lo que encarga de los eventos y oyentes para nosotros.
freq[0].begin(11); // Initialize our first tone generator<br>freq[1].begin(12); // Initialize our second tone generator pinMode(10, INPUT); // 2600 button keypad.addEventListener(procButton);
Hemos mantenido nuestro método principal loop() simple, que es bueno ya que constantemente se está llamando. La primera línea,
char button = keypad.getKey();
Básicamente se llama al método de getKey() del objeto teclado para ver si y qué tecla se presionó. El código,
if(digitalRead(10)==HIGH){ // play 2600Hz if top button pressed<br> super(); // supervisory signalling }
simplemente escucha para el voltaje en el pin 10 y si encuentran, juegos del 2600 hz frecuencia llamando a la función de señalización de supervisión personalizada super() . Se trata de la primera función definida justo debajo de la función loop() . También es la primera función para llamar a la frecuencia individual personalizada jugando la función de sf() ,
sf(2600,750);
Los argumentos que pasan a esta función son la frecuencia a reproducir y la duración. Después de asignar léxicamente la frecuencia y duración variables de número entero de los mismos nombres, la función personalizada sf() solo llama a un método solo juego en un solo perno
freq[0].play(frequency,duration);
Este es nuestro primer vistazo al método de juego de síntesis del tono de la biblioteca de tono. Así que si te imaginas jugando dos tonos, de múltiples frecuencias sería similar, pero con dos pines, como,
freq[0].play(frequency,duration);<br>freq[0].play(frequency,duration);
Y eso es exactamente lo que hace la función de mf() juego de encargo de múltiples frecuencias.
¿Cómo procesamos cada tecla de la función de procButton() ? Usando una lógica del interruptor de la caja. Las constantes "liberado," "presionado" y "cabo," (no "celebrado" por alguna extraña razón), son parte de la biblioteca de teclado y podemos utilizar el en un bloque de lógica del interruptor de la caja,
switch (keypad.getState()){<br>case RELEASED: // drop right away // do some stuff break; case PRESSED: // momentary // do some stuff break; case HOLD: // HELD (special functions) // do some stuff break; }
Y eso es exactamente lo que hacemos. Puesto que la función de procButton() es un controlador de eventos denominado por la función loop() , obtenemos un objeto de keypadevent a su controlador procButton(). Este objeto puede ser tratado como un simple personaje - y hacemos por simple resta el entero 48 de él para obtener Qué tecla del 0 al 9.
void procButton(KeypadEvent b){<br> b -= 48;
Ahora sabemos qué tecla se presionó y pasar a la función mf() que utiliza la matriz multidimensional [bb] que hemos creado antes para jugar los tonos mf. Usted puede haber notado que el KP (*) y ST (#) no son 0-9. Esto es correcto, ya que a través de y después de la sustracción -13 y -6 respectivamente. La función mf() encarga entonces como,
}else if(digit==-13){<br> digit = 12; // * }else if(digit==-6){ digit = 14; // #
Este entonces toca los tonos ya que se les asigna en el array multidimensional [bb] .
Ahora se han cubierto todos los conceptos clave mediante programación con este esquema (1), vamos a pasar en el segundo esquema y cómo podemos reproducir archivos WAV que ofrecen un sonido completamente diferente a nuestras cajas de azul.
Características adicionales
Este código proporciona una enorme cantidad de características adicionales incluyendo dígitos en la grabación y arreglos de discos para reproducción y modos de operación. El código es muy sencillo código de C++ de Arduino. Pulsación larga 'A' para recorrer los diferentes modos. Cada vez que cambiamos modos que el notifyMode() función se pulsará un código de pitidos de 440 hz para dejarnos saber que actualmente estamos utilizando el modo. Todos los modos se describen completamente en mi weblog aquí o en la página de Wikipedia para especificaciones de la caja azul.