Bonjour à vous mes chers futuriens ,
Je suis actuellement sur un projet, dans lequel un plafonnier est connecté à un smartphone via bluetooth, et peut sélectionner des modes de fonctionnement différents.
L'un de ces modes consistent à modifier le flux lumineux des lampes grâce au son ambiant (capté via un microphone), pour une utilisation "boite de nuit".
J'ai déjà réalisé un prototype via une modélisation Proteus, dont voici une vidéo :
(Proteus ne pouvant pas simuler en temps direct ce programme, j'ai du ralentir la bande sonore, et j'ai essayé de faire en sorte que ça colle le plus possible :/)
Voici mon code arduino :
Mon problème (comme on peut le voir sur la vidéo), c'est que l'on voit mal les moments ou le son """explose""", mon projet doit plus """claquer""" (soit plus """punchy"""), et je me retrouve un peu bloqué :/,Code:// définition des pins #define pinRed 3 #define pinGreen 5 #define pinBlue 6 #define pinWhite 9 #define pinMicrophone 0 #define pinLuxmeter 1 const int sampleWindow = 50; // Durée d'échantillonage unsigned int sample; byte modeState = 1; // mode de fonctionnement du module int ledRed = 0; // puissance de la led rouge; int ledGreen = 0; int ledBlue = 0; int ledWhite = 0; int valueMicrophone = 0; // valeur reçue depuis le microphone int valueLuxmeter = 0; // valeur reçue depuis le luxmetre void setup() { // définition des modes de fonctionnement des pins pinMode(pinRed, OUTPUT); pinMode(pinGreen, OUTPUT); pinMode(pinBlue, OUTPUT); pinMode(pinMicrophone, INPUT); pinMode(pinLuxmeter, INPUT); } void loop() { valueMicrophone = analogRead(pinMicrophone); // lecture de la valeur du microphone valueLuxmeter = analogRead(pinLuxmeter); // --------------------------- luxmètre if (modeState == 0) { // mode 0 : toutes les lumières allumées ledRed = 255; ledGreen = 255; ledBlue = 255; ledWhite = 255; } if (modeState == 1) { // mode 1 : en fonction du son ambient; unsigned long startMillis = millis(); // Commence un échantillonage unsigned int peakToPeak = 0; // amplitude unsigned int signalMax = 0; unsigned int signalMin = 1024; while (millis() - startMillis < sampleWindow) { sample = analogRead(pinMicrophone); if (sample < 1024) // supprime les échantillons trop grands { if (sample > signalMax) { signalMax = sample; // sauvegarde le niveau maximum } else if (sample < signalMin) { signalMin = sample; // sauvegarde le niveau minimum } } } peakToPeak = signalMax - signalMin; // amplitude crête à crête (variation sur 50ms) int brightness = map(peakToPeak, 0, 1023, 0, 255); ledRed = 0; ledGreen = 0; ledBlue = 0; ledWhite = 0; if (peakToPeak > 255) { if (peakToPeak > 511) { if (peakToPeak > 768) { ledRed = 255; ledGreen = 255; ledBlue = 255; ledWhite = peakToPeak - 765; } else { ledRed = 255; ledGreen = 255; ledBlue = peakToPeak - 511; } } else { ledRed = 255; ledGreen = peakToPeak - 255; } } else { ledRed = peakToPeak; } } if (modeState == 2) { } // Allumer les LEDs : analogWrite(pinRed, ledRed); analogWrite(pinGreen, ledGreen); analogWrite(pinBlue, ledBlue); analogWrite(pinWhite, ledWhite); }
Merci pour toute aide que vous pourrez m'apportez !
-----