Go Down

Topic: comment combiner deux sketches en un seul ? (Read 879 times) previous topic - next topic

seb06

Bonjour à tous,

Excusez par avance les éventuelles imprécisions de ma question, mais je suis un vrai noob, un peu perdu par la quantité et la variété des infos que j'ai pu moissonner jusqu'ici. :-[

je souhaiterais combiner deux sketches en un seul. Le premier lit les valeurs d'un capteur LDR, analogique donc. Le second lit les valeurs d'un capteur de température, le DS18B20, numérique celui-ci.

Je dois dire que je suis un peu perdu dans la syntaxe et que je ne sais pas trop par où commencer...

Je suppose qu'il me faut tout d'abord définir les pins sur lesquels sont branchés les capteurs, avant d'inclure les boucles correspondant à chacun des capteurs, puis de déterminer la façon dont les résultats sont exploités (disons via le moniteur série, pour faire simple).

Je crois avoir pigé que la lecture d'un sketch s'opérait sur un mode séquentiel, de haut en bas autrement dit. Mais...

...existe-t-il un ordre préférentiel pour déclarer les "int" ?

...existe-t-il un ordre préférentiel pour déclarer les "loop" ?

...comment faire pour que le moniteur série m'affiche --plus ou moins simultanément ou, plus simplement, l'une à la suite de l'autre-- les valeurs du LDR et du DS18B20 ?

Merci mille fois pour votre aide.

Seb

Jean-François

#1
Mar 11, 2010, 04:00 pm Last Edit: Mar 11, 2010, 04:36 pm by jfs Reason: 1
Dans chacun de tes sketchs tu regarde à n'utiliser qu'une fois la même pin pour les deux sketchs (par exemple la pin 1 sera utilisée dans le premier sketche et pas dans le second).

Ensuite tu fais des copier-coller de chaque parties que tu remets dans un troisième sketch.

-les déclarations des pin et autres qui sont en haut du sketch.
-le setup
-et le contenu de la boucle

Exemple :

sketch 1:
Code: [Select]
int ledPin = 13;                 // led sur digital pin 13


void setup()
{
 pinMode(ledPin, OUTPUT);      // mets la pin digital sur sortie
}

void loop()
{
 digitalWrite(ledPin, HIGH);   // allume la led
 delay(3000);                  // attend 3 secondes
 digitalWrite(ledPin, LOW);    // éteint la led
 delay(500);                  // attend 1/2 secondes
 digitalWrite(ledPin, HIGH);   // allume la led
 delay(200);                  // attend 1/5 secondes
 digitalWrite(ledPin, LOW);    // éteint la led
 delay(1000);                  // attend 1 secondes
 digitalWrite(ledPin, HIGH);   // allume la led
 delay(300);                  // attend 0.3 secondes
 digitalWrite(ledPin, LOW);    // éteint la led
 delay(1000);                  // attend 1 secondes


}


sketch 2 :
Code: [Select]
//int xxPin = xx;                 // pas besoin de pin pour ce truc

void setup() {
 // ouvre le port série à 9600 bps:
 Serial.begin(9600);

void loop()
{
 Serial.println(bip);       // écrit "bip" dans le moniteur série
 delay(3000);                  // attends 3 secondes
 Serial.println(pas bip);    // écrit "pas bip" dans le moniteur série
 delay(500);                  // attends 1/2 secondes
 Serial.println(bip);       // écrit "bip" dans le moniteur série
 delay(200);                  // attends 1/5 secondes
 Serial.println(pas bip);    // écrit "pas bip" dans le moniteur série
 delay(1000);                  // attends 1 secondes
 Serial.println(bip);       // écrit "bip" dans le moniteur série
 delay(300);                  // attends 0.3 secondes
 Serial.println(pas bip);    // écrit "pas bip" dans le moniteur série
 delay(1000);                  // attends 1 secondes


}



sketch 2-3 :
Code: [Select]
//int xxPin = xx;                 // pas besoin de pin pour ce truc on pourrait effacer la ligne

int ledPin = 13;                 // led sur digital pin 13


void setup() {
 // ouvre le port série à 9600 bps:
 Serial.begin(9600);
pinMode(ledPin, OUTPUT);      // mets la pin digital sur sortie

void loop()
{
 Serial.println(bip);       // écrit "bip" dans le moniteur série
 digitalWrite(ledPin, HIGH);   // allume la led
 delay(3000);                  // attends 3 secondes
 Serial.println(pas bip);    // écrit "pas bip" dans le moniteur série
 digitalWrite(ledPin, LOW);    // éteint la led
 delay(500);                  // attends 1/2 secondes
 Serial.println(bip);       // écrit "bip" dans le moniteur série
 digitalWrite(ledPin, HIGH);   // allume la led
 delay(200);                  // attends 1/5 secondes
 Serial.println(pas bip);    // écrit "pas bip" dans le moniteur série
 digitalWrite(ledPin, LOW);    // éteint la led
 delay(1000);                  // attends 1 secondes
 Serial.println(bip);       // écrit "bip" dans le moniteur série
 digitalWrite(ledPin, HIGH);   // allume la led
 delay(300);                  // attends 0.3 secondes
 Serial.println(pas bip);    // écrit "pas bip" dans le moniteur série
 digitalWrite(ledPin, LOW);    // éteint la led
 delay(1000);                  // attends 1 secondes


}
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

seb06

Ahhhh... Merci Jean-François, ça va me permettre d'avancer un peu, en attendant le prochain obstacle, héhé... ;D

Puisque je t'ai sous la main --enfin, façon de parler-- et que tu as l'air de t'y connaître beaucoup mieux que moi, est-il possible à ta connaissance d'envoyer du code ASCII par le port série à deux différents dispositifs --par exemple, un Wave Shield, d'une part, et un contrôleur DMX d'autre part-- de sorte à faire démarrer les deux plus ou moins en même temps (en négligeant les temps de latence, bien sûr) ?

Merci encore de ton aide,

Sébastien

Jean-François

Uhhhhh !!! je ne sais pas ce qu'est un waveshield ni un controleur DMX.  ;D

Mais via les pin digital 0-1 tu peux faire un liaison série par laquelle tu peux envoyer ce que tu veux... enfin presque.
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

seb06

héhé, je m'aperçois que je ne suis pas le seul ignorant dans la salle  8-)

pour ton information, un Wave Shield est un petit dispositif fort ingénieux, produit par Adafruit Industries, qui permet de d'enregistrer sur une carte SD puis de jouer un fichier son au format .wav ou .pcm, en 22KHz mono. C'est super pratique et ça ne coûte qu'une vingtaine de dollars, tu peux le voir ici : http://www.adafruit.com/index.php?main_page=product_info&products_id=94

Quant au contrôleur DMX, il s'agit d'un appareil, principalement utilisé en spectacle, qui envoie des trames au format DMX (wiki est ton ami) en direction d'un rack lumière, soit traditionnel à base de triacs pour des projecteurs de théâtre  classiques, soit du type driver de LED de puissance pour des projecteurs à base de LEDs.

Je t'invite (si personne ne fait ma propre pub, disons que je vais m'en charger  ;D) à faire un tour sur http://www.sceneact.fr/led.html#ledBulle

Merci encore et à bientôt,

Seb

seb06

D'ailleurs, Camarade, pour en revenir à ton précédent message, cela signifie-t-il que tu peux te servir des digital pins 0 et 1 pour dupliquer les ports Tx et Rx (autrement dit, disposer de deux I/O pour envoyer - recevoir des données) ou, au contraire, que l'on fait simplement croire à l'arduino que c'est le cas ?

Seb

Jean-François

#6
Mar 11, 2010, 05:17 pm Last Edit: Mar 11, 2010, 05:20 pm by jfs Reason: 1
Voiiiilà.... je cherchais ce sujet:

communication série entre deux arduino


Intéressant ton lien, je suis moi même dans le monde du spectacle, mais dans le cinéma, je conçois et construis des décors, fabrique de la machinerie et fait des effets spéciaux physiques (pas de post prod  ;D).
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

seb06

Oui, je viens de comprendre ! Décidément, j'aurais dû me prendre un RTFM sur ce coup-là ! J'ai trouvé ça sur le site : "...Digital pins 0 and 1 are the Arduino's hardware serial port. You can use any other pairs of digital pins on the board to create a software serial port with the NewSoftSerial library for additional serial data channels."
Ce qui répond à ma question et, par ailleurs, constitue une excellente nouvelle !!!
Oki, donc, je puis avoir autant de ports de transmission que je veux, dans les limites du nombre de digital pins de l'arduino, bien sur.
Super !

Sinon, ça m'intéresse énormément ce que tu me racontes à propos de ton job : nous sommes en train de réfléchir, mon meilleur pote et moi, à monter une structure qui serait une sorte de boutique des miracles spécialisée dans le monde du spectacle, genre "dis-moi ton problème et je te trouve une solution pratique"...
On est un collectif avec un noyau dur de 5 ou 6 personnes, chacun spécialisé dans un domaine particulier, qui, précisément, trouve des solutions pratiques, genre machinerie au sens large, à des problèmes concrets de scénographie...
Jusqu'alors, on a deux bricoleurs de génie, un acousticien, un scénographe lumière, un machino tout-terrain, et un journalisrte spécialisé dans la recherche d'informations impossibles à trouver --moi, en l'occurrence.
Vu qu'on est dans le théâtre et toi dans le cinéma, on risquerait pas de se marcher sur les pieds... Tu veux pas qu'on cause un peu plus avant ? je te donne mon mail : s.audib@free.fr

à bientôt, j'espère,

Seb

seb06

Allright ! Je viens de consulter le lien vers le thread que tu m'as envoyé (merci, au fait !) et, bien que tout ceci soit un peu ésotérique pour un noob dans mon genre, je commence à appréhender l'affaire un peu mieux...

En fait, je cherche à exploiter cette machine (voir la vidéo ici http://www.sceneact.fr/scenographie.html#haut ) que nous avons inventée voilà 4 ans en mode standalone, autrement dit sans l'ordi qui se trouvait à l'intérieur pour gérer le son et le DMX, en faisant en sorte qu'elle se déclenche automatiquement à l'approche d'un spectateur potentiel. Et l'arduino m'a paru tout à fait approprié pour ce faire.
Le seul problème consiste à synchroniser au plus juste le départ de la musique (via le Wave Shield) et celui de la lumière (via le contrôleur DMX standalone). À vue de nez, ça ne pose pas de problème majeur, dans la mesure où tous les deux sont déclenchables via une commande ASCII envoyée par le port série. Mais j'ai lu à divers endroits qu'il était impossible en certaines circonstances d'inclure un delay dans le sketch, ce qui me contraint à m'assurer que les tops départ partent bien au même moment...
Sinon, et toujours pour faire notre pub  ::), tu as vu notre dernière réalisation sur notre site, "La Bulle" en haute-saône ? On était maîtres d'?uvre sur cette affaire, trois années de boulot acharné, mais ça en valait la peine !

Seb

Go Up