Comm32 Logo
Home Button  Buy Button 

Topic:   Ошибочно принимаются байты из Arduino DUE

By: GuestPosted on: Sep 6 2019 at 05:49:09 AM
Я передаю в Scomm около 80 кбайт двоичной упакованной информации блоками по 4 байта, прием в Excel VBA по Вашей рекомендации выглядит так (после открытия порта в режиме inputMode = 1- Binary, InputLen=2 настройки выполнены в свойствах Значка Scomm на форме).
Private Sub ArduinoDue_OnComm()
Dim BBB() As Byte
Dim i As Long
Select Case ArduinoDue.CommEvent
Case comEvReceive
Do While ArduinoDue.InBufferCount > 0
BBB = ArduinoDue.Input
BI = UBound(BBB) 'Len(ArduinoDue.Input) ' Read)
' If (BI >= 0) Then
If (BI > 0) Then
For i = 0 To BI
If First Then
Sb(0) = BBB(i) 'ArduinoDue.Input 'Read '
Sbb(USbb) = Sb(0)
Else
Sb(1) = BBB(i) 'ArduinoDue.Input 'Read '
Sbb(USbb) = Sb(1)
If ((Sb(0) = 255) And (Sb(1) = 255)) Then
KB = 0
BI = ArduinoDue.InBufferCount
ArduinoDue.InBufferCount = 0
ArduinoDue.Break = False
UserForm1.CommandButton1.Enabled = False
Exit Do
End If
End If
First = Not First
USbb = USbb + 1
Next i
End If ' If (BI > 0) Then
Loop ' Do While ArduinoDue.InBufferCount > 0
Case Is > 1000
UserForm1.TextBox1.Value = "ComPort Error occurred."
Case Else
Debug.Print "er?"
End Select
End Sub

Dim Sb(0 To 1) As Byte
Dim Sbb(0 To 180000) As Variant 'Byte' Arduino 30000 * 4 = 120 000
Dim USbb As Long

Dim BI As Long 'Integer ' Len
я хочу остановить прием после появления в потоке двух байт FF
в результате в буфере Sbb оказываются (после разбора) такие, преобразованные
в 16-ричные четверки байт, иногда "дополненные" огромным количеством 0!
Примерно 200 из 20000 четверок
1,84016E+11
18451600000
1849160000
1,87116E+12
18711600000
1,89216E+12
1,89616E+12
1,92915E+14
1,92915E+11
1,93015E+13
19301500000
193015000
1,93415E+13
1,94314E+14
1,94414E+11
9,481E+11
9,471E+12
9,481E+11
94910000000
8,33E+102
8,22E+101
8,17E+102
8,02E+101
8,01E+100
7,98E+102
7,93E+101
7,91E+101
7,83E+102
7,84E+100
7,21E+100
7,21E+100

Разбор, выдающий такие "восьмерки" шестнадцатеричных выглядит так:
K = 1
Prot4(0) = 0: Prot4(1) = 0: Prot4(2) = 0: Prot4(3) = 0
Co = 0
B = USbb
For j = 0 To B '
Prot1 = Sbb(j)
''''''''''''''''''''' сборка по 4 байта
Co = Co Mod 4
If (Co = 0) And (j > 2) Then
S2 = ""
For i = 0 To 3 ' переставили в Arduino!!!
S1 = Hex(Prot4(i))
If Len(S1) < 2 Then S1 = "0" & S1
S2 = S2 & S1 '
Next i
Print #1, , S2
'Worksheets("ID").Cells(K, nr) = S2 '
Co = 0
If (S2 = "FFFF") Then '&H
KB = 1
Exit For
Else
K = K + 1
End If
End If
Prot4(Co) = Prot1 'AscB(MidB(Sbb, j, 1))
Co = Co + 1
'''''''''''''''''''''
Next j

Подскажите, пожалуйста, что я делаю не так.
ИЛИ ЭТО С ПОРТОМ ЧТО-ТО НЕ ТАК.
Скорость 115200,N,8,1

Буду очень благодарен. Передача по байтам экономит время опыта,
в TextMode все работает (с перенастройкой) но 11 байт вместо 4!


By: GuestPosted on: Sep 6 2019 at 05:56:00 AM
I transfer about 80 kilobytes of binary packed information to Scomm in blocks of 4 bytes, the reception in Excel VBA according to your recommendation looks like this (after opening the port in inputMode = 1- Binary, InputLen = 2 mode, the settings are made in the Scomm Icon properties on the form).
Private Sub ArduinoDue_OnComm ()
Dim BBB () As Byte
Dim i as long
Select Case ArduinoDue.CommEvent
Case comEvReceive
Do While ArduinoDue.InBufferCount> 0
BBB = ArduinoDue.Input
BI = UBound (BBB) ​​'Len (ArduinoDue.Input)' Read)
'If (BI> = 0) Then
If (BI> 0) Then
For i = 0 To BI
If first then
Sb (0) = BBB (i) 'ArduinoDue.Input' Read '
Sbb (USbb) = Sb (0)
Else
Sb (1) = BBB (i) 'ArduinoDue.Input' Read '
Sbb (USbb) = Sb (1)
If ((Sb (0) = 255) And (Sb (1) = 255)) Then
KB = 0
BI = ArduinoDue.InBufferCount
ArduinoDue.InBufferCount = 0
ArduinoDue.Break = False
UserForm1.CommandButton1.Enabled = False
Exit do
End if
End if
First = Not First
USbb = USbb + 1
Next i
End If 'If (BI> 0) Then
Loop 'Do While ArduinoDue.InBufferCount> 0
Case Is> 1000
UserForm1.TextBox1.Value = "ComPort Error occurred."
Case else
Debug.Print "er?"
End select
End sub

Dim Sb (0 To 1) As Byte
Dim Sbb (0 To 180,000) As Variant 'Byte' Arduino 30,000 * 4 = 120,000
Dim USbb As Long

Dim BI As Long
I want to stop reception after two bytes of FF appear in the stream
as a result, in the Sbb buffer there are (after parsing) such transformed
in hexadecimal four bytes, sometimes "supplemented" by a huge amount of 0!
About 200 out of 20,000 fours
1.84016E + 11
18451600000
19301500000
94910000000
8.33E + 102
8.22E + 101

A parsing that produces such “eight” hexadecimal looks like this:
K = 1
Prot4 (0) = 0: Prot4 (1) = 0: Prot4 (2) = 0: Prot4 (3) = 0
Co = 0
B = usbb
For j = 0 To B '
Prot1 = Sbb (j)
' assembly of 4 bytes
Co = Co Mod 4
If (Co = 0) And (j> 2) Then
S2 = ""
For i = 0 To 3 'rearranged in Arduino !!!
S1 = Hex (Prot4 (i))
If Len (S1)

Reply - add a comment to this topic.

You may enter letters, numbers and standard punctuation only. HTML and other scripts/tags will be rejected.

Topic:- Ошибочно принимаются байты из Arduino DUE


Enter the numbers.

Your name here is optional