Una volta verificato che si riesce a parlare con l'emulatore, bisogna provare a leggere e fare un grafico della funzione d'onda raccolta. Siccome l'oscilloscopio restituisce i dati come interi, per fare un grafico questi devono essere convertiti secondo l'equazione (1). Per fare questa operazione possiamo usare il seguente approccio:
Scrivere il programma in modo che accetti i valori delle scale
dei tempi e delle tensioni da riga di comando. Per fare questo sarà
necessario dichiarare la funzione main nella
sua forma completa:
int main(int argc, char* argv[])
ed a questo punto gli argomenti da riga di comando saranno contenuti
nelle stringhe argv[1] e argv[2],
che possono essere lette tramite sscanf.
Bisognerà poi usare sprintf per inserirlo
nella stringa da inviare alla porta seriale tramite WriteSerial.
Realizzare una macro di ROOT che definisca una funzione
TGraph* LeggiOnda( char* inputfile, char* outputfile)
che legga dal file inputfile le
costanti di conversione, ricostruisca la funzione d'onda, stampi i
punti cosí calcolati nel file outputfile e
ne faccia il grafico.
La parte concettualmente complicata di questo esercizio è il fatto che non è possibile per una funzione restituire un oggetto TGraph, ma può solo restituire un TGraph*. È quindi necessario per la funzione allocare dinamicamente l'oggetto. Questa operazione deve essere fatta utilizzando la sintassi del C++ che è diversa da quella del C: la funzione malloc viene sostituita dall'operatore new e LeggiOnda dovrà quindi contenere i seguenti frammenti di codice:
TGraph* LeggiOnda( char* inputfile, char* outputfile)
{
/* Dichiarazione di un puntatore ad oggetti TGraph */
TGraph* grafico;
/* Allocazione dinamica dell'oggetto TGraph */
grafico = new TGraph;
/* lettura del file di input, inserimento dei punti
nel grafico, scrittura sul file di output */
/* Al termine della macro restituiamo un puntatore all'oggetto
costruito */
return grafico;
}
In teoria il grafico che viene ricostruito dovrebbe essere un'onda sinusoidale.
Provate a far partire l'emulatore del circuito RLC con una frequenza di 10 kHz ed acquisire una funzione d'onda con scala orizzontale 0.1 ms/div. Ottenete davvero un'onda sinusoidale? Se no, perché? Che soluzione possiamo adottare?