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

Files at this revision

API Documentation at this revision

Comitter:
marcolasek
Date:
Tue Jun 04 12:55:46 2019 +0000
Parent:
12:e2bb579c4455
Commit message:
version final

Changed in this revision

NeoPixel.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/NeoPixel.lib	Tue Jun 04 12:55:46 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/marcolasek/code/NeoPixel/#911fe4d70205
--- a/main.cpp	Mon Feb 22 13:40:13 2016 +0000
+++ b/main.cpp	Tue Jun 04 12:55:46 2019 +0000
@@ -1,94 +1,143 @@
-//---------------------------------------------------------------
-//  Demo program of Button class and ButtonGroup class
-//
-//  2016/02/22, Copyright (c) 2016 MIKAMI, Naoki
-//---------------------------------------------------------------
+#include "button_group.hpp"
+#include "neopixel.h"
+
+#define N 12 //Nombre de led à gerer
 
-#include "button_group.hpp"
+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;
 
-TS_DISCO_F746NG ts_;
-LCD_DISCO_F746NG lcd_;
+//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 int X1 = 30;
-    const int Y1 = 100;
-
     const uint32_t BACK_COLOR = 0xFF006A6C;             // teal green
-    const uint32_t INACTIVE = BACK_COLOR & 0xE0FFFFFF;  // color for inactive button
     lcd_.Clear(BACK_COLOR);
-       
-    const int NUMBER_BUTTONS = 4;
-    const string STR[NUMBER_BUTTONS] = {"Button1", "Button2", "Button3", "Button4"};
-    ButtonGroup bGroup(lcd_, ts_, 10, Y0, 66, 40,
+
+    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);
-                       
-    const string STR_SW[2] = {"ON", "OFF"};
-    ButtonGroup sw(lcd_, ts_, 10, 160, 66, 40,
-                   LCD_COLOR_GREEN, BACK_COLOR, 2, STR_SW, 5, 0, 2);
-                       
-    Button reset(lcd_, ts_, 410, Y0, 60, 40,
-                 LCD_COLOR_BLUE, BACK_COLOR, "Reset", Font12);
-    reset.Draw(INACTIVE, LCD_COLOR_GRAY);
+    bGroup.Draw(0, LCD_COLOR_DARKBLUE);
 
     const string MULTI[2] = {"ON", "OFF"};
-    ButtonGroup multiTouch(lcd_, ts_, 300, Y0+100, 60, 40,
-                 LCD_COLOR_BLUE, BACK_COLOR, 2, MULTI, 5, 0, 2);
-    multiTouch.Draw(0, LCD_COLOR_DARKBLUE);
+    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(250, Y0+80, (uint8_t *)"Multi-touch ON, OFF", LEFT_MODE);
+    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);
 
-    lcd_.SetFont(&Font20);
-    lcd_.DisplayStringAt(120, 250, (uint8_t *)"02/22 22:36", LEFT_MODE);
-        
-    DigitalOut dOut(D7);
-    int num;
+
+            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
+                }
+            }
 
-    while (true)
-    {
-        dOut = 1;
-        bool touched = bGroup.GetTouchedNumber(num, LCD_COLOR_DARKBLUE);
-        dOut = 0;
-        
-        if (touched)
-        {
-            char str[20];
-            lcd_.SetFont(&Font16);
-            lcd_.SetTextColor(LCD_COLOR_WHITE);
-            sprintf(str, "Button%d pressed", num+1);
-            lcd_.DisplayStringAt(X1, Y1, (uint8_t *)str, LEFT_MODE);
-            
-            reset.Redraw();
+            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
         }
-        
-        if (sw.Touched(0, LCD_COLOR_DARKGREEN))
-            lcd_.DisplayStringAt(X1, 210, (uint8_t *)"ON ", LEFT_MODE);
-        if (sw.Touched(1, LCD_COLOR_DARKGREEN))
-            lcd_.DisplayStringAt(X1, 210, (uint8_t *)"OFF", LEFT_MODE);
-        
-        if (reset.Touched())
-        {
-            bGroup.Redraw(num);
-            reset.Draw(INACTIVE, LCD_COLOR_GRAY);
-            lcd_.SetFont(&Font16);
-            lcd_.DisplayStringAt(X1, Y1, (uint8_t *)"               ", LEFT_MODE);
-        }
-        
-        int mNum;
-        if (multiTouch.GetTouchedNumber(mNum, LCD_COLOR_DARKBLUE))
-        {
-            Button::SetMultiTouch(mNum == 0);   // Set or reset multi-touch
-            if (mNum == 0)
-                lcd_.DisplayStringAt(320, Y0+150, (uint8_t *)"ON ", LEFT_MODE);
-            else
-                lcd_.DisplayStringAt(320, Y0+150, (uint8_t *)"OFF", LEFT_MODE);
-        }
-        wait(0.01f);
     }
+
 }
 
+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);
+}
\ No newline at end of file