Salve, sono sempre io, sempre alle prese con il solito programma. Visto che già mi avete aiutato correggendomi alcuni errori, vorrei ora chiedervi un altro aiuto.
Qui di seguito vi posto la scrittura in QBasic del mio programma:
x% = 15 'Offset grafico per le ascisse
DIM Vmedio(650)
scherm% = 1
car% = 47
CLS : BEEP
LOCATE 1, 10
PRINT "Programma di aquisizione dati tramite porta parallela"
LOCATE 2, 22
PRINT "utilizzante un chip ADC0831"
LOCATE 4, 19
PRINT "by Flavio Falcinelli - Giungo 1997"
LOCATE 12, 3
INPUT "Desidere leggere e visualizzare un file di dati su disco (S=si N=no)"; a$
s% = 0
IF (a$ = "S") OR (a$ = "s") THEN GOSUB 68: s% = 1: GOTO 5
2 CLS : LOCATE 5, 3
data$ = DATE$
LOCATE 6, 3
PRINT "Accertati di aver collegato l'interfaccia ADc."
LOCATE 10, 3
INPUT "Scegli il numero di campioni da mediare (max. 32000): Ncamp = "; N
IF N = 0 THEN Ncamp% = 1
IF N > 32000 THEN Ncamp% = 32000
IF N <= 32000 THEN Ncamp% = N
LOCATE 11, 57: PRINT "Ncamp = "; Ncamp%
Nmedia% = Ncamp%
flag% = 0: LOCATE 13, 3
INPUT "Vuoi salvare su un file i dati del valore medio (S=si N=no)"; c$
IF (c$ = "S") OR (c$ = "s") THEN
flag% = 1: LOCATE 15, 25: INPUT "Nome del file di dati: "; nome$
tempoin$ = TIME$
tempofin$ = TIME$
5 CLS : SCREEN 9
COLOR 14, 11
LOCATE 25, 1: PRINT "0"
LOCATE 22, 1: PRINT "1"
LOCATE 19, 1: PRINT "2"
LOCATE 17, 1: PRINT "3"
LOCATE 14, 1: PRINT "4"
LOCATE 11, 1: PRINT "5"
LOCATE 10, 74: PRINT "tempo"
LOCATE 1, 15: PRINT "CONVERTITORE ANALOGICO-DIGITALE controllato da PC"
IF s% = 0 THEN LOCATE 6, 20: PRINT "Valore della tensione letta ="
LOCATE 10, 4: PRINT "<Esc> per uscire"
LOCATE 9, 4: PRINT "schermata n."; scherm%
LOCATE 10, 36: PRINT "Ncamp ="; Ncamp%
LOCATE 2, 20: PRINT "Ora locale inizio osservazione: "; tempoin$
LOCATE 3, 20: PRINT "Ora locale fine osservazione: "; tempofin$
LOCATE 9, 69: PRINT data$
LINE (16, 144)-(630, 344), 15, BF
LINE (15, 143)-(631, 345), 8, B
FOR i% = 144 TO 344 STEP 20
LINE (16, i%)-(630, i%), 12, , &H1111
NEXT i%
FOR j% = 16 TO 616 STEP 20
LINE (j%, 144)-(j%, 344), 12, , &H1111
NEXT j%
IF s% = 1 THEN GOTO 70
addout% = &H3BC 'indirizzo della porta parallela LPT1
addin% = addout% + 1
DO
somma& = 0
FOR j% = 1 TO Nmedia%
IF INKEY$ = CHR$(27) THEN OUT addout%, 0: END
REDIM bitin%(8)
word% = 0
OUT addout%, 5 'indirizza l'ACD0831
OUT addout%, 7 'inizia la conversione A/D
OUT addout%, 5
FOR a% = 7 TO 0 STEP -1 'acquisisce una parola ad 8 bit
OUT addout%, 7
OUT addout%, 5
bitin%(a%) = INP(addin%)
NEXT a%
OUT addout%, 13 'deseleziona l'ADC0831
FOR r% = 7 TO 0 STEP -1
IF bitin%(r%) < 128 THEN word% = word% + (2 ^ r%)
NEXT r%
somma& = word% + somma&
NEXT j%
media = somma& / Nmedia%
volt = 5 * media / 255 'calcola la tensione letta
Vmedio(x%) = volt
V2% = 344 - 40 * volt
IF x% = 15 THEN V1% = V2%
x% = x% + 1
LINE (x% - 1, V1%)-(x%, V2%), 1
V1% = V2%
LOCATE 6, 50: PRINT USING "##.##"; volt; : PRINT " V";
LOOP WHILE x% < 631
x% = 15
scherm% = scherm% + 1
data$ = DATE$
tempoin$ = tempofin$
tempofin$ = TIME$
IF flag% = 1 THEN car% = car% + 1: GOSUB 65
GOTO 5
65 IF car% > 57 THEN RETURN
OPEN nome$ + CHR$(car%) FOR OUTPUT AS #2
PRINT #2, nome$ + CHR$(car%)
PRINT #2, data$
PRINT #2, Ncamp%
PRINT #2, tempoin$
PRINT #2, tempofin$
FOR i% = 16 TO 630: PRINT #2, Vmedio(i%): NEXT i%
CLOSE #2: RETURN
68 LOCATE 15, 25: INPUT "Nome del file di dati: "; nomefile$
ON ERROR GOTO 200
OPEN nomefile$ FOR INPUT AS #1
INPUT #1, nomefile$
INPUT #1, data$
INPUT #1, Ncamp%
INPUT #1, tempoin$
INPUT #1, tempofin$
FOR i% = 16 TO 630: INPUT #1, Vmedio(i%): NEXT i%
CLOSE #1: RETURN
70 LOCATE 8, 73: PRINT nomefile$
FOR x% = 16 TO 630
LINE (x% - 1, 344 - 40 * Vmedio(x% - 1))-(x%, 344 - 40 * Vmedio(x%)), 1
NEXT x%
GOTO 80
BEEP: CLS : LOCATE 5, 30: PRINT "File non trovato!":
SLEEP 2: RESUME 80
80 LOCATE 5, 2: PRINT "Scegli le seguenti opzioni:"
LOCATE 5, 30: PRINT " 1) lettura e visualizzazione di altri dati"
LOCATE 6, 30: PRINT " 2) acquisizione dati da interfaccia"
LOCATE 7, 30: PRINT " 3) FINE LAVORO"
85 LOCATE 7, 50: INPUT B$
IF B$ = "1" THEN s% = 1: CLS : GOSUB 68: GOTO 5
IF B$ = "2" THEN s% = 0: scherm% = 1: x% = 15: GOTO 2
IF B$ = "3" THEN END
GOTO 85
Si tratta di un programma che acquisisce attraverso una porta parallela, una tensione variabile di cui deve fare il grafico.
Vorrei che qualcuno di voi mi potesse dire COSA (la stringa) e DOVE inserire un comando che dica di arrestare il grafico ogni volta che la tensioni diventi zero e che lo riavvii appena la tensione assume valori positivi diversi da zero.
Grazie.