import serial
import json

# Configuração da porta serial
ser = serial.Serial(
    port='COM5',           # Ajuste conforme necessário
    baudrate=4800,         # Baudrate especificado
    bytesize=serial.SEVENBITS,  # 7 bits
    parity=serial.PARITY_EVEN,  # Paridade par
    stopbits=serial.STOPBITS_ONE,  # 1 stop bit
    timeout=1
)

def ler_peso():
    try:
        dados_brutos = ser.readline()
        print(f"Dado bruto recebido (hex): {' '.join(format(x, '02x') for x in dados_brutos)}")

        if len(dados_brutos) > 6 and dados_brutos[0] == 0x02:  # Ajuste conforme necessário
            bytes_peso = dados_brutos[4:10]  # Posições conforme seu padrão de dados
            peso_str = bytes_peso.decode('ascii')  # Decodifica os bytes como string ASCII
            try:
                peso = int(peso_str)  # Converte a string para inteiro
                print(f"Peso interpretado: {peso}")

                if 0 <= peso <= 10000:  # Intervalo de peso esperado
                    return peso
                else:
                    print("Valor de peso fora do intervalo esperado.")
                    return 0  # Retorna 0 se o valor estiver fora do intervalo esperado
            except ValueError:
                print("Falha na conversão de peso para inteiro.")
                return 0
        else:
            print("Dados insuficientes para obter pesos ou padrão inesperado.")
            return 0
    except Exception as e:
        print(f"Erro ao ler dados da balança: {e}")
        return 0

def salvar_pesos_em_json(peso):
    data = {"peso": peso}
    print("Dados a serem salvos:", data)  # Debug print
    with open('C:/xampp/htdocs/balanca/serial_data.json', 'w') as json_file:
        json.dump(data, json_file)
    print("Pesos salvos em serial_data.json")

if __name__ == "__main__":
    while True:
        peso = ler_peso()
        salvar_pesos_em_json(peso)
