Étape 3: programme Arduino
Nous devons maintenant programmer l’Arduino pour contrôler le bouclier LoL.
Il est recommandé d’utiliser le Diavolino pour contrôler le bouclier LoL afin d’éviter les effets de "fantômes" sur les voyants lumineux en raison de la LED verte de Mont surface connectée à la broche 13 sur l’Arduino standard, mais un Arduino standard fonctionnera très bien.
Cela nécessite deux bibliothèques Arduino :
-la bibliothèque FFT trouvé sur le forum de l’Arduino
-la bibliothèque de Charlieplexing pour le bouclier LoL
Installation des bibliothèques pour Arduino peut être un peu intimidant si vous n’avez pas fait auparavant, mais vous ferez très bien !
Suivez les instructions sur l’installation des bibliothèques Arduino ici :
http://www.Arduino.cc/en/Guide/Libraries
La bibliothèque FFT interrompt le signal audio dans 64 bandes de fréquences.
Le bouclier de LoL est 14 x 9 LEDs. Nous moyenne les bandes de 64 fréquences ensemble dans 14 bandes de fréquences. Nous allons jeter quelques données parce que 14 n’est pas diviser en 64 uniformément, mais whatevs.
La valeur de chaque bande de fréquences est remappée de 0 à 9.
Vous pouvez copier le code Arduino ci-dessous, obtenir le code de GitHub (recommandé) ou télécharger le. Fichier ZIP, qui inclut les bibliothèques et le code de l’Arduino.
Voici le lien de GitHub :
https://github.com/andydoro/LoLShield-FFT
Voici le code de l’Arduino :
/*
FFT pour bouclier LoL v0.9
par Andy Doro
http://andydoro.com/
basé sur la bibliothèque de la FFT et code des forums Arduino et
la bibliothèque de Charlieplexing pour le bouclier LoL.
* / #include
#include
#define AUDIOPIN 5
im Char [128], données [128] ;char data_avgs [14] ;
int i = 0, val ;
void setup() {}
LedSign::Init() ; Initilizes le bouclier LoL
}void loop() {}
pour (i = 0; i < 128; i ++) {}
Val = analogRead(AUDIOPIN) ;
données [i] = val ;
im [i] = 0 ;
};
fix_fft(Data,im,7,0) ;
pour (i = 0; i < 64; i ++) {}
données [i] = sqrt (données [i] * données [i] + im [i] * im[i]) ; Il obtient la valeur absolue des valeurs du tableau, donc nous traitons uniquement avec des nombres positifs
};
ensemble moyens barres
pour (i = 0; i < 14; i ++) {}
data_avgs [i] = données [J’ai * 4] + données [J’ai * 4 + 1] + données [J’ai * 4 + 2] + données [J’ai * 4 + 3] ; moyenne de l’ensemble
data_avgs [i] = carte (data_avgs [i], 0, 30, 0, 9) ; valeurs de remappage des couleurs pour LoL
}
Set LoLShield
pour (int x = 0; x < 14; x ++) {}
pour (int y = 0; y < 9; y ++) {}
Si (y < data_avgs[13-x]) {/ / 13-x inverse les barres sorte voltages faibles à élevée sont représentés de gauche à droite.
LedSign::Set(x,y,1) ; la valeur de la LED sur
} else {}
LedSign::Set(x,y,0) ; déclencher la LED
}
}
}
}