Go Down

Topic: Envoyer une valeur nombre de max msp vers un arduino Uno (Read 744 times) previous topic - next topic

wurst

Bonjour,

Je souhaite synchroniser un stroboscope programmé dans le arduino avec max msp.

Voilà le code que j'utilise pour le stroboscope  :

Code: [Select]

/*
  Police Strobe Light
  Create police strobe light effect with speed control of the blink.

  Coded by: arduinoprojects101.com
*/
const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
int sensorValue = 0;        // value read from the pot
int timer = 0;              // delay value

void setup() {
  // initialize the digital pin 12, 11 as an output.
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);
  // map sensorValue reading to match timer delay between 10ms to 500ms
  timer = map(sensorValue, 0, 1023, 10, 500);

  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH);
  delay(2);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  delay(timer);
}


Il fonctionne très bien avec un potentiomètre sur l'entrée A0.

J'aimerai maintenant pouvoir modifier le valeur timer via max msp.
J'ai trouvé plusieurs pistes ça et là.
J'avais réussi à faire clignoter une led avec max msp via  le patch "ArduinoMax_InOut_forDummies" disponible en bas de page  à cette adresse : http://playground.arduino.cc/Interfacing/MaxMSP
Le problème est que max msp ne fait pas clignoter les leds de manière précise. il ya des bugs dans la fréquence de clignotement.

Du coup j'aimerai laisser le programme du arduino activer le clignotement car il le fait très bien

Au final, je souhaite envoyer une valeur de timer, de 0 à 1024, de max msp vers arduino.
J'ai fait des recherches aussi via une communication midi virtuel via "loopbe" mais sans résultat.

La plupart des pistes que j'ai trouvé contrôle directement les sorties et ce n'est pas ce que je souhaite. Finalement je souhaite juste envoyer une valeur nombre au arduino.

Est ce quelqu'un aurait une idée sur la manière de procéder ?

wurst

A priori j'ai trouvé la solution :

Code: [Select]

const int ledPin = 13;     
int value = 0;
int timer = 0;

void setup()
{
   Serial.begin(9600);
   pinMode(ledPin, OUTPUT);
}
void loop() {
  if (Serial.available()) {
  value = Serial.read();
  }
  timer = map(value, 0, 255, 10, 500);
  digitalWrite(13, HIGH);
  delay(2);
  digitalWrite(13, LOW);
  delay(timer);
}


Reste à vérifier que l'effet stroboscopique est précis.

wurst

Bonjour,

Je relance ce topic car j'aimerai faire évoluer mon stroboscope.
J'aimerai à la fois contrôler le temps, la valeur  "timer", mais aussi cette valeur : delay(2); qui correspond  au temps où les leds restent allumées.

Le problème est que je ne sais pas comment récupérer deux informations via serial.
J'ai lut sur ce topic qu'il fallait utiliser l'outil "spell" dans max et découper la liste envoyée dans le code arduino :
http://forum.arduino.cc/index.php?PHPSESSID=h712u6dttlvb16b35pvqh9iqj7&topic=205189.0

Mais j'ai vraiment du mal à comprendre quelle partie de ce code je dois utiliser. Est ce que quelqu'un aurait une idée des lignes à insérer dans mon code ?

wurst

J'ai trouvé de l'aide à cette adresse : https://cycling74.com/forums/topic/serial-control-of-arduino-pins-not-reading-them-writing-them-from-max/

J'ai adapté son code au mien :
Code: [Select]

const int ledPin = 13;     
int timer = 0;
int vitesse = 0;


void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
  if (Serial.available() > 0) {
   
        int red = Serial.parseInt();
    // do it again:
    int green = Serial.parseInt();

if (Serial.read() == '\n') {
 timer = green;
 vitesse = map(red, 0, 255, 0, 127);
 }
 }

  digitalWrite(13, HIGH);
  delay(timer);
  digitalWrite(13, LOW);
  delay(vitesse);
}

J'ai gardé les noms des constantes red et green par flème.
Mon code est surement limite car c'est de la bidouille, mais ça fonctionne pas trop mal.
J'ai des petits soucis quand je bouge les faders trop vite car ça fait bugguer le arduino. Trop d'infos en même temps je pense mais ça se rétablit au bout de quelques secondes.

Si quelqu'un est intéressé, je peux mettre un lien vers mon patch max/msp (je ne peux pas poster le code ici car il est trop long). C'est un patch qui réceptionne des données de faders de l'application android "TouchOSC" et les envoie au arduino après traitement.

Décidément ce topic n'intéresse pas grand monde :)
Ou alors...
je trouve les réponses trop rapidement.

Go Up