1st release

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
CedricSC
Date:
Wed Jun 17 13:33:07 2015 +0000
Commit message:
1st release

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r db5b31dd20a0 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jun 17 13:33:07 2015 +0000
@@ -0,0 +1,191 @@
+/*
+* INCLUDES
+*/
+#include "mbed.h"
+
+/*
+* CONSTANTES
+*/
+const unsigned char AUDIO_VOLUME[10] = { 0, 28, 56, 84, 112, 140, 168, 197, 226, 255 };
+
+/*
+* VARIABLES GLOBALES
+*/
+unsigned int global_PWM_Period;
+unsigned int global_PWM_Duty;
+unsigned int global_PWM_PeriodReload;
+unsigned int global_PWM_DutyReload;
+unsigned int global_PWM_Counter;
+unsigned int global_PWM_State;
+
+/*
+* DEFINITION DES MODULES
+*/
+// définitions des LEDs
+//DigitalOut myLed1(LED1);
+DigitalOut myLed2(LED2);
+DigitalOut myLed3(LED3);
+DigitalOut myLed4(LED4);
+// définitions des boutons
+DigitalIn myButton1(p17);
+DigitalIn myButton2(p18);
+DigitalIn myButton3(p19);
+DigitalIn myButton4(p20);
+// définitions du son
+DigitalOut audioCS(p25);
+SPI audioVolume(p5, NC, p7);
+//DigitalOut audioPWM(p26);
+DigitalOut audioPWM(LED1);
+Ticker tickerPWM;
+
+/*
+* INTERRUPTIONS
+*/
+// interruption permettant la génération du PWM
+void IRQ_PWM( void )
+{
+    // si un signal PWM doit etre généré
+    if( global_PWM_Period ){
+        // incrémente le compteur
+        global_PWM_Counter++;
+        // si l'état de la pin de PWM est haute ( duty < counter < period )
+        if( global_PWM_State ){
+            // si le compteur dépasse la période
+            if( global_PWM_Counter >= global_PWM_Period ){
+                // mise à 0 du signal
+                audioPWM = 0;
+                global_PWM_State = 0;
+                // reset du counter
+                global_PWM_Counter = 0;
+                // recharge la période du PWM
+                global_PWM_Period = global_PWM_PeriodReload;
+                // recharge le rapport cyclique du PWM
+                global_PWM_Duty = global_PWM_DutyReload;
+            }
+        // si l'état de la pîn de PWM est basse ( 0 < counter < duty )
+        }else{
+            // si le compteur dépasse la période
+            if( global_PWM_Counter >= global_PWM_Duty ){
+                // mise à 0 du signal
+                audioPWM = 1;
+                global_PWM_State = 1;
+            }
+        }
+    }
+}
+
+/*
+* SOUS PROGRAMMES
+*/
+void audio_SetVolume( unsigned int volumeIndex )
+{
+    audioCS = 0;
+    audioVolume.write( AUDIO_VOLUME[volumeIndex] );
+    audioCS = 1;
+}
+
+void UpdatePWM( unsigned int period, unsigned int duty )
+{
+    global_PWM_PeriodReload = period;
+    global_PWM_DutyReload = duty;
+}
+
+void InitPWM( void )
+{
+    // définition de la fonction qui gère le signal PWM (appellée toutes les 10µs)
+    tickerPWM.attach_us( &IRQ_PWM, 10 );
+    // reset des variables liées au PWM
+    global_PWM_Counter = 0;
+    global_PWM_Period = 0;
+    global_PWM_PeriodReload = 0;
+    global_PWM_Duty = 0;
+    global_PWM_DutyReload = 0;
+    global_PWM_State = 0;
+    audioPWM = 0;
+}
+
+/*
+* FONCTION PRINCIPALE
+*/
+int main()
+{
+    // variable locale
+    unsigned char i;
+    unsigned int delay;
+    unsigned char flagStart, flagSens;
+    
+    // initialise les variables
+    i = 0;
+    delay = 200;
+    flagStart = 1;
+    flagSens = 0;
+    // boucle de fonctionnement principale
+    while(1) {
+/*        // si l'application est lancée
+        if( flagStart )
+        {
+            // éteint toutes les LED
+            myLed1 = 1;
+            myLed2 = 1;
+            myLed3 = 1;
+            myLed4 = 1;
+            // en fonction de la valeur de i
+            switch( i & 0x03 )
+            {
+                case 0 :
+                    myLed1 = 0;
+                    break;
+                case 1 :
+                    myLed2 = 0;
+                    break;
+                case 2 :
+                    myLed4 = 0;
+                    break;
+                case 3 :
+                    myLed3 = 0;
+                    break;
+            }
+            // délay d'attente
+            wait_ms(delay);
+            // si le sens est positif
+            if( flagSens ){
+                // incrémente le compteur
+                i++;
+            // si le sens est négatif
+            }else{
+                // décrémente le compteur
+                i--;
+            }
+        }
+*/        // si appuie sur bouton 1
+        if(!myButton1){
+            led = led - 0.1;
+            // change l'état de marche arret
+            flagStart ^= 0x01;
+            // attend que le bouton soit relaché
+            while( !myButton1 );
+        }
+        // si appuie sur bouton 2
+        if(!myButton2){
+            led = led + 0.1;
+            // change le sens
+            flagSens ^= 0x01;
+            // attend que le bouton soit relaché
+            while( !myButton2 );
+        }
+        // si appuie sur bouton 3
+        if(!myButton3){
+            // réduit le délay de changement
+            delay -= 10;
+            // attend que le bouton soit relaché
+            while( !myButton3 );
+        }
+        // si appuie sur bouton 4
+        if(!myButton4){
+            // augmente le délay de changement
+            delay += 10;
+            // attend que le bouton soit relaché
+            while( !myButton4 );
+        }
+    }
+}
diff -r 000000000000 -r db5b31dd20a0 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Jun 17 13:33:07 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/7e07b6fb45cf
\ No newline at end of file