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ì:
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.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

Rispondi quotando

