Vai al contenuto
PLC Forum


Domanda Su Arduino E Visual Basic-riunita con altra discussione


SabinoDelia

Messaggi consigliati


  • Risposte 78
  • Created
  • Ultima risposta

Top Posters In This Topic

  • SabinoDelia

    33

  • simuffa

    22

  • walterword

    11

  • Livio Orsini

    9

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        min=1000
        max=-1000
        SerialPort1.Close()
        SerialPort1.PortName = "COM3"
        SerialPort1.Open()
End Sub

se fai così lo zero non deve comparire

Link al commento
Condividi su altri siti

forse non mi sono spiegato molto bene Io devo trovare il valore massimo e minimo registrato nella variabile numerica temp e trascriverlo in label

Public Class Form1
    Dim an0, an1, an2 As String
    Dim temp As Integer
Link al commento
Condividi su altri siti

come li scrivi i valori sulla seriale?

Fai un pacchetto unico o nei fai due ?

Magari se ne fai due velocemente ultimo lo perdi oppure non lo ricevi come si dovrebbe

Se lato VB fai questo

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        SerialPort1.Close()
        SerialPort1.PortName = "COM3"
        SerialPort1.Open()
        
    End Sub

Intanto per incominciare vedo nel tuo codice l'oggetto SerialPort1 ma non e' stato dichiarato da nessuna parte

Per cui nel form_load metti la dichiarazione Private SerialPort1 As System.IO.Ports.SerialPort

Seconda cosa non vedo l'abilitazione al delegato dell'evento datareceived , magari e' gia inclus anella dichiarazione (non conosco il vb)

Dopodiche non vedo i settaggi della porta intesi come baud , parita ect

Sembra che state facendo un po le cose a casaccio , quando sul web basta digitare seriale con VB che ti danno tutto il codice per usare la seriale

BOOOO


ultima cosa , prima di fare il figo con VB , apri il terminale di arduino e vedi cosa ti visualizza , perche di solito nelle fasi di sviluppo del codice si fanno dei test preliminari e si procede per passi e complessità.Se ti funziona il terminale di arduino allora significa che il problemi sono relativi ai settaggi della seriale che usi con vb altrimenti significa che lato arduino commetti degli errori

La usb collegata ad arduino ce l'hai , apri il terminale dell'ide e vedi cosa ti arriva

Modificato: da walterword
Link al commento
Condividi su altri siti

se lato arduino fai due scritture sulla seriale vorra dire che i due dati li riceverai in due momenti diversi oer cui avrai DUE eventi comm di ricezione

Il secondo read all'interno della ricezione non ti legge nulla .Per cui devi usare una variabile che tiene conto dello stato di lettura

PArte da zero e al primo evento leggi sulla seriale e formatti il risultato nella prima variabile e la incrementi a 1

Quando ricevi il prox evento comm se la variabile e' ==1 allora formatti il dato ricevuto nella seconda variabile e metti la variabile stato =0 , altrimenti formatti nella prima variabile e lo metti =1 .

Se fai due chimate a read della seriale nel evento comm leggi una volta buono e l'altra a vuoto .Poi imposta il buffer di ricezione sul numero di caratteri giusti per avere l'evento quando e' raggiunta la soglia di caratteri ricevuti voluta


se vuoi fare un lavoro pulito e professionale devi fare cosi :

Stabilisci un protocollo di 5 caratteri

Il primo e' l'inizio che controllerai in Vb , per esempio il carattere '@'

Poi nei 4 bytes successivi ci vai a mettere i tuoi dati con lo shift e con le maschere AND , che in vb non so come si facciano

Poi lato VB quando ricevi i dati fai una lettura sola e leggi tutto il pacchetto , verifichi ch eil primo carattere sia '@' altrimenti scarti tutto

Se il primo e' giusto allora tiri fuori i due dati dai 4 caratteri a seguire nel buffer .In questo caso io ho predisposto 2 carateri per ogni dato intesi come bytes non come cifre del dato per cui sono due dati da short int cioe intero da 2 bytes

Link al commento
Condividi su altri siti

forse non mi sono spiegato molto bene Io devo trovare il valore massimo e minimo registrato nella variabile numerica temp e trascriverlo in label

devi deciderti.. si parte con un programma che trasmette in seriale poi cambi tutto il codice con temperature e allerte (nella quale c'è un 300 che non capisco da dove arrivi)

poi si passa al massimo e minimo di un analogico e adesso di un temp.

Sembra che state facendo un po le cose a casaccio , quando sul web basta digitare seriale con VB che ti danno tutto il codice per usare la seriale

certo Walterword con tante cose non sono d'accordo.. come per esempio una readline su seriale dentro un intero :wacko: oppure un'ipotetica porta seriale che si chiude prima di essere aperta, senza parametri tra l'altro.

dopodiché non capisco dove si vuole arrivare, sono d'accordo con te su quello che dici, ma pare che a SabinoDelia piaccia di più la programmazione affidabile come una trasmissione di rete "best effort" :superlol:

Modificato: da simuffa
Link al commento
Condividi su altri siti

Il secondo read all'interno della ricezione non ti legge nulla

certo, non capisco nemmeno perché il programma che aveva fatto prima l'ha cambiato così in modo da non farlo funzionare... misteri :P

Link al commento
Condividi su altri siti

devi fare delle prove sulla seriale , usando hyperterminal oppure il terminale di arduino , io uso sempre la seconda chance .

Se i due valori vengono stampati correttamente allora concentrati su VB .

Per cui in VB crei la seriale come oggetto , poi setti tutti i parametri , il baudrate , la parità , la soglia di ricezione del buffer ect....

Poi fai una prova in arduino , cioe spedisci la prima stringa e poi fai un delay di 5 secondi e stampi la seconda , anche se il bloccante e' una schifezza ti permette di avere due eventi onrecevided data in vb .A quesot punto fai il read ma una volta sola e vedi cosa stampa

Fai la prova con due stringhe secche di caratteri , una "ciao " e l'altra "pasticcione "

Se nel terminale di arduino le vedi arrivare entrambe allora farai in modo di vederle anche in vb e poi man mano cerchi di professionalizzare la cosa .....io sto scrivendo un protocollo da arduino a android via blutooth e lato arduino i dati bluetooth vengono speidti e ricevuti in seriale e la cosa la sto facendo come ti dicevo sopra , cioe in un pacchetto di bytes inserisco tutti i dati con opportuni shift e maschere and e poi dall'altra parte processo il buffer ed eseguo le routine o le azioni che devo eseguire e funziona , lo sto facendo in java e funziona lo stesso , e in visual studio con c# idem

VB non l'ho mai usato e non mi metto di sicuro ora ad usarlo per farti il programmino :)

Si tratta di capire cosa fare e studiare 4 cose sulla seriale e soprattutto leggere bene quello che ti consigliano gli altri :)

Link al commento
Condividi su altri siti

Per cui in VB crei la seriale come oggetto , poi setti tutti i parametri , il baudrate , la parità , la soglia di ricezione del buffer ect.

queste probabilmente le avrà già settate nelle proprietà del componente "serial port" spero :smile: (non capisco perché non ha settato anche la COM3..)

walterword condivido tutto ciò che hai detto

Link al commento
Condividi su altri siti

lui usa un close all'inizio per chiudere la porta se eventualmente fosse gia aperta , non ha capito che col new o creando una porta nuova e' chiusa per default , forse itnendeva fare un flush o un read per pulire il buffer da eventuali sporcacciate anche se impossibile che ci siano in quel momento .Deve provare con due stringhe pure , senza dati e testare l'hardware e la gestione software , poi quando tutto fila liscio si specializza la cosa , partire subito in 4° senza nozioni e senza capacità si fano solo dei disastri , questo lo dico perche tanti anni fa commettevo gli stessi errori .Se poi quello che dico e' da " Walterword ti incazzi sempre e sei sempre nervoso " ...allora non saprei proprio come dirlo

Link al commento
Condividi su altri siti

In pratica su questa variabile mi viene registrata una temperatura in continuo cambiamento e vorrei mostrare in label il valore massimo e in un altro label il valore minimo assunto dalla variabile.

Link al commento
Condividi su altri siti

si infatti , tempo sprecato....vedo che non ha minimamente letto quello che abbiamo scritto sopra , persiste nel suo discorso , come se parlasse da solo ....mi dedico al geniale Fourier che e' meglio va...

Link al commento
Condividi su altri siti

si infatti , tempo sprecato....vedo che non ha minimamente letto quello che abbiamo scritto sopra , persiste nel suo discorso , come se parlasse da solo ....mi dedico al geniale Fourier che e' meglio va...

:roflmao: non è la prima volta

Link al commento
Condividi su altri siti

:D , magari non ha niente da fare e lo fa apposta .... per me la cosa si chiude qua non ho certo tempo di stare qua tutto il giorno a farmi prendere per il kulo ;)

Modificato: da walterword
Link al commento
Condividi su altri siti

In pratica su questa variabile mi viene registrata una temperatura in continuo cambiamento e vorrei mostrare in label il valore massimo e in un altro label il valore minimo assunto dalla variabile

Ti crei 2 variabili tmax e tmin; al primo ciclo copi la variabile lette nelle altre 2. Ad ogni ciclo fai il confronto tra la lettura ed i 2 valori, se la variabile attuale è maggiore di tmax vai a sostituirne il valore, medesimo discorso per tmin. Poi sulle 2 etichette deddicate copi i valori delle due variabili.

Elementare Watson, elementare. ;)

E ora non chiedere come si fa il confronto. :lol:

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Ok grazie. ho fatto in questo modo ma mi funziona soltanto la max:

Dim temp As Integer
    Dim tempmax As Integer = -100
    Dim tempmin As Integer = 100
If temp >= tempmax Then
            tempmax = temp

        End If
        If temp <= tempmin Then
            tempmin = temp

        End If

poi ho fatto così e i due valori sia max che min sono uguali a quello attuale:

tempmax = temp
        tempmin = temp
        If temp >= tempmax Then
            tempmax = temp
        End If
        If temp <= tempmin Then
            tempmin = temp
        End If
        Label6.Text = tempmax
        Label8.Text = tempmin
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

×
×
  • Crea nuovo/a...