France
Offline
God Member
Karma: 2
Posts: 905
|
 |
« Reply #15 on: December 08, 2012, 12:52:53 pm » |
Bonjour Quel est la différence entre ce code:
et celui ci: On dirait qu'ils n'ont pas le même nombre de lignes, que le second a des lignes en plus.. Repères les lignes 'en plus' et après avoir étudié içi http://arduino.cc/fr/Main/Reference les commandes en question, réfléchis et fais une proposition de réponse. (Quelle est la différence de comportement entre les deux ? Pourquoi ?) Si c'est urgent il faut mettre les bouchées doubles et travailler plus vite pour comprendre ! Quel est l'intérêt d'un projet de TPE 'bourré' de réponses 'copiées-collées' ? C'est la meilleure manière pour attirer l'attention sur les parties décalées du contexte et se faire ensuite 'cuisiner' par le(s) prof(s) là où on est plus que 'léger' !
|
|
|
|
« Last Edit: December 08, 2012, 12:57:59 pm by al1fch »
|
Logged
|
|
|
|
|
France S-O ou exil en IDF
Offline
Edison Member
Karma: 12
Posts: 1053
|
 |
« Reply #16 on: December 08, 2012, 01:00:17 pm » |
Eh bien maintenant c'est clair, comme quoi on ne trompe pas les vieux singes  Je ne vais pas entrer dans le détail de ton code , ce n'est pas trop mon truc, mais je vais te donner quelques conseils généraux. quand tu écris : analogWrite(PIN_VITESSE, mesure_brute); T'es-tu assuré que "mesure_brute" est bien dans le bon format de variable et que sa valeur est compatible avec analogWrite ? Pour faire cela en phase de mise au point il ne faut pas hésiter à faire des sorties dans un terminal (serialBegin(...) , serialWrite(....) ) Et j'approuve totalement ce qu'a écrit Al1fch : contrairement à toi, les prof ont une grande habitude de gérer les TPE. Il leur sera très facile de détecter ce qui est de toi, ou ce que tu as parfaitement assimilé, de ce qui ne l'est pas.
|
|
|
|
« Last Edit: December 08, 2012, 01:07:11 pm by 68tjs »
|
Logged
|
Aides toi et la communauté t'aidera
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #17 on: December 09, 2012, 04:59:24 am » |
Merci, je vais me poser et réfléchir à la question, mai avant, si je veux que mon moteur tourne par exemple pendant une minute, je vais devoir ajouter un variable temps et une fonction, mais quelle fonction je dois utiliser, delay() ou milis()?
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1800
There is an Arduino for that
|
 |
« Reply #18 on: December 09, 2012, 06:58:27 am » |
mais quelle fonction je dois utiliser, delay() ou milis() Si tu te reportes à la doc (liens ci-dessous) http://arduino.cc/en/Reference/Delayhttp://arduino.cc/en/Reference/Millistu vois que delay() est bloquant (il arrête le programme pendant la temporisation) alors que millis() se contente de retourner une information de temps écoulé (sans bloquer le programme) à toi alors la charge de gérer l'échéance de temps. Tout dépend donc de ton besoin. Avec delay() une fois la temporisation lancée le programme ne répond plus à aucune sollicitation. A l'inverse en utilisant millis() tu peux parfaitement continuer à scruter la liaison série ou un bouton pour par exemple interrompre ou modifier la temporisation. Ton besoin n'est pas très clair et ton énoncé au début un peu abscons.Si tu décrivais clairement l'attendu ce serait sans doute plus facile de t'aiguiller vers une solution. Tu noteras que j'ai utilisé "aiguiller vers" et non pas "rédiger". N'attends pas que l'on fasse ton travail. Il faudra mouiller un peu plus la chemise. Tu dis être débutant OK, il y a sur ce forum des "cours" sur le Playgrounds du site mère une quantité astronomiques d'informations en tout genre et si tu cherches un peu sur le net il y en a encore plus et ici on fera notre possible pour t'aider.
|
|
|
|
« Last Edit: December 09, 2012, 07:16:05 am by fdufnews »
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #19 on: December 09, 2012, 09:37:59 am » |
Par exemple, je veux que mon moteur aille a 300t/mins pendant 5 mins, dois-je faire comme ça? const byte PIN_VITESSE = 3; // Broche de contrôle du moteur par PWM
// Fonction d'initialisation hardware void setup() { pinMode(PIN_VITESSE, OUTPUT); // Mise en sortie de la broche connecté au moteur }
// Routine de travail (boucle infini) for(int delay(0);delay(300000);void loop() { analogWrite(PIN_VITESSE, 12); // Génération d'un signal PWM contrôlant la vitesse du moteur }) { }
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1800
There is an Arduino for that
|
 |
« Reply #20 on: December 09, 2012, 09:48:58 am » |
Par exemple, je veux que mon moteur aille a 300t/mins pendant 5 mins, dois-je faire comme ça? Je voudrais pas faire mon désagréable mais dans le post juste au-dessus je t'ai mis un lien vers la référence de la commande delay(). Il y a un exemple commenté qui n'est quand même pas difficile à adapter à ton besoin s'il est aussi basique que ça. Il faudrait peut être lire les exemples et comprendre ce que tu fais. je pense que cela te ferait gagner un temps précieux (et à nous aussi d'ailleurs).
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #21 on: December 09, 2012, 10:03:18 am » |
Ok, donc si je suis l'explemple: const byte PIN_VITESSE = 3; // Broche de contrôle du moteur par PWM
// Fonction d'initialisation hardware void setup() { pinMode(PIN_VITESSE, OUTPUT); // Mise en sortie de la broche connecté au moteur }
analogWrite(PIN_VITESSE, 12); // Génération d'un signal PWM contrôlant la vitesse du moteur a 300t/mins delay(300000); // le moteur reste allumé 5mins analogWrite(PIN_VITESSE, 12); // Génération d'un signal PWM contrôlant la vitesse du moteur a 0t/mins
Et j'ai enlevé la boucle voidloop() pour que le moteur ne recommence pas le cycle: allume 300t/mins pdt 5 mins - arret à l'infini
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #22 on: December 09, 2012, 10:22:02 am » |
Sans void loop() ça n'ira pas.... Il faut absolument que tu commences par les bases 
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #23 on: December 09, 2012, 10:51:32 am » |
Alors je remets void loop(): const byte PIN_VITESSE = 3; // Broche de contrôle du moteur par PWM
// Fonction d'initialisation hardware void setup() { pinMode(PIN_VITESSE, OUTPUT); // Mise en sortie de la broche connecté au moteur } void loop() { analogWrite(PIN_VITESSE, 12); // Génération d'un signal PWM contrôlant la vitesse du moteur a 300t/mins delay(300000); // le moteur reste allumé 5mins analogWrite(PIN_VITESSE, 12); // Génération d'un signal PWM contrôlant la vitesse du moteur a 0t/mins }
Mais si je le laisse, le moteur va faire: Allumer 5 mins a 300t/mins Arret Allumer 5 mins a 300t/mins Arret Allumer 5 mins a 300t/mins Arret ... Non?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #24 on: December 09, 2012, 11:04:24 am » |
Le void loop() est une boucle infinie. A toi de déterminer les conditions pour que ton moteur tourne selon ce que tu veux. Commence par mettre par écrit ce que tu veux, Ex : -moteur tourne à droite pendant 5 minutes -stop pendant 30 secondes -moteur tourne à gauche pendant 2 minutes -pendant que le moteur tourne, faire un café.... (suivant comment tu programmes ton contrôleur peut faire des autres choses...  ) -stop 0,5 secondes -moteur tourne à droite pendant 1 minute -... Ensuite tu simplifies : -D300000 -S30000 -etc Et ensuite tu élabores tes conditions : -si le moteur tourne à droite, il devra tourner dans l'autre sens au démarrage suivant. -si il à fait deux démarrage, il peux démarrer dans un sens ou dans l'autre suivant une autre condition. -si le café n'est pas chaud, il faut remettre la séquence à 0.... etc Ensuite, tu commences à regarder la prog et à comprendre un peu mieux ce que tu fais.... et nous aussi 
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
France S-O ou exil en IDF
Offline
Edison Member
Karma: 12
Posts: 1053
|
 |
« Reply #25 on: December 09, 2012, 11:14:29 am » |
Alors je remets void loop() Tu as l'air de chercher quelque chose qui veuille bien " tomber en marche" en le jouant aux dès. Ce n'est pas comme cela qu'on progresse. Question ultra basique qu'il est essentiel de comprendre : pourquoi il est obligatoire d'avoir une boucle loop() ? Réponse :Un micro exécute les ordres les uns à la suite des autres. Si on ne lui met pas de boucle infinie, arrivé à la dernière instruction il va s'arreter. Seul un "reset" pourra le relancer.Dans un ordinateur c'est exactement pareil sauf que tu ne le vois pas parce que c'est le système d'exploitation qui se charge de la boucle infinie. Le système Arduino met à ta disposition cette boucle infinie sous la forme de la fonction loop(). Un programme arduino doit donc obligatoirement contenir : 1) Au début les déclaration des variables et constantes globales. 2) La fonction setup() qui ne s'exécute qu'une fois et qui sert à configurer ou a pré-positionner des entités comme par exemple les pins. 3) La boucle infinie loop(). C'est dans cette boucle que ton programme s'exécutera.
|
|
|
|
|
Logged
|
Aides toi et la communauté t'aidera
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #26 on: December 09, 2012, 11:17:01 am » |
En fait, je voudrais que mon moteur cc fasse cela:
-moteur tourne dans le sens conventionnel du courant pendant 5 mins a 300t/mins (droite) -moteur se stope définitivement
-D300000 -Sinfini
- Quand le moteur aura tourné à droite pendant 5 mins a 300t/mins il devra se stopper définitivement
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #27 on: December 09, 2012, 11:30:02 am » |
Alors tu utilises un variable booléenne qui est à "0" au départ et qui se mets à "1" dés que tu arrives au premier "stop".
Ensuite, tu mets une condition pour que le moteur ne tourne que lorsque la variable booléenne est à "0"
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 137
|
 |
« Reply #28 on: December 09, 2012, 11:41:37 am » |
const byte PIN_VITESSE = 3; // Broche de contrôle du moteur par PWM
// Fonction d'initialisation hardware void setup() { pinMode(PIN_VITESSE, OUTPUT); // Mise en sortie de la broche connecté au moteur } void loop() { analogWrite(PIN_VITESSE, 12); // Génération d'un signal PWM contrôlant la vitesse du moteur a 300t/mins delay(300000); // le moteur reste allumé 5mins int compteur = 0; while(compteur != 1) { compteur++; } } Comme ça?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #29 on: December 09, 2012, 11:47:17 am » |
Je suis pas certain que ta condition while soit juste... je n'aurais pas mis un système avec un compteur.... quoi que cela puisse être une idée pour une séquence plus longue, mais ta valeur n'est plus booléenne. J'aurais simplement utilisé un if avec un changement de la valeur bool à la fin du if.
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
|