Programme qui permet de piloter un bandeau de LED ring (de la marque adafruit) en fonction du son qui provient d'un microphone externe. Programme fonctionnant sur un microcontrôleur DISCO-F746NG. Ce projet a était fait dans la cadre du cour d'interface de la Licence MECSE de l'IUT de Cachan.
Dependencies: TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG NeoPixel BUTTON_GROUP
test
main.cpp
- Committer:
- marcolasek
- Date:
- 2019-06-04
- Revision:
- 13:075e7b811cc6
- Parent:
- 12:e2bb579c4455
File content as of revision 13:075e7b811cc6:
#include "button_group.hpp" #include "neopixel.h" #define N 12 //Nombre de led à gerer NeoPixelOut strip(D1); //Sortie pour le bandeau de led Serial pc (USBTX, USBRX); //Paramètre pour le debug USB AnalogIn sound (A0); //Entrée analogique pour le capteur du son TS_DISCO_F746NG ts_; //Parametre pour le tactile LCD_DISCO_F746NG lcd_; //Parametre pour l'écran using namespace Mikami; //Fonctions void allumeLed(long couleur); //Fonction qui allumer les toutes les leds, elle prends en parametre la couleur à allumer void allumeLed(long couleur, int i); //Fonction qui allumer les leds de la couleur 1, //elle prends en parametre la couleur à allumer //et i etant le numéro de la led à allumer void eteindreLed(); //Fonction qui eteinds toutes les leds //Variables float lum = 1.0; //Valeur de la luminosité de 0.1 à 1.0 long couleur1 = 0x00FF00; //Valeur de la couleur 1 long couleur2 = 0xFF0000; //Valeur de la couleur 2 int main() { const int Y0 = 5; const uint32_t BACK_COLOR = 0xFF006A6C; // teal green lcd_.Clear(BACK_COLOR); const int NUMBER_BUTTONS = 2; const string STR[NUMBER_BUTTONS] = {"Mode 1 : Normal", "Mode 2 : Chenillard"}; ButtonGroup bGroup(lcd_, ts_, 10, Y0+150, 180, 40, LCD_COLOR_BLUE, BACK_COLOR, NUMBER_BUTTONS, STR, 5, 5, 3); bGroup.Draw(0, LCD_COLOR_DARKBLUE); const string MULTI[2] = {"ON", "OFF"}; ButtonGroup multiTouch(lcd_, ts_, 10, Y0+70, 60, 40, LCD_COLOR_BLUE, BACK_COLOR, 2, MULTI, 5, 0, 2); multiTouch.Draw(1, LCD_COLOR_DARKBLUE); lcd_.SetTextColor(LCD_COLOR_WHITE); lcd_.SetFont(&Font16); lcd_.DisplayStringAt(10, Y0+50, (uint8_t *)"Activation :", LEFT_MODE); int num; //Vairable qui stock la valeur de la touche appuyée float valeurMicro; //Variable qui sotck la valeur de notre micro bool start = false; //Variable pour savoir si on est à on ou off int mode = 1; //Variable pour savoir quel mode est activé while (true) { for (int i = 0; i < N ; i++) { //Boucle qui permet d'activer led par led char str[20]; //Variable qui permet d'afficher sur notre écran sprintf(str,"Son : %f", 0.00); //On affiche la valeur 0 lcd_.SetFont(&Font20); int mNum; //Variable qui permet de savoir sur quel bouton on a appuyé if (multiTouch.GetTouchedNumber(mNum, LCD_COLOR_DARKBLUE)) { //Si on a appuyé sur un bouton Button::SetMultiTouch(mNum == 0); // Set or reset multi-touch if (mNum == 0) { //Si on a appuyé sur le bouton On start = true; //Variable start à true //lcd_.DisplayStringAt(10, Y0+120, (uint8_t *)"ON ", LEFT_MODE); //On affiche On sur l'ecran } else { //Sinon bouton OFF eteindreLed(); start = false; //Variable start à false //lcd_.DisplayStringAt(10, Y0+120, (uint8_t *)"OFF", LEFT_MODE); //On affiche Off sur l'ecran } } lcd_.SetFont(&Font20); if (start == true) { //Si on appuyé sur le bouton On valeurMicro = sound.read(); //On recupere la valeur du son sprintf(str,"Son : %f", valeurMicro); //On affiche la valeur de notre micro sur l'écran if (valeurMicro < 0.25) { //Si on est inférieur à valeur on est inferieur à la limite on change la couleur 2 if (mode == 1) { //Si nous somme dans le mode 1 allumeLed(couleur1); } else { //Sinon allumeLed(couleur1, i); } } else { //Si on est supérieur à valeur on est inferieur à la limite on change la couleur 2 if (mode == 1) { //Si nous somme dans le mode 1 allumeLed(couleur2); } else { //Sinon allumeLed(couleur2, i); } } } lcd_.DisplayStringAt(10, Y0+20, (uint8_t *)str, LEFT_MODE); //On met à jour l'affichage bool touched = bGroup.GetTouchedNumber(num, LCD_COLOR_DARKBLUE); if (touched) { char str[20]; if (num == 0) { mode = 1; } else { mode =2 ; } } wait(0.03f); //Tempo } } } void allumeLed(long couleur) { Pixel strip1[N]; strip.global_scale = lum; for(int i =0; i <N; i++) { strip1[i].hex = couleur; } strip.send(strip1, N); } void allumeLed(long couleur, int i) { Pixel strip1[N]; strip.global_scale = lum; strip1[i].hex = couleur; strip.send(strip1, i); } void eteindreLed() { Pixel strip1[N]; for(int i =0; i < N; i++) { strip1[i].hex = 0x000000; } strip.global_scale = 0.01; strip.send(strip1, N); }