Acquisire da seriale in Excel (credo che possa essere utile per molte altre persone)

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?

  1. 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;
  2. 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;
  3. 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

Uhmm... Avevo fatto varie ricerche, ma non avevo provato a cercare semplicemente "Arduino Excel"...

Domani lo provo! :slight_smile:

Io ho provato brevemente la libreria di parallax e non mi sembrava male
"PLX-DAQ - Parallax"

Sì, è quella di cui parlano nel sito Elettronica Open Source di cui ho messo il link.
Su un gruppo di strumenti di misura su Facebook, però, una persona mi ha mandato anche un foglio di Excel con una macro. Purtroppo non ancora provato nessuno dei due, perché mi sono dedicato a ritoccare il programma del microcontrollore.

Mah... Non ho concluso nulla... Credo che ci sia anche qualche problema nel framework sul computer, perché quando vado a cliccare sulla tabella delle impostazioni il computer suona per avvisare di qualcosa (che non so...) e non fa nulla. Provando a correggere l'installazione, trova errori nel framework che non riesce a correggere (e questo computer non fa neanche più gli aggiornamenti di Windows proprio per qualche errore che c'è e non sono riuscito mai a correggere. Dovrò fare una reinstallazione in-place di W10.

Per ora vado avanti con l'hardware e lo faccio funzionare localmente; per il resto si vedrà. D'altra parte, lo sto facendo solo per curiosare e imparare!

Prova con questo, a me ha risolto un problema di aggiornamenti bloccati su un PC nuovo.

Ciao, Ale.