首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >带有struct并通过串行通信发送的Python字节数组

带有struct并通过串行通信发送的Python字节数组
EN

Stack Overflow用户
提问于 2022-07-02 14:37:49
回答 1查看 66关注 0票数 2

我为字节接收程序编写了代码,并在Python float and integer values to bytearray上寻求帮助。

而且起作用了。

我的问题是,每次运行程序时,我都可以发送数据。但是当我试图用with循环自动化这个数据传输时,我得到了校验和错误

我的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import serial
import struct
import time

ser = serial.Serial('COM16', 19200, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE)
size = 78
array1 = bytearray(size)

check_sum = 0

array1[0] = 0xFF
array1[1] = 0xFF
array1[2] = 0x54
array1[3] = 0x52
array1[5] = 0
array1[76] = 0x0D
array1[77] = 0x0A

counter = 0

altitude = input("altitude: ")
altitude_gps = input("gps altitude: ")
locationx = input("location x: ")
locationy = input("location y : ")
payload_altitude = input("payload altitude: ")
locationx_payload = input("location x payload:  ")
locationy_paylaod = input("location y payload: ")

altitude_array = struct.pack('<f', float(altitude))
altitude_gps_array = struct.pack('<f', float(altitude_gps))
locationx_array = struct.pack('<f', float(locationx))
locationy_array = struct.pack('<f', float(locationy))
payload_altitude_array = struct.pack('<f', float(payload_altitude))
locationx_payload_array = struct.pack('<f', float(locationx_payload))
locationy_paylaod_array = struct.pack('<f', float(locationy_paylaod))

array1[6] = altitude_array[0]
array1[7] = altitude_array[1]
array1[8] = altitude_array[2]
array1[9] = altitude_array[3]

array1[10] = altitude_gps_array[0]
array1[11] = altitude_gps_array[1]
array1[12] = altitude_gps_array[2]
array1[13] = altitude_gps_array[3]

array1[14] = locationx_array[0]
array1[15] = locationx_array[1]
array1[16] = locationx_array[2]
array1[17] = locationx_array[3]

array1[18] = locationy_array[0]
array1[19] = locationy_array[1]
array1[20] = locationy_array[2]
array1[21] = locationy_array[3]

array1[22] = payload_altitude_array[0]
array1[23] = payload_altitude_array[1]
array1[24] = payload_altitude_array[2]
array1[25] = payload_altitude_array[3]

array1[26] = locationx_payload_array[0]
array1[27] = locationx_payload_array[1]
array1[28] = locationx_payload_array[2]
array1[29] = locationx_payload_array[3]

array1[30] = locationy_paylaod_array[0]
array1[31] = locationy_paylaod_array[1]
array1[32] = locationy_paylaod_array[2]
array1[33] = locationy_paylaod_array[3]

for x in range(4, 75):
    check_sum += array1[x]
check_sum = check_sum % 256
array1[75] = check_sum

ser.write(array1)
time.sleep(3)

while True:
    counter = counter + 1
    array1[5] = counter

    for y in range(4, 75):
        check_sum += array1[x]
    check_sum = check_sum % 256
    array1[75] = check_sum
    ser.write(array1)
    time.sleep(3)

如何才能使这一转移过程持续下去。或者如何在while循环中修复这个校验和错误。(没有while循环,我对校验和没有问题,每次运行程序我都可以发送数据)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-29 03:16:39

在中帮助命名为"rndpkt“的代码和问题得到了解决

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import struct
import time

import serial

array1 = bytearray(78)
array1[0:4] = bytes.fromhex('FFFF5452')
array1[76:78] = bytes.fromhex('0d0a')

altitude = float(input("altitude: "))
gps_altitude = float(input("gps altitude: "))
latitude = float(input("latitude: "))
longitude = float(input("longitude: "))
payload_altitude = float(input("payload altitude: "))
payload_latitude = float(input("payload latitude: "))
payload_longitude = float(input("payload longitude: "))

array1[6:34] = struct.pack('<7f', altitude, gps_altitude, latitude, longitude, payload_altitude, payload_latitude, payload_longitude)

with serial.Serial('COM16', 19200, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE) as ser:
    while True:
        array[75] = sum(array[4:75]) % 256
        ser.write(array1)
        array1[5] += 1
        time.sleep(3)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72842853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文