Il punto è che ogni volta attende un pelo di più di un secondo (1,04 secondi), probabilmente perché nonostante il rimedio proposto, perde comunque qualche centesimo di troppo in ogni iterazione dei cicli. Prova così:
codice:
CLS
PRINT "Il programma legge la tensione sullo shunt da 250 ohm"
PRINT "L'escurzione di tensione sar… quindi compresa fra 1 e 5v"
INPUT "OGNI QUANTI SECONDI VUOI VENGA FATTO IL CAMPIONAMENTO "; tempo&
OPEN "COM1:9600,N,8,1,rs,cs0,ds0" FOR RANDOM AS #10 ' apro la porta seriale
nomefile$ = "log.txt" 'assegno il nome al file .txt
OPEN nomefile$ FOR APPEND AS #20 'apro il file in scrittura progressiva
'Ottiene la frazione di secondo a cui è iniziato il processo
t! = TIMER
begfrac! = t! - FIX(t!)
DO
'Calcola il momento in cui si passerà alla prossima iterazione
t! = FIX(TIMER) + begfrac! + tempo&
'Correzione necessaria se il programma viene eseguito a cavallo di mezzanotte
IF t! >= 86400! THEN t! = t! - 86400
i$ = INKEY$
IF i$ = CHR$(27) THEN END ' se viene premuto "ESC" termina il programma
CLS
PRINT "CAMPIONAMENTO OGNI ";tempo&; "SECONDI"
PRINT "Sto salvando i dati sul file log.txt"
A$ = "255"
PRINT #10, "**" + CHR$(VAL(A$)) + "#"; 'invio i dati sulla seriale
digital$ = INPUT$(1, #10) 'leggo gli ingressi digitali
ad1$ = INPUT$(1, #10) 'leggo l'ingresso analogico 1
ad2$ = INPUT$(1, #10) 'leggo l'ingresso analogico 2
REM PRINT "Ingressi ="; ASC(digital$) 'mostro il valore
REM PRINT "Convertitore A/D 1 ="; ASC(ad1$) 'mostro il valore
valore = (ASC(ad1$))
REM PRINT "Il valore nella variabile valore Š="; valore
valvolt = valore * 5 / 255
PRINT ""
PRINT "La tensione letta Š di volt: "; valvolt
mA = valvolt / 250 * 1000
PRINT "Pari a "; mA; "mA"
kW = mA * .25 * 400
PRINT "La potenza letta Š di kW: "; kW
REM PRINT "Convertitore A/D 2 ="; ASC(ad2$)
PRINT TIME$
PRINT ""
PRINT "Press ESC to exit..."
PRINT #20, DATE$, TIME$, mA 'scrivo sul file i dati
REM Attende quanto manca perchŠ il ciclo duri esattamente un secondo
DO
LOOP UNTIL TIMER >= t!
LOOP WHILE i$ = ""
CLOSE #10
CLOSE #20
END
Un consiglio: evita di usare numeri fissi come ID di apertura dei file, usa piuttosto FREEFILE per ottenere un ID di file libero prima della OPEN.