PROBLEMA acquisizione dati da arduino uno a visual basic 6.0

ciao,
sono nuovo e avrei diverse domande sulla comunicazione tra arduino e visual basic 6 via seriale.
l’obbiettivo del mio progetto è quello di rilevare la temperatura ambiente con il sensore lm35 e la luce con una banale fotoresistenza, inviare i valori a un display lcd (questo non è un problema) e infine inserire i dati di temperatura e luce in due textbox diverse su vb6 in modo da creare un elenco di dati da cui estrarre valore massimo medio e minimo sia di luce che temperatura.
vorrei sapere se qualcuno può spiegarmi come far comunicare arduino con vb6, in sostanza come ricevere ed inserire i dati nelle textbox.
in allegato aggiungo la foto del form che vorrei fare in vb6 e il programma che vorrei caricare su arduino
grazie in anticipo

sensore_di_temperatura_e_luce_intelligente.ino (5.66 KB)

SCHEMA A BLOCCHI.JPG

Pedrazz benvenuto. :) Ti invitiamo a presentarti qui: http://forum.arduino.cc/index.php?topic=113640.0 e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0 - qui una serie di schede by xxxPighi per i collegamenti vari: http://forum.arduino.cc/index.php?topic=146152.0 - qui le pinout delle varie schede by xxxPighi: http://forum.arduino.cc/index.php?topic=151646.0 - qui una serie di link utili: http://forum.arduino.cc/index.php?topic=126861.0

Devi comunicare con Arduino attraverso la comunicazione seriale. Da Arduino dovrai spedire i dati usando Serial e da Visual Basic leggerai i dati sempre usando la seriale usando il componente MsComm. Unica cosa. Se sul PC hai l'IDE di Arduino aperto e utilizzi la porta per fare upload, VB trovandola già in uso ti dà errore. Credo che da VB6 devi chiudere almeno il Serial Monitor se vuoi aprire la stessa porta da VB6.

Da Arduino dovrai dire a che velocità usi la seriale Serial.begin(9600); ad esempio, nella setup(). In questo modo usi la seriale che normalmente è il cavo usb. Spedirai i dati usando Serial.print(valore); e i dati saranno spediti in modalità testo, ovvero da VB6 riceverai anche i numeri come testo. 123 sarà spetito il carattere 1, poi 2 e poi 3.

Da VB6 nel controllo MsComm puoi settare i parametri, a video o da codice Esempio da codice con un controllo MsCom di tipo MsComm:

MsCom.CommPort = numeroporta
MsCom.Settings = "9600,N,8,1"

Per leggere usi MyStr = MsCom.Input e MsCom.InBufferCount ti dice se ci sono ancora caratteri da leggere nel buffer di ricezione. Di solito preferisco leggere 1 carattere alla volta e perciò imposto MsCom.InputLen=1

Per scrivere usi MsCom.Output = "ciccio" Per aprire la porta usi MsCom.PortOpen= True Per chiuderla MsCom.PostOpen = False

In VB6 quel controllo può anche lavorare a evento, ovvero in unica sub

Private Sub MsCom_OnComm()
  If MsCom.CommEvent <> comEvReceive Then
    Select Case MsCom.CommEvent
      Case comEventBreak:    Assert "A Break was received."    ' errors
      Case comEventCDTO:     Assert "CD (RLSD) Timeout."
      Case comEventCTSTO:    Assert "CTS Timeout."
      Case comEventDSRTO:    Assert "DSR Timeout."
      Case comEventFrame:    Assert "Framing Error"
      Case comEventOverrun:  Assert "Data Lost."
      Case comEventRxOver:   Assert "Receive buffer overflow."
      Case comEventRxParity: Assert "Parity Error."
      Case comEventTxFull:   Assert "Transmit buffer full."
      Case comEventDCB:      Assert "Unexpected error retrieving DCB]"   ' Events
      Case comEvCD:          Assert "Change in the CD line."
      Case comEvCTS:         Assert "Change in the CTS line."
      Case comEvDSR:         Assert "Change in the DSR line."
      Case comEvRing:        Assert "Change in the Ring Indicator."
      Case comEvSend:        Assert "There are SThreshold number of characters in the transmit buffer."
      Case comEvEOF:         Assert "An EOF charater was found in                ' the input stream"
    End Select
    Exit Sub        // errori perciò esco
  End If
  .. codice lettura
  MyStr = MsCom.Input
End Sub

Ogni volta che VB6 riceve qualcosa in trasmissione scatta questo evento. Ma devi impostare MsCom.Rthreshold = nchar Solo alla ricezione di nchar l’evento scatta.
E devi anche settare MsCom.SThreshold = 0 altrimenti gli eventi scattano anche quando spedisci.
Quel case iniziale io di solito lo uso per sapere quali eventi lo hanno fatto scattare.

E la Assert la uso per sparare i dati ricevuti in un file testo solo se eseguo il programma passandogli /ASSERT:

Sub Assert(p_Msg As String)
  If InStr(Command$(), "/ASSERT") > 0 Then
    Dim l_Path As String
    l_Path = App.Path
    If Right$(l_Path, 1) <> "\" Then l_Path = l_Path & "\"
    Open l_Path & "RS232.txt" For Append As #1
    Print #1, p_Msg
    Close #1
    Debug.Print p_Msg
  End If
End Sub

grazie per le spiegazioni ora proverò e vi farò sapere

ciao a tutti :slight_smile:
ho provato a seguire la vostra guida e sono riuscito a ricevere i dati della temperatura e a inserirli nella text box…
la mia domanda è: come faccio a memorizzare il valore andare a capo e inserire l’altro?
ogni volta che ricevo il dato lo visualizzo per tot secondi e poi viene cancellato e sostituito da quello nuovo ricevuto…
grazie in anticipo

In un textbox non puoi mettere più righe. Usa un controllo ListBox. In VB6 fai qualcosa del tipo

List1.AddItem valore

Qualcosa di simile sarà in VB.Net http://www.html.it/pag/15698/i-controlli-listbox-checkedlistbox-e-combobox/