Paso 7: Funcionalidad y el código
FuncionalidadEl código es bastante auto-explicativo y (creo que) relativamente bien comentado. También hay un comando serial println en cada paso del camino de depuración especialmente si usted necesita ajustar el código para la calibración del potenciómetro.
Cuando usted enciende el dispositivo, EL alambre será "iniciar." En otras palabras, cada uno de ellos una vez flash en secuencia, desde el pin 2 al pin 9.
Ahora estamos en un estado de espera hasta que se pulsa el botón de modo. Cada vez que pulse el botón mode alterna a través de una secuencia diferente y parpadea el LED de modo (rojo) una vez, por lo que el operador puede confirmar un cambio de modo (como operador de sombrero).
Hay 7 secuencias que bucle continuamente entre los cambios de modo. En estos modos, si el operador ajusta el potenciómetro, la velocidad de la secuencia cambia.
Modos de secuenciados
Modo 1 - paso a través de todos
Modo 2 - llenar de abajo luego vacía de la parte inferior
Modo 3 - arriba y abajo
4 - barrido en botton al principio, el modo barrido de arriba a abajo
Modo 5 - pila y tuvo que unstack
Modo 6 - suplente intermitente
Modo 7 - entrecruzamiento
Modo del Sensor de sonido
Modo 8 - al llegar a este modo, el modo LED con flash 10 veces rápidamente con el fin de hacerle saber que usted está en este modo especial.
El potenciómetro se convierte ahora en el control de sensibilidad.
Todas las secuencias de
Modo 9 - esto sale del modo de sonido y continuamente funciona a través de múltiples lazos de cada uno de los modos de 1 a 7 (ahora está activado el control de velocidad en el potenciómetro). Cuando se presiona el botón Mode, retorno al modo 1.
EL CÓDIGO DE
Todo el código de Arduino está abajo y adjunto.
Instructables hacerlo resplandor 2012 sombrero secuenciador
ARDUINO UNO Rev. 3 + Dos de EL Escudo SPARKFUN
//
=== De piezas y configuración ===
EL Escudo Dos: Escudo montado sobre Arduino UNO Rev.3
EL cable: Conectado a El Escudo Dos en Digital Digital 2 Pins -> 9(OUTPUT)
Indicador LED: indica el cambio de modo y detección de sonido Pin 13(OUTPUT)
Interruptor momentáneo: conmutador (generalmente abierto) conectado al Pin Digital 11(INPUT)
Potenciómetro: Control de velocidad y sonido conectado a analógico 0
: DFRobot sonido micrófono Sensor de conectarse analógico 2
Escrito por: Dovadil
DISCAIMER: soy un programador muy amateur, así que por favor no juzgues el código probablemente innecesariamente complicado.
Sólo tenía una idea y lo hizo pasar. Espero que puede usar pedazos de este para su propio proyecto.
COMPARTIR!!!!!!
constantes para la prensa del botón de entrada y 1 salida de led
const int buttonPin = 11; el número de pin pulsador
const int ledPin = 13; el número de los pines del LED
const_variable para el pote y el Sensor de sonido
const int analogInPin = A0; Clavija de entrada analógica que el potenciómetro está conectado a
const int analogInPinSound = A2; Sensor de sonido de entrada analógica
int potValue = 0; valor leído de la olla
int hora = 100; intervalo de tiempo
varibales
inicializar el valor booleano = true;
int buttonState = 0; variable para lectura del estado del pulsador
int modo = 0;
int soundVal = 0;
int soundPotThresholdValue = 0;
int soundSensitivityLimit = 0;
int x;
int y;
int z;
void setup()
{
inicializar comunicaciones serie a 9600 bps:
Serial.Begin(9600);
Los canales EL están en pines 2 al 9
Inicializar los pines como salidas
pinMode (2, salida); canal A
pinMode (3, salida); canal B
pinMode (4, salida); canal C
pinMode (5, salida); canal D
pinMode (6, salida); canal E
pinMode (7, salida); canal F
pinMode (8, salida); canal G
pinMode (9, salida); canal H
También contamos con dos LEDs de estado, pin 10 en el Escudo,
pinMode (10, salida);
y ledPin (pin 13) en el Arduino se
pinMode (ledPin, salida);
pinMode (buttonPin, entrada);
}
void loop()
{
Iniciar el programa con una única prueba de iluminación LED
Si (inicializar == true)
{
Delay(10);
Serial.println("");
Serial.println("");
Serial.println("Initialising...");
Serial.println("");
int estado;
Paso por todos los canales EL ocho (pines 2 al 9)
para (x = 2; x < = 9; x ++)
{
digitalWrite (ledPin, HIGH); encender LED
digitalWrite (x, alto); encender el canal EL
Delay(100); espere 1/10 de segundo
digitalWrite (ledPin, LOW); Apagar el LED
digitalWrite (x, baja); desactivar el canal EL
Delay(50); espere 1/10 de segundo
digitalWrite (ledPin, HIGH); encender LED
digitalWrite (x, alto); encender el canal EL
Delay(100); espere 1/10 de segundo
digitalWrite (ledPin, LOW); Apagar el LED
digitalWrite (x, baja); desactivar el canal EL
Delay(50);
deja de funcionar de inicialización después de una iteración
inicializar = false;
}
Serial.println("");
Serial.println (¡ "inicialización hecha!");
Serial.println ("esperando activación del modo");
}
Detail();
=== El modo 1 (paso a través de los ocho canales EL) ===
Si (modo == 1)
{
Paso por todos los canales EL ocho (pines 2 al 9)
para (x = 2; x < = 9; x ++)
{
Detail();
digitalWrite (x, alto); encender el canal EL
Delay(Time); espere 1/10 de segundo
digitalWrite (x, baja); desactivar el canal EL
}
}
=== MODO 2 (llenar de fondo entonces vacía de la parte inferior) ===
Si (modo == 2)
{
para (x = 2; x < = 9; x ++)
{
Detail();
digitalWrite (x, alto); encender el canal EL
Delay(Time); espere 1/10 de segundo
}
para (x = 2; x < = 9; x ++)
{
Detail();
digitalWrite (x, baja); encender el canal EL
Delay(Time); espere 1/10 de segundo
}
}
=== El modo 3 (hasta abajo hasta abajo) ===
Si (modo == 3)
{
para (x = 2; x < = 9; x ++)
{
Detail();
digitalWrite (x, alto); encender el canal EL
Delay(Time); espere 1/10 de segundo
digitalWrite (x, baja); desactivar el canal EL
}
para (x = 2; x < = 9; x ++)
{
Detail();
y = 11-x;
digitalWrite (y, alto); encender el canal EL
Delay(Time); espere 1/10 de segundo
digitalWrite (y, bajo); desactivar el canal EL
}
}
=== El modo 4 (barrido de abajo hacia arriba, barrido hacia fuera de arriba hacia abajo) ===
Si (modo == 4)
{
para (x = 2; x < = 9; x ++)
{
Detail();
digitalWrite (x, alto);
Delay(Time);
}
para (x = 9; x > = 2; x--)
{
Detail();
digitalWrite (x, baja);
Delay(Time);
}
}
=== MODO 5 (pila y tuvo que unstack) ===
Si (modo == 5)
{
para (x = 2; x < = 9; x ++)
{
para (y = 9; y > = x; y)
{
digitalWrite (y, alto);
Delay(Time);
digitalWrite (y, bajo);
Detail();
}
digitalWrite (x, alto);
}
para (x = 9; x > = 2; x--)
{
para (y = x; y < = 9; y ++)
{
digitalWrite (y, alto);
Delay(Time);
digitalWrite (y, bajo);
Detail();
}
}
digitalWrite (y, bajo);
Delay(Time+20);
}
=== El modo 6 (alternativa intermitente) ===
Si (modo == 6)
{
Detail();
digitalWrite (2, alto);
digitalWrite (4, alto);
digitalWrite (6, alto);
digitalWrite (8, HIGH);
Delay(Time+75);
Detail();
digitalWrite (2, bajo);
digitalWrite (4, bajo);
digitalWrite (6, bajo);
digitalWrite (8, bajo);
digitalWrite (3, alto);
digitalWrite (5, alto);
digitalWrite (7, alto);
digitalWrite (9, alto);
Delay(Time+75);
Detail();
digitalWrite (3, bajo);
digitalWrite (5, bajo);
digitalWrite (7, bajo);
digitalWrite (9, bajo);
}
=== El modo 7 (entrecruzamiento) ===
Si (modo == 7)
{
para (x = 2; x < = 9; x ++)
{
y = 11-x;
digitalWrite (x, alto); Encienda el LED (alto es el nivel de voltaje)
digitalWrite (y, alto); Encienda el LED (alto es el nivel de voltaje)
Si (x == 5)
{
Delay(Time/2);
}
otra cosa
{
Delay(Time);
}
digitalWrite (x, baja);
digitalWrite (y, bajo);
Detail();
}
}
=== MODO 8 (modo sonido) ===
Si (modo == 8)
{
Prueba de sonido
detailSound();
Si ((soundVal,DEC) == 512)
{
flash por sonido
para (x = 2; x < = 9; x ++)
{
digitalWrite (x, alto);
Delay(40);
}
para (x = 9; x > = 2; x--)
{
digitalWrite (x, baja);
Delay(40);
}
}
}
//=================MODE 9 ==================
Si (modo == 9)
{
runAllSequences();
}
//=================MODE 10 ==================
Si (modo == 10)
{
}
}
// =========================================
=== FUNCIONES ===
// =========================================
detail() vacío
{
Lea el equivalente en valor y mapa de la gama para el tiempo
Si ((mode == 8) || (Mode == 0)) Si no es en modo de sonido, o si el programa no ha empezado
{
no hacer nada
}
otra cosa
{
Si ((potValue! = analogRead(analogInPin))) //pot no se cambia
{
tiempo = mapa (potValue, 0, 1024, 40, 200);
imprimir los resultados en el monitor serial:
Serial.Print ("\n potenciómetro =");
Serial.Print(potValue);
Serial.Print ("\t de retraso de tiempo =");
Serial.Print(Time);
Serial.Print ("milisegundos");
esperar 2 milisegundos antes del siguiente bucle
para el convertidor de analógico a digital resolver
después de la última lectura:
Delay(2);
potValue = analogRead(analogInPin);
}
}
leer el estado del pulsador valor:
buttonState = digitalRead(buttonPin);
Si (buttonState == HIGH)
{
buttonPressed();
digitalWrite (ledPin, LOW);
}
}
void detailSound()
{
soundPotThresholdValue = analogRead(analogInPin); umbral de
soundSensitivityLimit = mapa (soundPotThresholdValue, 0, 1024, 0, 512);
soundVal=analogRead(analogInPinSound); valor real del sonido
Si (soundVal > soundSensitivityLimit)
{
Serial.Print ("\n umbral =");
Serial.println(soundSensitivityLimit);
Serial.Print ("\n sonido de nivel de entrada =");
Serial.println(soundVal);
digitalWrite (ledPin, HIGH);
para (x = 2; x < = 9; x ++)
{
digitalWrite (x, alto);
Delay(15);
}
para (x = 2; x < = 9; x ++)
{
digitalWrite (x, baja);
Delay(15);
}
}
digitalWrite (ledPin, LOW);
Delay(10);
}
void buttonPressed()
{
digitalWrite (ledPin, HIGH);
Delay(300); una pausa para controlar el programa. cambio de modo de asegurar
Mode = modo + 1; incremento de modo
Si (modo > 9) / / si el modo es mayor que 9, reinicie desde el modo 1
{
modo = 1;
Serial.println("");
Serial.println ("restablecimiento de modo secuencia");
Serial.println("");
para (x = 0; x < = 3; x ++)
{
digitalWrite (ledPin, LOW);
Delay(100);
digitalWrite (ledPin, HIGH);
Delay(100);
digitalWrite (ledPin, LOW);
}
}
Serial.println("");
Serial.println("");
Serial.println ("tecla");
Serial.Print ("modo de:");
Serial.Print(Mode);
Serial.println("");
para (x = 2; x < = 9; x ++) //turn todos los canales off - reset para el siguiente bucle
{
digitalWrite (x, baja);
}
Si el modo es el modo de sonido, parpadeo led rápidamente 10 veces
Si (modo == 8) //sound
{
para (x = 0; x < = 10; x ++) //turn todos los canales off - reset para el siguiente bucle
{
digitalWrite (ledPin, HIGH);
Delay(50);
digitalWrite (ledPin, LOW);
Delay(25);
}
}
}
void runAllSequences()
{
=== El modo 1 (paso a través de los 8 canales) ===
para (z = 0; z < = 7; z ++) //because esta es la secuencia relativamente corta, hace un par de veces siempre
{
Paso por todos los canales EL ocho (pines 2 al 9)
para (x = 2; x < = 9; x ++)
{
Detail();
digitalWrite (x, alto); encender el canal EL
Delay(Time); espere 1/10 de segundo
digitalWrite (x, baja); desactivar el canal EL
}
}
para (x = 2; x < = 9; x ++) //turn todos los canales off - reset para el siguiente bucle
{
digitalWrite (x, baja);
}
=== MODO 2 (llenar de fondo entonces vacía de la parte inferior) ===
para (z = 0; z < = 3; z ++) //because esta es la secuencia relativamente corta, hace un par de veces siempre
{
para (x = 2; x < = 9; x ++)
{
Detail();
digitalWrite (x, alto); encender el canal EL
Delay(Time); espere 1/10 de segundo
}
para (x = 2; x < = 9; x ++)
{
Detail();
digitalWrite (x, baja); encender el canal EL
Delay(Time); espere 1/10 de segundo
}
}
para (x = 2; x < = 9; x ++) //turn todos los canales off - reset para el siguiente bucle
{
digitalWrite (x, baja);
}
=== El modo 3 (hasta abajo hasta abajo) ===
para (z = 0; z < = 3; z ++) //because esta es la secuencia relativamente corta, hace un par de veces siempre
{
para (x = 2; x < = 9; x ++)
{
Detail();
digitalWrite (x, alto); encender el canal EL
Delay(Time); espere 1/10 de segundo
digitalWrite (x, baja); desactivar el canal EL
}
para (x = 2; x < = 9; x ++)
{
Detail();
y = 11-x;
digitalWrite (y, alto); encender el canal EL
Delay(Time); espere 1/10 de segundo
digitalWrite (y, bajo); desactivar el canal EL
}
}
para (x = 2; x < = 9; x ++) //turn todos los canales off - reset para el siguiente bucle
{
digitalWrite (x, baja);
}
=== El modo 4 (barrido de abajo hacia arriba, barrido hacia fuera de arriba hacia abajo) ===
para (z = 0; z < = 3; z ++) //because esta es la secuencia relativamente corta, hace un par de veces siempre
{
para (x = 2; x < = 9; x ++)
{
Detail();
digitalWrite (x, alto);
Delay(Time);
}
para (x = 9; x > = 2; x--)
{
Detail();
digitalWrite (x, baja);
Delay(Time);
}
}
para (x = 2; x < = 9; x ++) //turn todos los canales off - reset para el siguiente bucle
{
digitalWrite (x, baja);
}
=== MODO 5 (pila y tuvo que unstack) ===
para (z = 0; z < = 3; z ++) //because esta es la secuencia relativamente corta, hace un par de veces siempre
{
para (x = 2; x < = 9; x ++)
{
para (y = 9; y > = x; y)
{
digitalWrite (y, alto);
Delay(Time);
digitalWrite (y, bajo);
Detail();
}
digitalWrite (x, alto);
}
para (x = 9; x > = 2; x--)
{
para (y = x; y < = 9; y ++)
{
digitalWrite (y, alto);
Delay(Time);
digitalWrite (y, bajo);
Detail();
}
}
digitalWrite (y, bajo);
Delay(Time+20);
}
para (x = 2; x < = 9; x ++) //turn todos los canales off - reset para el siguiente bucle
{
digitalWrite (x, baja);
}
=== El modo 6 (alternativa intermitente) ===
para (z = 0; z < = 10; z ++) //because se trata de una secuencia corta, puede veces
{
Detail();
digitalWrite (2, alto);
digitalWrite (4, alto);
digitalWrite (6, alto);
digitalWrite (8, HIGH);
Delay(Time+75);
Detail();
digitalWrite (2, bajo);
digitalWrite (4, bajo);
digitalWrite (6, bajo);
digitalWrite (8, bajo);
digitalWrite (3, alto);
digitalWrite (5, alto);
digitalWrite (7, alto);
digitalWrite (9, alto);
Delay(Time+75);
Detail();
digitalWrite (3, bajo);
digitalWrite (5, bajo);
digitalWrite (7, bajo);
digitalWrite (9, bajo);
}
para (x = 2; x < = 9; x ++) //turn todos los canales off - reset para el siguiente bucle
{
digitalWrite (x, baja);
}
=== El modo 7 (entrecruzamiento) ===
para (z = 0; z < = 10; z ++) //because se trata de una secuencia corta, puede veces
{
para (x = 2; x < = 9; x ++)
{
y = 11-x;
digitalWrite (x, alto); Encienda el LED (alto es el nivel de voltaje)
digitalWrite (y, alto); Encienda el LED (alto es el nivel de voltaje)
Si (x == 5)
{
Delay(Time/2);
}
otra cosa
{
Delay(Time);
}
digitalWrite (x, baja);
digitalWrite (y, bajo);
Detail();
}
}
para (x = 2; x < = 9; x ++) //turn todos los canales off - reset para el siguiente bucle
{
digitalWrite (x, baja);
}
}