Controlador de alambre EL Arduino (sonido activado) (2 / 4 paso)

Paso 2: Código de Arduino

Aquí está el código. La interrupción define una bandera (pbPress) y contador (menuState) entre 0 - 4. Utilizando mientras (pbPress == 0) {}; Me quedo en uno de los siguientes elementos del menú; Apagado, Audio, Flash rápido, Flash lento y por. Cada vez que se presiona el interruptor momentáneo se dispara una interrupción, el menú se avanza un paso y se establece el indicador pbPress a 1 que se rompe la rutina de las existentes en bucle y reinicia la instrucción switch avanzando al caso siguiente con el siguiente tiempo del lazo. Cuando el menú está en Audio, el microcontrolador muestrea la señal de audio en el pin A0 y calcula si la señal es mayor que uno de los tres valores en la matriz de corte []. Estos valores se determinaron empíricamente por ensayo y error con diferentes niveles de sonido ambiental. El elemento de corte [] que se utiliza depende de la posición del interruptor de S2_AUDIO_LEVEL correspondiente a 0 - bajo, alto - MED y 2 - 1. Confusamente, la baja corresponde a la alta sensibilidad (sonidos bajos activan el alambre en) y así sucesivamente.

 int triacGatePin = 5; // drive el inverter thru optoisolator controlling triacint monitorPin = 0; //from microphone //for audio processing int digInputA = 3; //pins to check for audio switch position int digInputB = 4; //pins to check for audio switch position int cutOff[] = {70, 110, 260}; //value to compare peaktopeak with const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz) unsigned int sample; unsigned int signalMax, peakToPeak = 0; unsigned int signalMin = 1024; int menuState = 0; // variable to be updated by the interrupt int pbPress = 0; int triacState = LOW; long previousMillis = 0; long flashInterval = 0; //variables to keep track of the timing of recent interrupts volatile unsigned long button_time = 0; volatile unsigned long last_button_time = 0; void setup() { pinMode(triacGatePin, OUTPUT); pinMode(digInputA, INPUT); pinMode(digInputB, INPUT); //enable interrupt 0 (pin 2) which is connected to a button //jump to the increment function on falling edge attachInterrupt(0, increment, FALLING); //turn on interrupt for pin 2 } void loop() { if (pbPress == 1){ pbPress = 0; switch (menuState){ case 0: //off while(pbPress == 0){ //wait for next pbPress delay(10); } break; case 1: //audio while(pbPress == 0){ int audioLevel = getSwitchState(); // collect data for 50 mS unsigned long startMillis= millis(); // Start of sample window while (millis() - startMillis < sampleWindow) { sample = analogRead(monitorPin); if (sample < 1024) // toss out spurious readings { if (sample > signalMax) { signalMax = sample; // save just the max levels } else if (sample < signalMin) { signalMin = sample; // save just the min levels } } } peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude if (peakToPeak > cutOff[audioLevel]){ //turn on led digitalWrite(triacGatePin, HIGH); }else{ digitalWrite(triacGatePin, LOW); } resetValues(); } break; case 2: //switch fast bink flashInterval = 120; while(pbPress == 0){ unsigned long currentMillis = millis(); if(currentMillis - previousMillis > flashInterval) { // save the last time you blinked the LED previousMillis = currentMillis; // if the LED is off turn it on and vice-versa: if (triacState == LOW){ triacState = HIGH; }else{ triacState = LOW; } // set the LED with the triacState of the variable: digitalWrite(triacGatePin, triacState); } } break; case 3: //switch slow blink flashInterval = 700; while(pbPress == 0){ unsigned long currentMillis = millis(); if(currentMillis - previousMillis > flashInterval) { // save the last time you blinked the LED previousMillis = currentMillis; // if the LED is off turn it on and vice-versa: if (triacState == LOW){ triacState = HIGH; }else{ triacState = LOW; } // set the LED with the triacState of the variable: digitalWrite(triacGatePin, triacState); } } break; case 4: //switch on triacState = HIGH; digitalWrite(triacGatePin, triacState); while(pbPress == 0){ //wait for pbPress delay(10); } triacState = LOW; digitalWrite(triacGatePin, triacState); break; } } delay(100); } // Interrupt service routine for interrupt 0 void increment() { button_time = millis(); //check to see if increment() was called in the last 250 milliseconds if (button_time - last_button_time > 250) { pbPress = 1; if (menuState == 4){ menuState = 0; }else{ menuState += 1; } last_button_time = button_time; } } //for audio processing void resetValues(){ signalMax = 0; signalMin = 1024; peakToPeak = 0; } int getSwitchState(){ int pin2 = digitalRead(digInputA); int pin3 = digitalRead(digInputB); if (pin2 == 0){ return 1; //Medium volume } if(pin3 == 0){ return 2; //High volume; }else{ return 0; //Low volume; } } 

Artículos Relacionados

EL sombrero de alambre: Secuenciado y sonido activado con mando a distancia-con Arduino y Sparkfun

EL sombrero de alambre: Secuenciado y sonido activado con mando a distancia-con Arduino y Sparkfun

Bienvenidos a la guía del instructivo de mi sombrero EL alambre con algo de diversión características.El concepto es un sombrero EL cable con los cables EL 8 secuenciados controlado por un mando a distancia alámbrico. Múltiples modos de secuencia con
Robot de mano gesto controlado con sonido activado sistema de luz

Robot de mano gesto controlado con sonido activado sistema de luz

En este Instructable mostrará instrucciones paso a paso de cómo hacer dedo controla robot con sistema de sonido de luz activadoEste robot puede ser controlado con los cuatro dedos de su hand(left/right). Y el robot automáticamente Encienda/apague la
Sonido activado 4 X 7 RGB LED Matrix

Sonido activado 4 X 7 RGB LED Matrix

es este instructable sobre un sonido activado matriz de Led RGB de Led RGB y artículos del asimiento de casa. Los usos de la matriz de LED tres contadores binarios de 4 bits y un desplazamiento de 4 bits registrar (para los conductores de tierra en e
Controlador de joystick de Arduino

Controlador de joystick de Arduino

En este proyecto nos ayudará a armar un simple y desde el controlador de Stick scratch Arduino, para controlar tus proyectos (servos y motores de la C.C.). Esta es una guía sencilla para ayudar a los nuevos usuarios de Arduino en sus proyectos pero r
Construir controladores de juego baratos (Arduino + proceso, unidad, etc.)

Construir controladores de juego baratos (Arduino + proceso, unidad, etc.)

Hi todo el mundo!En mi tiempo libre he estado haciendo una serie de controladores de bajo costo arduino de uso a ser interconectado con cualquier plataforma de su elección (eran de hecho baratos pero que ayuda a que más lindo de un láser).Dejando alg
CONTROLADOR de vuelo de ARDUINO DIY

CONTROLADOR de vuelo de ARDUINO DIY

Permite crear un controlador de vuelo basado en Arduino que puede hacer la sintonización de PID inalámbrica, altitud y orientación cerradura sostenga y coloque la cerradura con la ayuda de un GPS. OK por lo que este controlador de vuelo es un módulo
Cadete de Dub: Holográfica MIDI y controlador de LED para Arduino - parte 1

Cadete de Dub: Holográfica MIDI y controlador de LED para Arduino - parte 1

Creo que instrumentos musicales holográficos será común en el futuro, mostrando en todas partes de las escuelas (para educación), a los hogares (para divertirse), a las oficinas de los medios de comunicación (para la creatividad) y en los estudios de
Joysticks controlador de PS1 con Arduino

Joysticks controlador de PS1 con Arduino

Idea: uno de mis antiguos controladores de Playstation 1 y extraer la configuración del Stick dual que puede ser fácilmente utilizado en un proyecto de microcontrolador (en mi caso: con el Arduino) sin bibliotecas adicionales o los controladores que
Controlador de LED RBG Arduino

Controlador de LED RBG Arduino

Este proyecto es conveniente para los usuarios de Arduino para principiantes. Este es mi primer Instrucable desde la adquisición de un kit Arduino recientemente. Este proyecto incorpora entradas ajustable para controlar la iluminación del color de un
Cómo utilizar el controlador de Motor L293D - Arduino Tutorial

Cómo utilizar el controlador de Motor L293D - Arduino Tutorial

El L293D es un IC de controlador de Motor de 16 pines que puede controlar un conjunto de dos motores al mismo tiempo en cualquier dirección. El L293D se diseña para proporcionar bidireccional corrientes de impulsión de hasta 600 mA (por canal) en ten
Sostenedor de la tarjeta del controlador de Nintendo! w/sonido

Sostenedor de la tarjeta del controlador de Nintendo! w/sonido

finalmente! Titular de la tarjeta que muestra a sus compañeros de trabajo que ha patadas a tope de videojuegos desde los años 80!Este es mi primer instructable y mi primer "proyecto". No he intentado de construir cualquier cosa desde 8vo grado t
Sonido activado cámara Flash

Sonido activado cámara Flash

un sonido rápido y sucio y peligroso activado flash para capturar momentos en el tiempoPaso 1: Lo primero que necesitarás es un altavoz de la computadora amplificado Aquí la víctima sacrificial es un par de kardons de harmon de la venta de garage $1P
Controlar EL alambre con Arduino

Controlar EL alambre con Arduino

Cómo hackear EL inverter alambre para ser controlado con un Arduino.Energía por arduino 3.3voltage (sin baterías)Ningún relé requerido (relé han limitado los ciclos)Este hack evitar inversor auto parpadea-Materiales:Transistor NPN = 123APDiodo = 1N40
Arduino PMW activado escudo de alta potencia o no escudo barato

Arduino PMW activado escudo de alta potencia o no escudo barato

Micro controladores son grandes, pero ¿ha querido controlar algo más grande entonces, digamos que un LED? Si tienes, no busques más (a menos que quieras más 0.6Amps entonces para 4 canales o 2.4Amps para 1 canal), a menos que no te importa gastar más