Wiki

Reso-nance numérique | Arts et cultures libres

Outils du site


Panneau latéral

projets:light-synth:accueil

Ceci est une ancienne révision du document !


light-synth

  • Porteur du projet : fenshu resonance
  • Date : 09/07/2017/ - …
  • Licence : CC-by-sa-3.0
  • Description : synthé qui marche avec la lumiere
  • Fichiers sources : mettre un lien
  • Lien : mettre un lien

Note d'intention

Synthé qui marche avec la lumiere : Plusieurs pistes sont possible, notamment en changeant les frequences des pwm avec library tone…

light-synth

Notes techniques

Guide pas à pas et conseil pour la réalisation du projet.

code simple pour library tone (2 led branché en 9 et 10):

#include <Tone.h>
Tone freq1;
Tone freq2;
 
void setup()
{
  freq1.begin(9);
  freq2.begin(10);
}
 
void loop()
{
freq1.play(10, 300);
freq2.play(100, 30);
}

Code pour communiquer avec puredata COMPORT (2 led branché en 9 et 10):

On controle ainsi deux pins avec tone depuis Pure Data… Patch puredata : voir fichier 4 dans la page ressource http://reso-nance.org/wiki/logiciels/serial/accueil?s[]=puredata&s[]=serial

String inputString = "";   // chaine de caractères pour contenir les données
boolean stringComplete = false;  // pour savoir si la chaine est complète
String fct ="";
String arg="";
int index;
 
#include <Tone.h>
Tone freq1;
Tone freq2;
 
void setup() {
  Serial.begin(9600);     // port série
  freq1.begin(9);
  freq2.begin(10);
}
 
void loop() {
  if (stringComplete) {
    //Serial.println(inputString); 
    index = inputString.indexOf(' '); // on récupère la position du séparateur (l'espace " ")
    fct = inputString.substring(0,index); // on coupe la chaine en deux : la fonction et l'argument
    arg = inputString.substring(index,inputString.length());
 
    if (fct == "LED10") {
      freq2.play(arg.toInt(),300);
    }
    else if (fct == "LED9") {
      freq1.play(arg.toInt(),300);   
    }
 
    inputString = "";            // vide la chaine
    stringComplete = false;
  }
}
 
/*
  SerialEvent est déclenché quand de nouvelles données sont reçues. 
  Cett routine tourne entre chaque loop(), donc utiliser un delay la fait aussi attendre
 */
void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read(); // Récupérer le prochain octet (byte ou char)
    inputString += inChar; // concaténation des octets
    if (inChar == '\n') {  // caractère de fin pour notre chaine
      stringComplete = true;
    }
  }
}

Boite a rythme a led

On fait clignoter 3 led a la noire, croche triolet, et on controle le temp avec un potentiometre et une photoresistance…

// 3 led au pin 11/12/13 jouant a la noire, croche et triolet
// un potentiometre 10k en A0 : controle le tempo général...
// une photo resistance en A1 : controle un effet de delay
 
#define led1 11   //
#define led2 12  //pin for each led
#define led3 13  //pin for each led
#define factor 6  //pin for each led
 
unsigned long previousMillis[3]; //[x] = number of leds
 
void setup() { 
  pinMode(led1, OUTPUT);   
  pinMode(led2, OUTPUT);  
  pinMode(led3, OUTPUT);  
 
  Serial.begin(9600);
}
void loop() {
 
int sensorValue = analogRead(A0);
sensorValue = map(sensorValue, 0, 1023, 0, 2000);
 
  if(sensorValue > 1990) { 
sensorValue == 10000;
}
int sensorValueB = analogRead(A1);
sensorValueB = map(sensorValueB, 0, 1023, 1023, 0);
 
  if(sensorValueB > 800) { 
 BlinkLedSimple(led1, sensorValue, 0,sensorValueB);   //BlinkLed( which led, interval, one of the stored prevMillis
 BlinkLedSimple(led2, sensorValue/3, 1,sensorValueB);  //last parameters must be different for each led
 BlinkLedSimple(led3, sensorValue/2, 2,sensorValueB); 
}
 
  if(sensorValueB > 400 && sensorValueB < 800 ) { 
 BlinkLed(led1, sensorValue, 0,sensorValueB);   //BlinkLed( which led, interval, one of the stored prevMillis
 BlinkLed(led2, sensorValue/3, 1,sensorValueB);  //last parameters must be different for each led
 BlinkLed(led3, sensorValue/2, 2,sensorValueB); 
}
 
  if(sensorValueB < 400) { 
 BlinkLedSuper(led1, sensorValue, 0,sensorValueB);   //BlinkLed( which led, interval, one of the stored prevMillis
 BlinkLedSuper(led2, sensorValue/3, 1,sensorValueB);  //last parameters must be different for each led
 BlinkLedSuper(led3, sensorValue/2, 2,sensorValueB); 
}
 
Serial.print("potentiometre");
  Serial.println(sensorValue);
 
Serial.print("ldr");
  Serial.println(sensorValueB);
  delay(1); 
 
 
}
 
///Simple blink
  void BlinkLedSimple (int led, int interval, int array, int pwm){    
   if (((long)millis() - previousMillis[array]) >= interval){ 
    previousMillis[array]= millis(); //stores the millis value in the selected array
       digitalWrite(led, !digitalRead(led)); //changes led state
  }}
 
///delayyyy blink
void BlinkLed (int led, int interval, int array, int pwm){   
   if (((long)millis() - previousMillis[array]) >= interval){ 
 
    previousMillis[array]= millis(); //stores the millis value in the selected array
 
    digitalWrite(led, !digitalRead(led)); //changes led state
    delay (pwm/factor);
    digitalWrite(led, !digitalRead(led)); //changes led state
    delay (pwm/factor);
    digitalWrite(led, !digitalRead(led)); //changes led state
  }
}
 
///super delayyyy blink
void BlinkLedSuper (int led, int interval, int array, int pwm){   
   if (((long)millis() - previousMillis[array]) >= interval){ 
 
    previousMillis[array]= millis(); //stores the millis value in the selected array
 
    digitalWrite(led, !digitalRead(led)); //changes led state
    delay (pwm/factor);
    digitalWrite(led, !digitalRead(led)); //changes led state
    delay (pwm/factor);
    digitalWrite(led, !digitalRead(led)); //changes led state
        delay (pwm/factor);
    digitalWrite(led, !digitalRead(led)); //changes led state
    delay (pwm/factor);
    digitalWrite(led, !digitalRead(led)); //changes led state
        delay (pwm/factor);
    digitalWrite(led, !digitalRead(led)); //changes led state
    delay (pwm/factor);
    digitalWrite(led, !digitalRead(led)); //changes led state
        delay (pwm/factor);
    digitalWrite(led, !digitalRead(led)); //changes led state
    delay (pwm/factor);
    digitalWrite(led, !digitalRead(led)); //changes led state
  }
}

Matériaux et outils

Liste de matériel et outils nécessaires.

Photos

Code pour afficher les images du projet :

{{gallery>?&crop&lightbox}}
/home/resonancg/www/wiki/data/attic/projets/light-synth/accueil.1500545824.txt.gz · Dernière modification: 2017/07/20 12:17 de resonance