Problema lcd 16x2 IC2 con python

Per gli stepper (immagino 2, X,Y) penso sia meglio il gcode.
Non escludo che si possa fare ma c'è da vedere se poi il comportamento è quello desiderato. Ad esempio durante il periodo di tempo in cui i motori eseguono il cerchio arduino deve fare altri compiti?

Ipotizzo che il comando sia circle abbreviato cir,(r),(s)

  • (r) è il raggio
  • (s) è la velocità di esecuzione.
mySerCmd.addCmd( F("cir"), SERIALCMD_FROMALL, sh_circle );

La funzione utente è sh_circle e allora:

void sh_circle() {
    char *sParam = nullptr;
    sParam = mySerCmd.readNext();
    if (sParam) {
         // qui devi convertire sParam in un intero o float
        // e questo sarebbe il raggio <r>
    }
    
}

a seguire sempre nella stessa funzione devi ricavare (s) la velocità di esecuzione. Fare un controllo per verificare la correttezza di (r) e di (s).

L'esecuzione del comando però credo che si debba fare nel loop. Per adesso ti consiglio di sperimentare con la SerialCmd così da prendere confidenza.

La setCursor io la ho implementata così:

void sh_setCursor() {
   char *sParam = nullptr;
   uint8_t error = 0;
   uint8_t localRow = 0;
   uint8_t localCol = 0;

   // parse row
   sParam = mySerCmd.readNext();
   if (sParam) { // sParam non è nullptr
      if (isNumber(sParam)) { // isNumber è la mia funzione che restituisce true se sParam è un numero
         int val = atoi(sParam); // converto sParam in val
         if ( (val < 0) && (val > 3) ) { // verifico il range
            error = 1;
         } else {
            localRow = val;  // range ok
         }
      }
   }
   // parse col
   sParam = mySerCmd.readNext();
   if (sParam) {
      if (isNumber(sParam)) {
         int val = atoi(sParam);
         if ( (val < 0) && (val > 19) ) {
            error = 1;
         } else {
            localCol = val;
         }
      }
   }

   if (error) {
      Serial.println("Argomenti fuori range: row(0÷3) col (0÷19)");
      return; // se errore stampa e ritorna
   }
   // diversamente se no error assegna.
   gRow = localRow; 
   gCol = localCol;
}

Spero ti possa tornare utile.

Ciao.