Objectifs
- Introduire la notion de l’intégration numérique
- Savoir lire les la sortie Audio de son Smartphone
- Savoir gérer des actions en fonction du temps
- Savoir commander plusieurs LEDs en fonction de la durée de l’appel entrant
- Etc.
Gain et sorties
#define Gain 1
#define LED1 2
#define LED2 3
#define LED3 4
Seuils d’activation des LEDs
#define Seuil1 10 // Activation LED1
#define Seuil2 20 // Activation LED2
#define Seuil3 30 // Activation LED3
#define SeuilMax 50 // Init
#define SeuilAudio 2 // Détection appel entrant (A Mesurer)
Lecture entrées audio – Signal stéréo
Audio_left=analogRead(A0);
Audio_right=analogRead(A1);
Sommation + Gain
Audio_sig=Gain*(Audio_left+Audio_right);
Remplissage du buffer (intégration numérique)
if(Audio_sig>SeuilAudio) count+=1;
Activation des sorties
if (count >Seuil1) digitalWrite(LED1, HIGH);
else digitalWrite(LED1, LOW);
if (count >Seuil2) digitalWrite(LED2, HIGH);
else digitalWrite(LED2, LOW);
if (count >Seuil3) digitalWrite(LED3, HIGH);
else digitalWrite(LED3, LOW);
Initialisation
if (count >SeuilMax)
{
count=0;
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
}
Affichage dans le port série
Serial.println(Audio_sig);
Exemple
#define Gain 1
#define LED1 2
#define LED2 3
#define LED3 4
#define Seuil1 10 // Activation LED1
#define Seuil2 20 // Activation LED2
#define Seuil3 30 // Activation LED3
#define SeuilMax 50 // Init
#define SeuilAudio 2 // Détection appel entrant (A Mesurer)
unsigned int Audio_left,Audio_right,Audio_sig;
unsigned long count=0;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
/*ADMUX |=0x40;
ADCSRA |=0xE7;
ADCSRB |=0x00;*/
}
void loop() {
// Lecture entrées audio - Signal stéréo
Audio_left=analogRead(A0);
Audio_right=analogRead(A1);
// Sommation + Gain
Audio_sig=Gain*(Audio_left+Audio_right);
// Remplissage (intégration numérique)
if(Audio_sig>SeuilAudio) count+=1;
// Activation des sorties
if (count >Seuil1) digitalWrite(LED1, HIGH);
else digitalWrite(LED1, LOW);
if (count >Seuil2) digitalWrite(LED2, HIGH);
else digitalWrite(LED2, LOW);
if (count >Seuil3) digitalWrite(LED3, HIGH);
else digitalWrite(LED3, LOW);
// Init
if (count >SeuilMax)
{
count=0;
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
}
// Affichage port série
Serial.println(Audio_sig);
}