pyserial arduino 字节阵列解码问题

pyserial arduino bytearray decoding issue

本文关键字:解码 问题 阵列 字节 arduino pyserial      更新时间:2023-10-16

我正在尝试与通过USB发送串行数据的arduino接口,以尽快记录EMG信号。以前我使用声卡ADC,因为它很容易直接与ADC采样寄存器接口,但现在我正在尝试使我的设备完全无线。因此,我通过arduino进行一端采样,通过射频收发器发送数据,然后串行传输。arduino 端正在通过通道写入一个字节。以下是测试代码:

void setup() { 
Serial.begin(115200);
timer = micros();
}
void loop() {
//timeSync(loopTime);
int val = analogRead(1)-512;  
sendToPC(&val);
}
void sendToPC(int* data)
{
byte* byteData = (byte*)(data);
Serial.write(byteData, 2);
}

这是我的 Python 片段

com = "COM3"
baud = 115200
ser = serial.Serial(com, baud)
res = bytearray(4)
#ser.readinto(res)
tik = time.time()
rec = []
while(time.time() - tik < 2):
ser.readinto(res)
value = struct.unpack('>HH', res)
rec.extend(value)

因此,当我强制模拟引脚为5V时,我回读512(应该如此(。现在,如果我创建一个分频器,一端为 Vcc (5V(,另一端是我的输入信号,出于某种原因,我从解码中得到一个 4 字节的数字而不是 2(即 0xFFe0,或类似的东西(。

我正在使用除法器,因为传入的数据可以是正数或负数,所以我的思维过程是在做除法器时,我可以记录负值。然而,它似乎搞砸了转换!任何想法(代码明智/硬件明智?

编辑:我意识到 511 对于直 5V(应该是 1023(是错误的,但是我在发送之前会进行位移(例如,如果信号为 0V,分频器在量化时会给出 2.5V ~ 512。 因此 -512 会给出 0V(

好吧,解决方案有点卡顿,但就在这里。

所以我注意到,有时当我通过读取两个字节来收集数据时,我会得到一个字节数组,格式为:

字节阵列(b'xFF/x01/xFF/x01'(

通过检查读取的第一个字节(无符号(是否为>1023,我刷新串行输入和输出缓冲区,读取一个字节,然后继续读取两个字节:

rxbuffer =b''
ser.flushInput()
ser.flushOutput()
time.sleep(2)
tik = time.time()
rec = []
while(time.time() - tik < 1):
rxbuffer = ser.read(2)
if(int.from_bytes(rxbuffer, 'big', signed=True) > 1023):
print("out of sync")
tik = time.time()
ser.flushInput()
ser.flushOutput()
time.sleep(0.1)
ser.read(1)
continue
conv = int.from_bytes(rxbuffer, 'big', signed=True)
rec.append(conv)
print(conv)