Skip to main content

Finitions et conclusions

La version du code de la GUI a évolué progressivement. In fine, la boucle draw() comprend le raffraichissement des éléments graphiques, et l'analyse des différentes variables qui définissent des conditions mutuellement exclusives afin d'engager des actions par l'envoi de message :

void draw() {
  
  DrawPanelTitle("1 - USB setup", 4,4,632,120);  
// ...
  btn_serial_up.Draw(panelColor);
// ...  
  DrawPanelTitle("2 - Activate", 4,128,140,200);
  btn_serial_Home.Draw(panelColor);
  DisplayXZ(posX, posZ); 
  DisplayEndStop(isUp);
 
  bkm_moving.Set(isMoving);
  bkm_moving.Draw();

  bkm_ready.Set(isReady);
  bkm_ready.Draw();

// ... et enfin :

 if((isAuto) && (isReady)) {
    waitStart = currentTime();
    waitEnd = waitStart + pauseDuration;
    isWaiting = (currentTime() < waitEnd );
    isReady = false;
  } 
  if(isWaiting) {
    isWaiting = (currentTime() < waitEnd );
  } 
  if((isAuto) && (posNum < Xtargets.length) && !isMoving && !isWaiting && !isUp) {
      serial_port.write("IZ\n");
  } 
  if((isAuto) && (posNum < Xtargets.length) && !isMoving && !isWaiting && isUp) {   
    String cmdToSend = "GX " + str(Xtargets[posNum]) + "\n";
 //   println(cmdToSend);
    serial_port.write(cmdToSend);
    posNum++;
  }
}

 

 

Autrement dit, j'ai (encore) écrit une machine à états, sans le dire. Si j'avais été rationnel, j'aurais pu gagner du temps et éviter de tâtonner : que ça serve de leçon ! 😅 (coucou les étudiants d'ingénierie chimique 👋)