Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 /* 00002 * INCLUDES 00003 */ 00004 #include "mbed.h" 00005 00006 /* 00007 * CONSTANTES 00008 */ 00009 const unsigned char AUDIO_VOLUME[10] = { 0, 28, 56, 84, 112, 140, 168, 197, 226, 255 }; 00010 00011 /* 00012 * VARIABLES GLOBALES 00013 */ 00014 unsigned int global_PWM_Period; 00015 unsigned int global_PWM_Duty; 00016 unsigned int global_PWM_PeriodReload; 00017 unsigned int global_PWM_DutyReload; 00018 unsigned int global_PWM_Counter; 00019 unsigned int global_PWM_State; 00020 00021 /* 00022 * DEFINITION DES MODULES 00023 */ 00024 // définitions des LEDs 00025 //DigitalOut myLed1(LED1); 00026 DigitalOut myLed2(LED2); 00027 DigitalOut myLed3(LED3); 00028 DigitalOut myLed4(LED4); 00029 // définitions des boutons 00030 DigitalIn myButton1(p17); 00031 DigitalIn myButton2(p18); 00032 DigitalIn myButton3(p19); 00033 DigitalIn myButton4(p20); 00034 // définitions du son 00035 DigitalOut audioCS(p25); 00036 SPI audioVolume(p5, NC, p7); 00037 //DigitalOut audioPWM(p26); 00038 DigitalOut audioPWM(LED1); 00039 Ticker tickerPWM; 00040 00041 /* 00042 * INTERRUPTIONS 00043 */ 00044 // interruption permettant la génération du PWM 00045 void IRQ_PWM( void ) 00046 { 00047 // si un signal PWM doit etre généré 00048 if( global_PWM_Period ){ 00049 // incrémente le compteur 00050 global_PWM_Counter++; 00051 // si l'état de la pin de PWM est haute ( duty < counter < period ) 00052 if( global_PWM_State ){ 00053 // si le compteur dépasse la période 00054 if( global_PWM_Counter >= global_PWM_Period ){ 00055 // mise à 0 du signal 00056 audioPWM = 0; 00057 global_PWM_State = 0; 00058 // reset du counter 00059 global_PWM_Counter = 0; 00060 // recharge la période du PWM 00061 global_PWM_Period = global_PWM_PeriodReload; 00062 // recharge le rapport cyclique du PWM 00063 global_PWM_Duty = global_PWM_DutyReload; 00064 } 00065 // si l'état de la pîn de PWM est basse ( 0 < counter < duty ) 00066 }else{ 00067 // si le compteur dépasse la période 00068 if( global_PWM_Counter >= global_PWM_Duty ){ 00069 // mise à 0 du signal 00070 audioPWM = 1; 00071 global_PWM_State = 1; 00072 } 00073 } 00074 } 00075 } 00076 00077 /* 00078 * SOUS PROGRAMMES 00079 */ 00080 void audio_SetVolume( unsigned int volumeIndex ) 00081 { 00082 audioCS = 0; 00083 audioVolume.write( AUDIO_VOLUME[volumeIndex] ); 00084 audioCS = 1; 00085 } 00086 00087 void UpdatePWM( unsigned int period, unsigned int duty ) 00088 { 00089 global_PWM_PeriodReload = period; 00090 global_PWM_DutyReload = duty; 00091 } 00092 00093 void InitPWM( void ) 00094 { 00095 // définition de la fonction qui gère le signal PWM (appellée toutes les 10µs) 00096 tickerPWM.attach_us( &IRQ_PWM, 10 ); 00097 // reset des variables liées au PWM 00098 global_PWM_Counter = 0; 00099 global_PWM_Period = 0; 00100 global_PWM_PeriodReload = 0; 00101 global_PWM_Duty = 0; 00102 global_PWM_DutyReload = 0; 00103 global_PWM_State = 0; 00104 audioPWM = 0; 00105 } 00106 00107 /* 00108 * FONCTION PRINCIPALE 00109 */ 00110 int main() 00111 { 00112 // variable locale 00113 unsigned char i; 00114 unsigned int delay; 00115 unsigned char flagStart, flagSens; 00116 00117 // initialise les variables 00118 i = 0; 00119 delay = 200; 00120 flagStart = 1; 00121 flagSens = 0; 00122 // boucle de fonctionnement principale 00123 while(1) { 00124 /* // si l'application est lancée 00125 if( flagStart ) 00126 { 00127 // éteint toutes les LED 00128 myLed1 = 1; 00129 myLed2 = 1; 00130 myLed3 = 1; 00131 myLed4 = 1; 00132 // en fonction de la valeur de i 00133 switch( i & 0x03 ) 00134 { 00135 case 0 : 00136 myLed1 = 0; 00137 break; 00138 case 1 : 00139 myLed2 = 0; 00140 break; 00141 case 2 : 00142 myLed4 = 0; 00143 break; 00144 case 3 : 00145 myLed3 = 0; 00146 break; 00147 } 00148 // délay d'attente 00149 wait_ms(delay); 00150 // si le sens est positif 00151 if( flagSens ){ 00152 // incrémente le compteur 00153 i++; 00154 // si le sens est négatif 00155 }else{ 00156 // décrémente le compteur 00157 i--; 00158 } 00159 } 00160 */ // si appuie sur bouton 1 00161 if(!myButton1){ 00162 led = led - 0.1; 00163 // change l'état de marche arret 00164 flagStart ^= 0x01; 00165 // attend que le bouton soit relaché 00166 while( !myButton1 ); 00167 } 00168 // si appuie sur bouton 2 00169 if(!myButton2){ 00170 led = led + 0.1; 00171 // change le sens 00172 flagSens ^= 0x01; 00173 // attend que le bouton soit relaché 00174 while( !myButton2 ); 00175 } 00176 // si appuie sur bouton 3 00177 if(!myButton3){ 00178 // réduit le délay de changement 00179 delay -= 10; 00180 // attend que le bouton soit relaché 00181 while( !myButton3 ); 00182 } 00183 // si appuie sur bouton 4 00184 if(!myButton4){ 00185 // augmente le délay de changement 00186 delay += 10; 00187 // attend que le bouton soit relaché 00188 while( !myButton4 ); 00189 } 00190 } 00191 }
Generated on Wed Aug 3 2022 21:30:08 by
1.7.2