'*************************************************** 'DEV by: 'Daniele De Santis 'desantis@areasx.com 'www.areasx.com 'www.desantix.it 'Ver 1.0.0 'Data: 10/05/2004 'RX/TX Pulsante '*************************************************** Option Explicit Public Const InputBufferSize As Integer = 50 Public InputBuffer(1 To InputBufferSize) As Byte Public Const OutputBufferSize As Integer = 50 Public OuputBuffer(1 To OutputBufferSize) As Byte '----------------------------------------------- 'Funzioni per la comunicazione con la seriale '----------------------------------------------- 'FUNZIONE PER INVIARE UNA STRINGA Public Sub PutStr( _ ByVal Tx As String) Call PutQueueStr(OuputBuffer, Tx) End Sub 'FUNZIONE PER RICEVERE UN BYTE Public Sub GetByte( _ ByRef Value As Byte, _ ByRef Success As Boolean) Success = StatusQueue(InputBuffer) If (Success) Then Call GetQueue(InputBuffer, Value, 1) Else Value = 0 End If End Sub 'FUNZIONE PER RICEVERE UNA STRINGA Public Function GetStr( _ ByVal BufferSize As Integer, _ ByVal Delay_read As Single) As String Dim Key As Byte Dim Success As Boolean Dim I As Integer Dim Value As string Call Delay(Delay_read) Value="" For I = 1 To BufferSize Call GetByte(Key, Success) if(Success) then Value=Value & chr(Key) End if Next GetStr = Value End Function '----------------------------------------------- 'FINE Funzioni per la comunicazione con la seriale '----------------------------------------------- '#1 Public Function rear_line(ByVal MSBbit As Byte) As byte Dim tmp as byte Dim bCount As Byte tmp = 0 For bCount = 0 to 3 tmp = tmp + (GetPin(MSBbit + bCount) * cbyte(pow(2.0, csng(bCount)))) Next rear_line = tmp End Function '#2 Sub Put2Bits (ByVal bByte As Byte, _ ByVal MSBbit As Byte) Dim bMask As Byte Dim bCount As Byte bMask = bx00001000 For bCount = 0 to 3 'Put most significant bits first Call PutPin(MSBbit + bCount, ((bByte And bMask)\bMask)) bMask = bMask \ 2 Next End Sub '#3 Public Function analize_string(ByVal buff As string, _ ByVal head_string as string) As Integer Dim char_byte(0 to 3) As byte Dim TmpInt_ As integer Dim TmpSng As Single Dim TmpStr_ As String * 2 Dim Success As Boolean TmpInt_ = Len(buff) If(TmpInt_ > 3) Then 'Analizzo l'intestazione della stringa TmpStr_ = mid(buff,1,1) If (asc(head_string) = asc(tmpStr_)) then If(TmpInt_ = 4) then TmpStr_ = mid(buff,3,1) Else TmpStr_ = mid(buff,3,2) End if Call ValueS(TmpStr_, TmpSng, Success) TmpInt_ = Cint(TmpSng) analize_string = Tmpint_ Else analize_string = -1 End If Else analize_string = -2 End If End Function '------------------------------- ' 'PROGRAMMA PRINCIPALE ' '------------------------------- Public Sub Main() 'Parametri della seriale Const PortNumber As Byte = 3 Const TxPin As Byte = 17 Const RxPin As Byte = 16 Const BaudRate As Long = 19200 'LED ERRORE Const LED_ERROR As Byte = 25 'VARIABILI IMPOSTAZIONI MODULO RF Dim RF_UART As String * 9 Dim RF_CHANNEL As string * 9 Dim RF_POWER As string * 10 'VARIABILI Dim buffer As String * 10 Dim Enabled as Byte Dim TmpInt As integer Dim OldState As byte Dim TmpByt As byte Dim TmpStr As String * 2 'CONFIGURA LA SERIALE SW Call OpenQueue(InputBuffer, InputBufferSize) Call OpenQueue(OuputBuffer, OutputBufferSize) Call DefineCom3(RxPin, TxPin, bx0000_1000) 'Setta la seriale come inverted, no parity, 8 bits. Call OpenCom(PortNumber, BaudRate, InputBuffer, OuputBuffer) 'INIZIALIZZAZIONE DELLE VARIABILI Enabled = 0 OldState = 0 RF_UART = "ER_CMD#U4" '19200 RF_CHANNEL = "ER_CMD#C0" 'Canale 0 RF_POWER = "ER_CMD#P10" '10mW 'CONFIGURA LE LINEE DI INPUT CON IL PULLUP di 120K INTERNO Call PutPin(5, bxInputPullup) Call PutPin(6, bxInputPullup) Call PutPin(7, bxInputPullup) Call PutPin(8, bxInputPullup) 'Inizializzo il modulo call PutStr(RF_UART) call PutStr(RF_CHANNEL) call PutStr(RF_POWER) Debug.Print "INIZIO PROGRAMMA TX/RX con Easy-Radio" Debug.Print "Dev By DeSantiX.iT" 'LOOP Do 'LEGGE LO STATO DELLE 4 LINEE DI IN TmpByt = rear_line(5) 'Se è stato premuto un tasto if(TmpByt > 0)then if (Enabled = 0) then Enabled = 1 buffer="S_" & cstr(TmpByt) Debug.print "Trasmesso " & buffer call PutStr(buffer) Call Delay(0.4) buffer = GetStr(InputBufferSize, 0.01) TmpStr = "K" TmpInt = analize_string(buffer, TmpStr) if (TmpInt >= 0) then TmpByt = cbyte(TmpInt) Call Put2Bits (TmpByt, 9) 'Debug.print "valore ricevuto: " & cstr(TmpByt) Call PutPin(LED_ERROR, 1) Else Debug.print "Error: " & cstr(TmpInt) If(TmpInt = -1) then Call PutPin(LED_ERROR, 0) End if End If end if 'RICEZIONE else Enabled = 0 'Verifica se è stato ricevuto un comando di set buffer = GetStr(InputBufferSize, 0.01) TmpStr = "S" TmpInt = analize_string(buffer, TmpStr) if(TmpInt >= 0) then Debug.print "Ricevuto RX Loop " & buffer TmpByt = cbyte(TmpInt) OldState = OldState XOR TmpByt) 'Rinvia il valore settato buffer="K_" & cstr(OldState) Call PutStr(buffer) call Put2Bits (OldState, 9) End If End If Loop End Sub