Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Invio dati da PC a Arduino

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] Invio dati da PC a Arduino

Messaggioda Foto Utentewimatech » 6 apr 2023, 14:08

Buongiorno a tutti,
Sto cercando di mettere in moto un proiettore laser, per capirci quelli coi due galvanometri.
La parte PC è pronta in VB.net, carico il DXF trasformo tutti gli archi e i cerchi il polilinee e le metto in sequenza per creare il percorso più breve.
La parte arduino al momento già funziona ma vorrei ottimizzare le velocità e il ciclo.
Al momento da PC spedisco delle stringhe composte in questo modo:
Id;Laser;X;Y
dove:
Id è un intero = progressivo n° comando
Laser è un intero = 1/0 Comando accensione laser
X è un intero = Quota target X
Y è un intero = Quota target Y
Arduino esegue in sequenza una serie di "Serial.parseInt" per ricavare i valori, a questo punto faccio la classica interpolazione XY lineare.
Se mandassi i dati in formato byte evitando di spedire i dati in formato stringa e convertirli sarebbe più veloce? se si mi potete dare una dritta su come fare? io ci ho provato ma non arrivano correttamente ad Arduino.
Avatar utente
Foto Utentewimatech
50 2 7
Frequentatore
Frequentatore
 
Messaggi: 240
Iscritto il: 24 feb 2022, 9:34

0
voti

[2] Re: Invio dati da PC a Arduino

Messaggioda Foto UtenteWALTERmwp » 8 apr 2023, 20:16

Ciao @wimatech,
wimatech ha scritto:(...) Se mandassi i dati in formato byte evitando di spedire i dati in formato stringa e convertirli sarebbe più veloce? se si mi potete dare una dritta su come fare? io ci ho provato ma non arrivano correttamente ad Arduino.
riporta la parte di codice di ricezione su Arduino(che hai scritto e non ti funziona).
Cosa significa che ad Arduino non arrivano correttamente?
Significa che quel che hai spedito da PC non arriva ad Arduino o tu non interpreti correttamente il messaggio che arriva?
Hai fatto una Serial.print() per verificare il contenuto del buffer?

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[3] Re: Invio dati da PC a Arduino

Messaggioda Foto Utentewimatech » 8 apr 2023, 20:53

questo è il codice

Codice: Seleziona tutto
char DataX[4];
char DataY[4];
int i,X,Y;
char movimento;
String messaggio;
unsigned long Tempo;

void setup() {
  Serial.begin(115200);
}

void loop() {
  if(Serial.available() > 0) {
    movimento = Serial.read();
    DataX[0] = Serial.read();
    DataX[1] = Serial.read();
    DataX[2] = Serial.read();
    DataX[3] = Serial.read();
    DataY[0] = Serial.read();
    DataY[1] = Serial.read();
    DataY[2] = Serial.read();
    DataY[3] = Serial.read();
    Reply();
  }

}

void Reply(){
  //messaggio="Movement:";messaggio.concat(movimento);Serial.println(messaggio);
  //messaggio="Asse X:";messaggio.concat(X);Serial.println(messaggio);

  Serial.println(movimento);
  X=atoi(DataX);Serial.println(X);
  Y=atoi(DataY);Serial.println(Y);

}


Col Serial.println mi aspettavo di ricevere in formato stringa il valore convertito dai byte ma arrivano solo caratteri strani tipo / o ?
Avatar utente
Foto Utentewimatech
50 2 7
Frequentatore
Frequentatore
 
Messaggi: 240
Iscritto il: 24 feb 2022, 9:34

0
voti

[4] Re: Invio dati da PC a Arduino

Messaggioda Foto UtenteWALTERmwp » 9 apr 2023, 2:10

Ti ho chiesto l'esito della Serial.println del buffer ma ho visto che l'hai fatta dopo la funzione atoi() che probabilmente non ti ha dato esito(presupponendo la corretta ricezione seriale) mancando il carattere null.

Il codice che hai scritto a me sembra carente di controlli, potresti provare con questo
Codice: Seleziona tutto
    const unsigned int MESSAGEQTY = 9;

    char DataReceive[MESSAGEQTY+1];
    char DataXY[5];
    int i,X,Y;
    char movimento;
    String messaggio;
    unsigned long Tempo;
    int expectedChar;

    void setup()
    {
      Serial.begin(115200);
    }

    void loop()
    {
      expectedChar=0;

      while(Serial.available() > 0)
      {
        DataReceive[expectedChar]=Serial.read();
        expectedChar++;
      }

      if(expectedChar==MESSAGEQTY)
      {
        Reply();
      }
      else
      {
        //error 1
        ErrorRx();
      }
    }

    void Reply()
    {
      //messaggio="Movement:";messaggio.concat(movimento);Serial.println(messaggio);
      //messaggio="Asse X:";messaggio.concat(X);Serial.println(messaggio);

      movimento=DataReceive[0];
      Serial.println(movimento);

      DataXY[0]=DataReceive[1];
      DataXY[1]=DataReceive[2];
      DataXY[2]=DataReceive[3];
      DataXY[3]=DataReceive[4];
      DataXY[4]='\0';
      X=atoi(DataXY);
      Serial.println(X);

      DataXY[0]=DataReceive[5];
      DataXY[1]=DataReceive[6];
      DataXY[2]=DataReceive[7];
      DataXY[3]=DataReceive[8];
      DataXY[4]='\0';
      Y=atoi(DataXY);
      Serial.println(Y);
    }

    void ErrorRx()
    {
      ;
    }

Comunque ti suggerisco di verificarlo con attenzione, potrei aver riportato a mia volta qualche errore.
In ogni caso andrebbe ottimizzato e irrobustito con l'interpretazione dei caratteri ricevuti ed un timeout di ricezione rispetto alla quantità attesa.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[5] Re: Invio dati da PC a Arduino

Messaggioda Foto Utentewimatech » 9 apr 2023, 11:11

Grazie mille Foto UtenteWALTERmwp appena possibile farò un test.
Avatar utente
Foto Utentewimatech
50 2 7
Frequentatore
Frequentatore
 
Messaggi: 240
Iscritto il: 24 feb 2022, 9:34

0
voti

[6] Re: Invio dati da PC a Arduino

Messaggioda Foto UtenteWALTERmwp » 9 apr 2023, 15:09

Prego.
Prova, però verifica la quantità di caratteri(byte) effettivamente inviati da PC, in base al tuo codice parrebbero 9, nell'ordine e nella quantità che si deduce.
Se ad esempio completi l'ìinvio(da PC) coi caratteri CR e LF, allora ne devi considerare due in più e la costante
Codice: Seleziona tutto
const unsigned int MESSAGEQTY = 9;
andrebbe modificata da 9 a 11.
E' un particolare del quale potresti non essertene accorto utilizzando la Serial.parseInt().

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

1
voti

[7] Re: Invio dati da PC a Arduino

Messaggioda Foto Utentestandardoil » 9 apr 2023, 18:54

Sul forum di arduino.cc si trovano più casi simili, a svariati esempi al riguardo
consiglio allo OP di andare a cercare la, il suo problema è di semplice soluzione, e io stesso, quando frequentavo quel forum, ho lasciato esempi ben documentati
Avatar utente
Foto Utentestandardoil
547 2 4
Stabilizzato
Stabilizzato
 
Messaggi: 420
Iscritto il: 15 lug 2022, 19:14


Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti