Spanish ¿Como enviar un valor numerico por Bluetooth?

MRGSoft

New Member
Hola:
Quiero realizar una aplicacion que mande por Bluetooth el valor numerico de una variable de un byte y no doy con ello, solo consigo que me lo mande como si fueran caracteres de texto. Me explico, si la variable toma el valor de 128 que envie un byte con el valor 128, y no me envie tres bytes con el valor "1", "2" y "8". No se si me he explicado correctamente.
De ante mano muchas gracias por vuestra ayuda, soy demasiado novato con el B4A.
 

JoanRPM

Active Member
Licensed User
Longtime User
Hola.

Yo el BT lo hago siempre desde un servicio.
Aqui tienes un sencillo ejemplo de como enviar unos cuantos Bytes.

En el servicio BlueTooth (SrvBT):
B4X:
Sub Process_Globals

    Dim OutputStream1 As OutputStream
    Dim Serial1 As Serial
    Dim buffer_tx(20) As Byte
End Sub

Sub Service_Create
    Serial1.Initialize("Serial1")
    Serial1.Connect(MAC_Address)        'por ejem: "00:06:7A:46:3F:25"
End Sub

Sub Service_Start (StartingIntent As Intent)

    If Serial1.IsEnabled = False Then
        ToastMessageShow("Bluetooth deshabilitado.", True)
    Else
        Serial1.Listen 'listen for incoming connections
    End If
End Sub

Sub Serial1_Connected (Success As Boolean)

    If Success Then
        ToastMessageShow("Connexion correcta.", False)
    OutputStream1 = Serial1.OutputStream
        BT_connected = True
    Else
        BT_connected = False
        ToastMessageShow("Error de conexió." & LastException.Message, False)
        Log("Error de conexió." & LastException.Message)
    End If
End Sub

Sub Send_txd(n_bytes as int)

    OutputStream1.WriteBytes(buffer_tx, 0, n_bytes)
End Sub

En main:

B4X:
If BT_connected = True Then
    SrvBT.buffer_tx(0) = 250
    SrvBT.buffer_tx(1) = 20
    SrvBT.buffer_tx(2) = 8
    SrvBT.buffer_tx(3) = 150
    SrvBT.Send_txd(4)        'envia 4 bytes al BT
End If

Espero que te ayude.
Saludos.
 

benji

Active Member
Licensed User
Longtime User
una vez que el dispositivo BT esta conectado, en mi caso una impresora, envio directo la info como Hex

B4X:
str1Byte = Conv.StringToBytes(str1,"UTF8")
        str2Byte = Conv.StringToBytes(str2,"UTF8")
        str4Byte = Conv.StringToBytes(str4,"UTF8")
        str5Byte = Conv.StringToBytes(str5,"UTF8")
        str6Byte = Conv.StringToBytes(str6,"UTF8")
        str7Byte = Conv.StringToBytes(str7,"UTF8")
        str8Byte = Conv.StringToBytes(str8,"UTF8")
        str9Byte = Conv.StringToBytes(AuxContacto,"UTF8")
        str10Byte = Conv.StringToBytes(AuxContacto2,"UTF8")
        str11Byte = Conv.StringToBytes(AuxFono,"UTF8")
        str12Byte = Conv.StringToBytes(str9,"UTF8")
                   
        StrOut = Main.serial1.OutputStream
           
        strbyte(0) = 0x1B
        strbyte(1) = 0x4A
        strbyte(2) = 0x35
        strbyte3(0) = 0x1B
        strbyte3(1) = 0x4A
        strbyte3(2) = 0x31
        strbyte2(0) = 0x0A
        strbyte4(0) = 0x1B
        strbyte4(1) = 0x40
           
    '        *************************************
        StrOut.WriteBytes(strbyte4,0,strbyte4.Length)
        ByteBig(0) = 0x1D
        ByteBig(1) = 0x21
        ByteBig(2) = 0x10
        ByteBig(3) = 0x01
        BWByte(0) = 0x1D
        BWByte(1) = 0x42
        BWByte(2) = 0x31
        StrOut.WriteBytes(ByteBig,0,ByteBig.Length)
        'StrOut.WriteBytes(BWByte,0,BWByte.Length)
        StrOut.WriteBytes(str1Byte,0,str1Byte.Length)
        StrOut.Flush

Eso imprime "letras y numeros"...
si quieres mas detalles, pregunta no mas...
 
Top