problema comunicazione arduino labview

ciao a tutti...sono nuovo del forum...purtroppo ho un problema con la comunicazione tra arduino e labview (8.5)

ho iniziato da poco facendo progettini semplici ma incontro gia i primi problemi...
visualizzare valore potenziometro collegato su A0 di arduino su labview.
il problema è che ogni50/70 letture la lettura viene errata..non capisco se è un problema di sincronismo o altro..

per ora l'enable terminator è disabilitato.ho fatto varie prove ma il risultato non cambia...
un'altra cosa, inserendo un ciclo while il risultato peggiora, ossia non è sincronizzato per niente e ha una precisione del carattere letto del 50%..

dimentico qualcosa da inserire nel circuito forse?
copio anche il codice di arduino

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

void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue, DEC);
delay(10);
}

dal serial monitor i dati escono correttamente..
grazie in anticipo..

nessuno mi sa dare un consiglio? se bisogna settare la sincronizzazione in un altro modo?

gptxever:
dal serial monitor i dati escono correttamente..

allora, da ciò vuol dire che l'errore è in labview. Sicuro di fare per bene la conversione char->numero? altrimenti il bug è di labview, che non credo sia opensource (ovvero non puoi farci nulla se non segnalare la cosa)

ciao, parti usando gli esempi di labview sulla seriale li trovi inclusi in labview, da quello che vedo nel tuo codice sei alle prime armi e ci sono diversi motivi per cui non funziona adesso il tuo sw.

Ciao

ho gia dato un occhio agli esempi di labview e per utilizzare uno di quelli dovrei apportare delle modifiche e ho preferito diciamo "copiare" un VI già fatto..sono partito da un esempio che non è quello in foto e il problema si presentava lo stesso, ho apportato una miriade di modifiche ma non cambiava nulla...
il codice sorgente su Arduino l'ho preso direttamente dagli esempi...ho aggiunto solo un ritardo tra un ciclo e il prossimo..osservando dal serial monitor non ha nessun bug, anche xke sono 3 righe in croce...
per avere dei chiarimenti se il problema fosse di labview dite che dovrei cambiare forum o c'è lo stesso qulcuno che se ne intende lo stesso?

ma quello nella foto è il "codice" labview? perché la foto è tropo piccola, non la riesco a vedere.
Il codice arduino è ok, infatti il serial è correttto

non ti si ingrandisce se ci clicchi sopra? è un 1600x1200

dopo 3 giorni che ci sto litigando scopro che tirando fuori dal ciclo case l'operatore decimal string to number sembra funzionare...qualcuno mi sa dire xke avrebbe comportato questo problema lasciandolo all'interno del ciclo?

allora il problema è di fondo, tu stai eseguendo il codice labview usando il run continuo (le doppie frecce che si "inseguono") questo vuol dire che TUTTO il codice riesegue ad ogni iterazione quindi init della seriale compreso set dei buffer della seriale ecc... è un miracolo che faccia 50 letture e non si schianti subito.
Devi utilizzare un ciclo while intorno alle chiamate da ripetere la read e il parsing in pratica.

Ciao

ok capito...faccio una prova e se ho dei dubbi chiedo ancora:)...era per questo quindi che su arduino non potevo accettare un ritardo minore di 50ms xke se no si presentava quel problema..grazie intanto :wink:

ho effettuato subito la prova inserendo il ciclo while e non ho risolto, si presenta sempre lo stesso problema:

ho commesso qualche errore?
il ritardo di ogni ciclo su arduino adesso è di 40ms...avrei voluto abbassare di molto il ritardo per avere più segnali da monitorare contemporaneamente ma se non risolvo questo problema non posso andare avanti..

correggo il BD.......il buffer e mask li ho portati fuori dal ciclo while...in entrambi i modi comunque nulla da fare...salta sempre la lettura..

ok, cosa trasmette arduino come termination char? il tuo codice LV è impostato per aspettare \n con timeout di 10 sec, controlla anche questo il sincronismo sta tutto li.

Ciao

arduino per ora non trasmette nulla oltre al numero corrispondente analogico..ho appena iniziato con arduino, prima programmavo solo con pic quindi devo impararmi bene il codice..dici che se affianco un carattere e col property node in labview specifico il carattere trasmesso risolvo?
devo trasmettere per forza una lettera?
e per affiancare il 5° byte al valore del potenziometro letto da analog.read come faccio?perdonami ma sono abituato ad altri codici sorgente...

il codice che uso per ora è questo striminzito:)...
void setup() {
Serial.begin(115200);
}

void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue, DEC);
delay(40);
}

Sembra una spiegazione stupida ma non potrebbe darsi che dipenda dal SO?
Siccome i SO moderni tengono le redini di tutta la baracca alle volte può capitare che un task in background impegni il proc. più del dovuto col risultato che LabView (che non conosco) salta una lettura?
Perché tu, dal grafico, non mi pare abbia una lettura errata ma proprio uno "0". La curva va in fondo.
Poi non so come hai strutturato il codice, se cioè deve comportarsi in quella maniera, però io per "lettura errata" intendo un valore che sta a mezzo, a 2/3 o a 3/4 sotto la media, ma tu hai la fossa delle Marianne

ho pensato anch'io al SO ma mi pare troppo improbabile...cioè sono frequenze troppo basse per impegnare cosi tanto il processore...e col task manager non supera il 10% quindi lo escluderei...il fatto che torna a 0 è un caso..a volte capita che se sto trasmettendo 569 (valore del pot) labview mi legge tipo 70 volte il numero esatto, poi salta il primo decimale e quindi mi legge 69, e altre letture salta 2 decimali leggendo solo 9...la lettura di 0 penso che derivi dal fatto che salta proprio tutti i decimali ma a quel punto dovrebbe darmi errore non visualizzare una cosa che non ha letto!..
questi schemi li ho trovati nel web...ho anche un'altro esempio di VI e codice arduino per accendere 2 led e leggere potenziometro...il potenziometro ha lo stesso problema...anche avendolo trovato cosi dal web possibile che sia o nel VI o nel codice ci siano errori? non penso...

stesso problema lo avevo io.
il programma che legge la seriale probabilmente non è in un thread a parte, e quindi ogni tanto perde una lettura. una soluzione è fare in modo tale che arduino scriva una volta chessò ogni 100 letture. Oppure mettre la parte di lettura in un thread a parte

Prova ad abbassare la velocità di trasmissione. Secondo me 112500 baud sono troppi: se ti salta dei caratteri potrebbe essere la prima indiziata. Metti per test 9600 e poi alza progressivamente. Non vorrei che alcuni caratteri li perdessi per strada proprio per problemi di sincronismo.

ho iniziato con 9600...e avevo gia questo problema..pero poi ho apportato modifiche e ho alzato per vedere se migliorava...

con 9600 baud ho 1 bit ogni 100usec circa...800usec per 1 byte.. 3,2ms per 4 byte (il mio numero)...quindi in teoria se col ciclo while gli davo un ritardo maggiore di 10ms era piu che sufficiente! temevo invece che labview si incartava con questo tempo e ho provato ad alzare per velocizzare...

provo comunque a abbassare un po xke giustamente cm dite voi probabile che salti per velocità elevata...

posso confermare...9600 baud la lettura peggiora molto....

lesto, cosa intendi per un altro thread? intendi mettere in un sub Vi la parte di configurazione buffer e lettura? volevi intendere questo?...xke se no tutti e 3 non potrei metterli in subVI xke solo lettura è all'interno del ciclo while...

eh, cosa intendo per thread... non so (non credo) che labview supporti i thread (va bene anche un processo).