Sériová linka - příjem dat BASCOM
Moderátor: Moderátoři
Přijímat pak můžeš třeba takto:
Kód: Vybrat vše
$hwstack = 128
$swstack = 64
$framesize = 64
$baud = 9600
Config Serialin = Buffered , Size = 40 ' set buffer on the USART input
Dim Servo(8) As Byte 'hodnoty pro serva 1-8
Dim Prijaty_bajt As Byte
Enable Interrupts 'přijímací bufer používá přerušení
Do
If Ischarwaiting() = 1 Then
Prijaty_bajt = Inkey()
If Prijaty_bajt = 255 Then
Inputbin Servo(1) , 8 ' přijmi 8 bajtů a ulož do pole "Servo"
End If
End If
Loop
End
Jinak moc dik i za tohle řešeni.
Kód: Vybrat vše
If Ischarwaiting() = 1 Then
Prijaty_bajt = Inkey()
If Prijaty_bajt = 255 Then
Inputbin Servo(1) , 2 ' přijmi 8 bajtů a ulož do pole "Servo"
End If
End If
Select Case Servo(1)
Case 0 : Servo0 = Servo(2)
Case 1 : Servo1 = Servo(2)
Case 2 : Servo2 = Servo(2)
Case 3 : Servo3 = Servo(2)
End SelectKód: Vybrat vše
If Krok = 1 And Ischarwaiting() = 1 Then
B = Inkey()
If B = 255 Then Krok = 2
End If
If Krok = 2 And Ischarwaiting() = 1 Then
C = Inkey()
Krok = 3
End If
If Krok = 3 And Ischarwaiting() = 1 Then
D = Inkey()
Select Case C
Case 0 : Servo0 = D
Case 1 : Servo1 = D
Case 2 : Servo2 = D
End Select
Krok = 0
End If
Předpokládám, že "mezera" při vysílání je časová prodleva, ne znak mezery (ascii 32).
Data tedy vypadají takto:
255 - cislo_serva - hodnota_serva - 255 - cislo_serva - hodnota_serva........
Kód: Vybrat vše
Dim Servo(8) As Byte
Dim Temp As Byte
Dim Cislo As Byte
Dim Hodnota As Byte
Enable Interrupts
Do
If Ischarwaiting() = 1 Then
Temp = Inkey()
If Temp = 255 Then
Inputbin Cislo
Inputbin Hodnota
Servo(cislo) = Hodnota
End If
End If
Loop
EndPro časování serv použij hodnoty z pole "Servo()".