COI - Beat Keeper (3 / 4 paso)

Paso 3: Programación/código

Descargar el archivo al final del instructable, o copiar el siguiente código en el IDE de Arduino-Intel (Integrated Development Environment). Subir el código a la Junta de Edison. Tenga en cuenta que hay varios parámetros configurables que aparecen en el código, lo más perceptiblemente posible una cadena llamada beat con letras que representan los sensores activará en beat y un unitsPerBeat que indica cuántos caracteres se van en un único latido.

 #include<br> 
 #include 
 #include 
 rgb_lcd lcd; 
 #define S_SENS A3 
 #define T_SENS 8 
 #define ROT_SENS A0 
 int yellowPinNum = 3; 
 int greenPinNum = 5; 
 int redPinNum = 6; 
 int thresholdSound = 400; //Out of 1024 
 //minTime and maxTime can be customized. 
 int minTime = 250;//Corresponds to 240 bpm 
 int maxTime = 1000;//Corresponds to 60 bpm 
 int beatTime = maxTime; 
 long long lastMillis = 0; 
 double score = 1.0; //This is a value kept between 0 and 1 which is affected by your most recent performance. 
 double memoryPersistance = .8; //This value is customizable and should be between 0 and 1; 
 char touchCode = 'T'; 
 char soundCode = 'S'; 
 char bothCode = 'B'; 
 char silentCode = '-'; 
 String beat = "S-T-T-T-"; //This is customizable to produce a new beat. Beats can be of arbitrary length. 
 int unitsPerBeat = 2; //Customizable, is the number of characters in beat per "beat" 
 int beatIndex = 0; 
 boolean touchedLastTime = false; 
 boolean soundLastTime = false; 
 boolean scoreIntegrated = false; 
 void setup() { 
 // Make Sure to Initialize the Pins for Output: 
 pinMode(yellowPinNum, OUTPUT); 
 pinMode(greenPinNum, OUTPUT); 
 pinMode(redPinNum, OUTPUT); 
 //Set up LCD screen 
 lcd.begin(16,2); 
 lcd.setRGB(255,255,255); 
 // Set the pinMode of the inputs 
 pinMode(S_SENS, INPUT); 
 pinMode(T_SENS, INPUT); 
 pinMode(ROT_SENS, INPUT); 
 //Safety: 
 unitsPerBeat = max(unitsPerBeat, 1); 
 } 
 void loop() { 
 //Check for a beat rollover 
 boolean rollOver = false; 
 if(millis()-lastMillis > beatTime){ 
 lastMillis = lastMillis + beatTime; 
 rollOver = true; 
 beatIndex = (beatIndex + 1)%beat.length(); 
 } 
 if(millis() < lastMillis){ 
 lastMillis = millis(); 
 rollOver = true; 
 beatIndex = (beatIndex + 1)%beat.length(); 
 } 
 //Read speed preference and display on LCD. 
 if(rollOver){ 
 beatTime = minTime+(int)(analogRead(ROT_SENS)/1024.0 * (maxTime-minTime)); 
 double bpm = 60.0*1000.0/beatTime; 
 lcd.setCursor(0,0); 
 lcd.print(" ");//Clear Screen 
 lcd.setCursor(0,1); 
 lcd.print(" "); 
 lcd.setCursor(0,0); 
 lcd.print("BPM: "); 
 lcd.print(bpm); 
 beatTime = beatTime/unitsPerBeat; 
 } 
 //Check to see if in first quarter. If so, turn on appropriate LED's, and check for touches. 
 if(millis()-lastMillis < beatTime/3){ 
 scoreIntegrated = false; //Means soundLastTime, touchedLastTime have potentially new values; 
 if(beatIndex == 0){ 
 analogWrite(yellowPinNum, 0); //Full brightness on first beat. 
 } 
 else if (beatIndex%unitsPerBeat==0){ 
 analogWrite(yellowPinNum, 200); //Lower Brightness. 
 }//End if is first beat 
 if(beat[beatIndex]==touchCode || beat[beatIndex] == bothCode){ 
 analogWrite(greenPinNum, 0); 
 } 
 if(beat[beatIndex]==soundCode || beat[beatIndex]==bothCode){ 
 analogWrite(redPinNum, 0); 
 } 
 if(digitalRead(T_SENS)==1){ 
 touchedLastTime=true; 
 } 
 if(analogRead(S_SENS)>thresholdSound){ 
 soundLastTime=true; 
 } 
 } 
 else if(millis()-lastMillis > (beatTime * 2)/3){ 
 scoreIntegrated = false; //Means soundLastTime, touchedLastTime have potentially new values; 
 if(digitalRead(T_SENS)==1){ 
 touchedLastTime=true; 
 } 
 if(analogRead(S_SENS)>thresholdSound){ 
 soundLastTime=true; 
 } 
 } 
 else{ 
 analogWrite(yellowPinNum, 255);//Inverted for some reason. 
 analogWrite(greenPinNum, 255); 
 analogWrite(redPinNum, 255); 
 if(scoreIntegrated == false){ 
 double correctness = 0; 
 if(beat[beatIndex]==bothCode && touchedLastTime && soundLastTime){ 
 correctness=1; 
 } 
 else if(beat[beatIndex]==touchCode && touchedLastTime && !soundLastTime){ 
 correctness=1; 
 } 
 else if(beat[beatIndex]==soundCode && !touchedLastTime && soundLastTime){ 
 correctness=1; 
 } 
 else if(beat[beatIndex]==silentCode && !touchedLastTime && !soundLastTime){ 
 correctness=score; 
 } 
 score = score * memoryPersistance + correctness*(1-memoryPersistance); 
 lcd.setRGB((int)(255*(1-score)),(int)(255 * score),0); 
 lcd.setCursor(0,1); 
 lcd.print((int)(score*100)); 
 lcd.print("%"); 
 scoreIntegrated = true; 
 touchedLastTime=false; 
 soundLastTime=false; 
 } 
 } 
 } 

Artículos Relacionados

Tic Tac Tunes - ahora con Tic Tac Beat Box

Tic Tac Tunes - ahora con Tic Tac Beat Box

Micro-órgano y batería en una caja de Tic TacEsta pequeña caja le dará horas de diversión componiendo sus propias canciones. Puede variar el tempo de la melodía y cambiar entre una escala pentatónica y blues así como producir una variedad de sonidos
Cómo hacer un 90s Hip Hop Beat

Cómo hacer un 90s Hip Hop Beat

Hola mundosoy 90sflav, voy a explicar a usted la base de la muestra y beatmaking para crear una simple hip hop beat.Para ello, las necesidades son relativas. Lo puedes hacer con un Akai MPC, un Boss SP-x0x... o con un DAW (FL Studio, razón, Ableton..
Cómo hacer un alma muestra hip-hop beat

Cómo hacer un alma muestra hip-hop beat

este es el arte de vencer a un alma muestra hip-hop. similar a los trabajos de temprano kanye west en la deserción escolar de la Universidad y a blaze en la inmunidad diplomática.Paso 1: Conseguir motivación de algunos alimentos Esto es esencial! Nec
Cómo hacer que alguien mire Beat-up

Cómo hacer que alguien mire Beat-up

Hola todos y Bienvenidos al blog técnico de Indy Mogul episodio #12 (Beat-up). Este es un build bastante fácil en comparación con la armadura del Samurai de la semana pasada. Usted puede mezclar y combinar estas técnicas para crear el efecto de "cara
Videos Beats: Visualizador de música

Videos Beats: Visualizador de música

Video Beats es un visualizador de música basado en hardware - genera una visualización basada en la música lo alimentan y muestra en cualquier televisor estándar.  Aquí está una pequeña demo (pase a 27 segundos para ver la visualización);El principio
"Beat It" en guitarra Video

"Beat It" en guitarra Video

aquí es mi Beat It de Michael Jackson jugando en ym Fender Squier Telecaster. En otro instructable muestra cómo hacerlo en la tablatura.
Envolver Beats - Capsense Arduino instrumento

Envolver Beats - Capsense Arduino instrumento

envoltura Beats es un instrumento que le permite encadenar notas para crear diferentes melodías y patrones visuales. Construí con la función detección de biblioteca para Arduino y combina con las habilidades musicales de procesamiento para crear un i
Dope culo Beat Box

Dope culo Beat Box

el Sr. "T" dice, "Lástima el tonto que no tiene un culo droga Beat Box!"Paso 1: Tha' puntuación Anotó un par de 9 voltios equipo spkrs de Goodwill($3.99). Encontré un recinto conveniente @ HomeDepot, un pvc "T" de 5 pulgadas.
Auriculares de madera soporte para mis auriculares Beats

Auriculares de madera soporte para mis auriculares Beats

Siempre he dejado mis auriculares en mi escritorio o silla y siempre parecía un lío. Decidí que necesitaba para hacer un soporte personalizado para ellos a limpiar el desorden pero principalmente para demostrar.He hecho un video que muestra cómo hizo
Cubo del LED 3 x 3 x 3 con la música beat detección - PIC16F84

Cubo del LED 3 x 3 x 3 con la música beat detección - PIC16F84

cubos LED son grandes por sí mismos sin embargo decidí condimentar con sincronización de beats de música. Se trata de un 3 x 3 x 3 cubo del LED con un PIC 16F84A funcionando a 4MHz.La detección de beat real se realiza en hardware por un amplificador
Análogo Beat Box

Análogo Beat Box

este es un circuito analógico que juega a un ritmo de tambor sintetizado. Puede ser escalado en cantidad y la calidad de los ruidos.Paso 1: Lo que usted necesita fuente de 1 alimentación3 breadboardsLos cables (amarillo, azul, rojo y otros), si te ap
Password Keeper

Password Keeper

Este es mi último encargado de la contraseña que tiene un montón de mejoras sobre la última iteración. Las mejoras incluyen, cifrado aes de 256 bits, factor de forma pequeño y esta versión cuesta considerablemente menos que la versión anterior. La cl
Atención sanitaria basada en Edison Board_Heart Beat

Atención sanitaria basada en Edison Board_Heart Beat

*****************************************************************************************$$ Reuniendo datos escenarios $$============================================================Paso 1. recopilar datos crudos de la contracción de los vasos sanguín
Beat Sync

Beat Sync

Beat Sync es un medidor de volumen de espectro de audio de frecuencia única.  Puede aislar alrededor de una frecuencia determinada (elegir el bajo ) y mostrar en un gráfico de barras de LED de 8 segmentos creativo.  Esto pretende ser bastante simple,