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.
Invio dati da PC a Arduino
7 messaggi
• Pagina 1 di 1
0
voti
Ciao @wimatech,
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
riporta la parte di codice di ricezione su Arduino(che hai scritto e non ti funziona).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.
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.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8982
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
questo è il codice
Col Serial.println mi aspettavo di ricevere in formato stringa il valore convertito dai byte ma arrivano solo caratteri strani tipo / o ?
- 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 ?
0
voti
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
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
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.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8982
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
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
E' un particolare del quale potresti non essertene accorto utilizzando la Serial.parseInt().
Saluti
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;
E' un particolare del quale potresti non essertene accorto utilizzando la Serial.parseInt().
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8982
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
1
voti
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
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
-

standardoil
547 2 4 - Stabilizzato

- Messaggi: 420
- Iscritto il: 15 lug 2022, 19:14
7 messaggi
• Pagina 1 di 1
Chi c’è in linea
Visitano il forum: Nessuno e 4 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)
