Ciao a tutti
Per acquisire in Excel i dati generati da Arduino (frequenza di rete, tra 47,500 e 51,000Hz) ho trovato una macro che ho aggiustato un po', anche aggiungendo l'orario nella prima colonna, ed è venuta così:
Public Sub Receive_COM5_and_Save()
Dim timeout As Date
Dim byte1 As Byte, chars As String
Dim COMport As Integer
Dim destCell As Range, rowOffset As Long
'Set starting cell where received data will be saved
With ThisWorkbook.ActiveSheet
Set destCell = .Range("A1")
rowOffset = 0
End With
'Monitor COM port for 30 seconds
'timeout = Now + TimeValue("00:00:30")
COMport = FreeFile
Close COMport
'Open COM5 port with baud rate 2400, No parity, 8 data bits, and 1 stop bit. These are the default port settings
'in HyperTerminal. In HyperTerminal, use Flow control = None.
Open "COM6:38400,N,8,1" For Random As #COMport Len = 1
Debug.Print Now; "Started"
chars = ""
While (1)
'Get 1 byte
Get #COMport, , byte1
If byte1 = Asc(vbCr) Then
'CR byte received, so write chars string to sheet cell
destCell.Offset(rowOffset, 0).Value = Now
destCell.Offset(rowOffset, 1).Value = chars
rowOffset = rowOffset + 1
chars = ""
Else
'Append byte as an ASCII character to chars string
chars = chars & Chr(byte1)
End If
DoEvents
Wend
Close #COMport
Debug.Print Now; "Finished"
'Save sheet as an .xlsx file
destCell.Parent.Copy
ActiveWorkbook.SaveCopyAs ThisWorkbook.Path & "\COM_Port_Data.xlsx"
ActiveWorkbook.Close savechanges:=False
End Sub
Nella prima colonna mette data e ora e nella seconda mette la frequenza, prodotta da un
Serial.println(f/1000.0, 3);
a 38,4kbps.
Qualcuno ha già fatto qualcosa del genere e mi sa aiutare su questi tre punti?
- Far avanzare il foglio ogni volta che arriva un dato, per avere sempre visibili gli ultimi e far uscire dal quadro i più vecchi; inoltre Excel reagisce al mouse solo per un attimo quando arrivano i dati;
- Mettere nel while (1) (che ho messo io, perché in origine era scritto per funzionare per 6 secondi) il rilevamento della pressione di un tasto per non dover premere continuamente CTRL+Break per uscire; vorrei anche fare in modo, come detto, che per tutto il tempo in cui non arrivano i dati Excel rispondesse al mouse e altro;
- Fare un grafico dinamico (non ci sono riuscito, ma almeno ho scoperto che si chiama così...) con il tempo sulle ascisse e la frequenza sulle ordinate.
Capisco che è un po' OT, ma credo che sia molto interessante come applicazione di Arduino per monitorare costantemente dei valori che arrivano dalla seriale e può essere utile per molte altre persone.
Grazie
Gianluca