pyerial arduino字节数组解码问题

问题描述 投票:0回答:1

我正在尝试与通过USB发送串行数据的arduino进行接口,以尽可能快地记录EMG信号。以前我使用的是声卡ADC,因为它很容易直接与ADC采样寄存器连接,但现在我正尝试使设备完全无线。结果,我通过arduino进行了一次末端采样,通过RF收发器发送了数据,然后进行串行传输。 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)

我正在尝试与通过USB发送串行数据的arduino进行接口,以尽可能快地记录EMG信号。以前我使用的是声卡ADC,因为直接与...

python c++ arduino pyserial
1个回答
0
投票

很好的解决方案有点过时,但是在这里。

© www.soinside.com 2019 - 2024. All rights reserved.