Не могу прочитать Com порт с QB64
Я использую Arduino в качестве раба, просто чтобы прочитать напряжение батареи. Программа на Arduino - C. Компьютерная программа написана на QB64. Она подключена к USB-порту #3. Программа Slave и QB64 отлично работают для того, чтобы сделать Pin 13 Blink. Но когда я спрашиваю напряжение, все, что я получаю, это 10 пустых мест без данных. Следующий код QB64 - моя попытка чтения. Комментарии показывают некоторые результаты:
CLS
ctr = 1 ' Counts number times you press continue
again:
INPUT "Press any key to continue"; d$ ' Run program to receive voltage
OPEN "Com3:9600,n,8,1,ds0,cs0,rs" FOR RANDOM AS #1
_DELAY .5 ' delay to let com settle
FIELD #1, 35 AS m$
' **** Form Message to send to External Device ****
Command = 2: pin = 4: argument = 0 ' Code to Get analog voltage reading
msg$ = STR$(Command) + "," + STR$(pin) + "," + STR$(argument) + "*"
PRINT "msg$ Sent= "; msg$, CHR$(13) ' Show Message
LSET m$ = msg$
PUT #1, , m$ ' Send message to the external device
_DELAY 1
'***** C code in external device *****
'External device responds to message & prints to Com3 buffer.
' if ( cmd == 2)//getanalog
' {
' int sensorValue = analogRead(pin);//
' delay(10);
' float voltage= sensorValue*(5.0/1023.0);
' Serial.print("Voltage =");
' Serial.print(voltage);
' Serial.print(",");
' Serial.print("*");
' }
CLOSE #1
m$ = "": msg$ = "" ' Wipe out old messages
OPEN "Com3:9600,n,8,1,ds0,cs0,rs" FOR RANDOM AS #1
_DELAY .5 ' Delay to let Com Port settle
FIELD #1, 50 AS m$
t1 = TIMER ' Start time for getdata
getdata:
bytes% = LOC(1) ' Check receive buffer for data
IF bytes% = 0 THEN GOTO getdata 'After thousands of cycles it continues
PRINT "Bytes="; bytes ' Bytes remain at 0
DO UNTIL EOF(1)
GET #1, , m$ ' First GET #1 returns EOF=-1
PRINT "LEN(m$)= "; LEN(m$) ' Length of m$ = 10
IF INSTR(m$, "*") > 0 THEN GOTO duh ' Never finds End of Message (*)
LOOP
IF bytes% = 0 THEN GOTO getdata
t2 = TIMER ' End time, Have data
DeltaT = t2 - t1 ' How long did it take?
GOTO stepover ' If arrived here w/o End of Message signal
duh:
PRINT "DUH instr= "; INSTR(m$, "*") ' Never hits this line
stepover:
tmp$ = "DeltaT= #.### Seconds Until LOC(1) > 0" ' Various times
PRINT USING tmp$; DeltaT
PRINT "m$ Received= "; m$ + "&" ' Prints 10 spaces No Data
PRINT "endofdata= "; endofdata ' endofdata=0, Never got "*"
PRINT "ctr= "; ctr, CHR$(13) ' Show number of times you pressed continue
CLOSE #1
ctr = ctr + 1
GOTO again
Также в комментарии включена ведомая программа, которая пишет в ком-порт. Некоторые строки кода QB64 не нужны, но были включены в качестве попытки отладки