meta données pour cette page
  •  

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
projets:comptetemps [14/12/2022 11:14] – [étape 3 : mix] laureprojets:comptetemps [28/01/2023 23:10] (Version actuelle) laure
Ligne 1: Ligne 1:
-=====Compte - Temps Interactif ======+<jumbotron> 
 +===== ⏲️ 🍄 Compte - Temps Interactif ===== 
 +{{tag>arduino processing montage 3Ddesign 3DPrint}} 
 + 
 +<lead>Un dispositif qui mêle affichage écran (Processing) ET bouton physique (Arduino) pour créer un simple compte-temps pour une réalisation chroonométrée. </lead> 
 +On lance l'activité, le compteur démarre pour tous et le premier qui a fini appuie sur le bouton pour arrêter le compteur.  
 + 
 +<label type="default">vide-armoire</label> 
 +<label type="primary">arduino</label> 
 +<label type="primary">processing</label> 
 +<label type="success">en cours</label> 
 +<label type="info">3D</label> 
 +<label type="warning">warning</label> 
 +<label type="danger">danger</label> 
 + 
 +</jumbotron> 
  
-<lead>Un dispositif qui mêle affichage écran (Processing) ET bouton physique (Arduino) pour créer un simple compte-temps pour une réalisation chroonométrée. \\  
-On lance l'activité, le compteur démarre pour tous et le premier qui a fini appuie sur le bouton pour arrêter le compteur. </lead> 
  
  ==== étape 1 : du code simple de chaque côté====   ==== étape 1 : du code simple de chaque côté==== 
Ligne 284: Ligne 298:
 <WRAP half column>   <WRAP half column>  
 <lead>Je mélange les 2 codes processing pour un chrono interactif</lead> <lead>Je mélange les 2 codes processing pour un chrono interactif</lead>
 +  * Ajout d'un compteur millisecondes pour que ça aille plus vite (les heures ne sont plus affichées)  
 +  * Le bouton physique Arduino arrête le chrono à l'écran et affiche un meilleur temps "score" 
 +  * Pour relancer le chrono le MJ utilise sa souris de PC 
 +  * Possibilité de passer en Plein écran plutôt qu'en 800x600px 
 +  * 
 </WRAP> </WRAP>
  
 <WRAP half column> <WRAP half column>
 <accordion> <accordion>
-<panel title="Code Processing Chrono final"> +<panel title="⬇️ Code Processing Chrono final"> 
-<file java>+<file java Compte-Temps2.java> 
 +/* MON PROJET : un compteur de seconde centré dans l'écran 
 + + Piloté par Arduino et un bouton ( stop / start) 
 +  Utiloser millis() pour créer une horloge hors temps officiel, 
 + solution approhée par https://forum.processing.org/one/topic/timer-in-processing.html 
 + */ 
 + 
 +// objet global Chrono, déclaration de classe 
 +StopChronoTimer sc; 
 + 
 +// Communication avec Arduino 
 +import processing.serial.*; 
 +Serial myPort;  // Create object from Serial class 
 + 
 +String dt;    // Data received from the serial port 
 +float valD; 
 +int btnVal = 0; // une valeur pour l'etat du bouton 
 + 
 +int oldBtn = 0; // une valeur pour conserver l'état précédent 
 + 
 +int cptBtn = 1; // une variable pour compter les appuis 
 + 
 +PFont matypo;  // ça c'est parcequ'il aime pas les car du Serial il râle si on précise pas 
 + 
 +void setup() { 
 +  // fullScreen(); 
 +  size(800,600);  
 + 
 +  //  printArray(Serial.list()); // utile pour voir le port qui parle 
 +  String portName = "/dev/ttyACM3";// Changer le nom selon valeur reçue du listing ligne pcdte. 
 +  myPort = new Serial(this, portName, 9600); // valeur cadence en baud comme dans Arduino 
 + 
 +  sc = new StopChronoTimer(); 
 +  sc.start(); 
 +
 + 
 +void draw() { 
 +  while (myPort.available() >0) { 
 + 
 +    dt = myPort.readStringUntil('\n'); 
 +    if (dt !=null) { 
 +      // si on lit qqchose on le trasnforme en int avec ces 2 lignes 
 +      valD = float(dt); 
 +      btnVal = int(valD); 
 +    } 
 +  } 
 +  top(); 
 +
 + 
 +/// FONCTONS 
 + 
 +void top() { // dessine le texte-temps sur l'écran 
 +  background(#fecb00); 
 +  fill(000); 
 +  textSize(208); 
 +  textAlign(CENTER); 
 +  // nf est utile pour transformer des chiffres en string text https://processing.org/reference/nf_.html 
 +  text(nf(sc.minutes(), 2)+":"+nf(sc.secondes(), 2)+":"+nf(sc.millisec(), 2), width/2, height/2); 
 + 
 + 
 +  if (btnVal==0  &&  oldBtn !=0) { // si c relache sur les 2 on ne fait rien mais si ça vient de changer 
 +    /// 
 +  } else if (btnVal ==1 &&  oldBtn !=1) { 
 +    cptBtn = cptBtn + 1; 
 +    oldBtn = 1; 
 +    score(); 
 +  } 
 +
 + 
 +void score() { 
 +  int[] score = new int[3]; 
 +  score[0] = sc.minutes(); 
 +  score[1] = sc.secondes(); 
 +  score[2] = sc.millisec(); 
 + 
 +  fill(#ff2503); 
 +  textSize(24); 
 + 
 +  text("MEILLEUR SCORE "+nf( score[0], 2)+":"+nf( score[1], 2)+":"+nf( score[2], 2), width/4, height/2+100); 
 +  noLoop(); 
 +
 + 
 + 
 +// Pour relancer un compteur j'utilise la souris c OK 
 +// mais il ne faut pas cliquer si le compteur n'est pas déjà arrêté 
 + 
 +void mouseReleased() { 
 + btnVal = 0; 
 +oldBtn = 0; 
 +  sc.start(); 
 +  loop(); 
 +
 + 
 + 
 + 
 +// CLASSES 
 + 
 +class StopChronoTimer { 
 +  int startTime = 0; 
 +  int stopTime = 0; 
 +  boolean running = false; 
 + 
 +  void start() { 
 +    startTime = millis(); 
 +    running = true; 
 +  } 
 + 
 +  void stop() { 
 +    stopTime = millis(); 
 +    running = false; 
 +  } 
 +   
 +  /* int[] score(int s, int m, int h){ 
 +    int s = return secondes();  
 +    int m = return minutes();  
 +    int h = return heures();  
 +  } 
 +  */  
 +   
 +  void fin() { 
 +    stopTime = 0;  
 +    startTime = 0;  
 +    running = false;   
 +  } 
 + 
 +  int gTempsPasse() { 
 +    int tempsP; 
 +    if (running) { 
 +      tempsP = (millis()-startTime); 
 +    } else { 
 +      tempsP =(stopTime - startTime); 
 +    } 
 +    return tempsP; 
 +  } 
 + 
 +int millisec(){ 
 +  return (gTempsPasse()/10 ) %100;  
 +
 + 
 +  int secondes() { 
 +    return (gTempsPasse()/1000) % 60; 
 +  } 
 + 
 +  int minutes() { 
 +    return (gTempsPasse()/(1000*60)) % 60; 
 +  } 
 + 
 +  int heures() { 
 +    return (gTempsPasse()/(1000*60*60)) % 24; 
 +  } 
 +
 + 
 + 
 + 
  
 </file> </file>
  
  
-</panel></accordion>+</panel> 
 +</accordion>
 </WRAP> </WRAP>
 </WRAP> </WRAP>
Ligne 303: Ligne 476:
 <WRAP half column>   <WRAP half column>  
 <lead>Je veux un gros bouton mais je n'ai que des petits caps</lead> <lead>Je veux un gros bouton mais je n'ai que des petits caps</lead>
- 
 Je vais donc prendre les dimensions de l'existant et modéliser un push button qui va bien... Je vais donc prendre les dimensions de l'existant et modéliser un push button qui va bien...
 +{{ :projets:freecad_btnchampi0.png?nolink |}}
 +Bon évidemment le premier essai n'est pas au top mais mon fichier FreeCAD est enregistré avec les modif : 
 +  * élargissement du diamètre accueil bouton ( de 11,2 mesuré mais trop serrant à 11,5 mm)
 +  * diamètre pied champi fixé à 24 mm
 +Il faudra regénérer un mesh si on veut le réimprimer
 </WRAP> </WRAP>
  
 <WRAP half column> <WRAP half column>
- depuis Arduino on envoie un signal... +Mon premier jet est mal adapté, à bricoler pour que le caps bouton rentre dedans.  
 </WRAP> </WRAP>
 </WRAP> </WRAP>
 +
 + ==== étape 5 : montage et miniaturisation === 
 +<WRAP group>
 +<WRAP half column>
 +colonnes
 +</WRAP>
 +
 +<WRAP half column>
 +
 +</WRAP>
 +</WRAP>
 +