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 :
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);
}
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é :/,
Merci pour toute aide que vous pourrez m'apportez !