Bonjour,
J'ai récemment programmé un capteur (télémètre analogique IR) branché sur une carte Arduino UNO (Standard Firmata) reliée, via USB, à mon Mac et je récupère les données sous Pure Data. Ce branchement est assez classique (même si j'ai un peu galéré pour arriver à un résultat). Ensuite, je filtre dans Pd les données pour retirer un certain parasitage inhérent au capteur.
Je me demandais deux choses :
* Est-ce qu'il n'est pas préférable que les calculs du filtrage (moyennage, recadage, réduction du nombre de données) soient placés dans le code d'Arduino plutôt que dans Pd ? Ce serait plus rapide, non ?
* Est-il possible d'envoyer les données du capteur directement dans un objet standard de Pure Data comme "ctlin" ? En fait, je cherche à convertir en MIDI les données envoyées par le câble USB (qui alimente la carte Arduino). Il y a bien un programme Arduino qui traite du MIDI, mais avec ce programme rien ne sort du module "ctlin"... Autre piste sur Codelab (http://codelab.fr/1711) : il est question d'une bibliothèque MIDI à installer (http://www.arduino.cc/playground/Main/MIDILibrary). Mais, là aussi cela ne fonctionne pas avec l'installation que j'ai décrite (capteur+Pd+Mac branché en USB). Dans les deux cas, dans les préférences MIDI de Pd, l'entrée MIDI n'est pas reconnue. Est-ce que ce n'est pas possible ?
Je vous remercie de votre réponse.
Dernière modification par Pertuit (2012-09-08 20:41:16)
Hors ligne
Le problème est que les ordis ne prennent pas de liaisons série via USB à un taux de 31250 baud, qui est celui utilisé par le protocole midi. Cependant il me semble qu'il est possible de transformer l'Arduino UNO en périphérique midi via USB, mais ce n'est peut-être pas pris en charge par Firmata. D'où l'intérêt de se passer d'une technologie (ici Firmata) quand on en rencontre les limites ! Perso j'essaye de lâcher petit à petit le style de programmation Arduino pour aller vers quelque chose de plus près du matériel.
Voir ici http://www.semageek.com/utiliser-le-kit … t-entiere/
Hors ligne
L'ennuie c'est que la solution alternative que vous proposez nécessite de solides connaissances en électronique, ce qui n'est pas mon cas. Le Firmata présente, à mes yeux, l'avantage d'être plus simple à mettre en oeuvre...
Hors ligne
Je comprends bien le problème. Je ne connais pas bien firmata, mais il doit être possible de mettre un [send] derrière et de faire une abstraction qui fonctionne comme [ctlin] : elle peut s'appeler [firmata_ctlin], recevoir les données de firmata via un [receive] et prendre en argument de quoi les trier à convenance.
Hors ligne
C'est pas très compliqué d'imaginer un protocole entre ton arduino et l'objet [comport] dans puredata. Il faut passer par des découpage et des étiquettes. Laisse tomber le MIDI, ça n'a pas l'objet d'être dans ce cas et c'est plus compliqué (pour rien).
Par exemple, vu qu'on envoie des byte (256 valeurs de 0 à 255) tu peux décider que les étiquettes si tu as plusieurs variables à transmettre sont de 0 à 127 et que les valeurs sont de 128 à 256 avec un décalage d'origine et un facteur (penser équation linaire en maths). Si tu a besoin d'une résolution supérieure, tu peux aussi décomposer ta valeur en plusieurs paquets de 128 valeurs que tu traites chacune sur l'intervalle de 128 à 256.
Il y a sans doute pas mal d'autres façon de découper et à toi d'imaginer celle qui correspond le mieux. Tu n'est pas obligé de prendre [0,127] et [128,256], ça peut aussi être [0,7] et [8,256]...
Firmata est intéressant notamment pour voir comment est écrit le protocole. Tu peux dans un premier temps utiliser le protocole et incorporer le traitement dans le code modifié de firmata. Moi, j'ai fait ça à mes débuts et un firmata hacké, ça marche très bien.
Bon courage
Hors ligne
citation :
Ce serait plus rapide, non ?
Mmm... je pense que la vitesse de calcul du CPU de ton ordi doit être incomparablement plus élevée que celle de l'Arduino...
Si tu as besoin de parler en MIDI pour piloter un séquenceur traditionnel style Ableton avec des capteurs sensitifs, tu pourras assez facilement interpréter tes valeurs d'entrées pour obtenir en sortie de Pd du MIDI qui corresponde exactement à ce que tu souhaites...
Bon courage...
Dernière modification par Olivier (2012-09-09 14:43:50)
Hors ligne
citation : " je pense que la vitesse de calcul du CPU de ton ordi doit être incomparablement plus élevée que celle de l'Arduino..."
Là, j'avoue que je n'y avais pas pensé... J'imaginais que la programmation de la carte était exécutée beaucoup plus rapidement...
Si ce n'est pas le cas, mon programme standard StandardFirmata et mes patches de traitements conviennent alors beaucoup mieux.
Merci à tous.
Dernière modification par Pertuit (2012-09-09 15:11:45)
Hors ligne
À voir, selon la vitesse de ton lien série et le débit de ton flux de données : j'ai trouvé que filtrer les données en amont sur l'arduino (récupération de valeurs de 48 entrées, moyennage sur plusieurs lectures et envoi de la valeur uniquement lorsqu'elle diffère de la dernière envoyée) était plus reposant pour mon ordi.
Hors ligne
C'est ce qui me semblait "logique"...
Hors ligne
Pages: 1