我可以从Serial中区分出不同的数据吗?

时间:2014-10-10 17:55:51

标签: python split serial-port picaxe

我试图通过串行不同值来读取,但我不知道如何拆分它,因为这两个值是数字但来自不同的来源

首先我有一个PICAXE通过串行传输由光传感器的ADC转换成数据到python。 其次我有一个PICAXE通过串口发送温度传感器的数据到python。

光代码PICAXE

symbol puerto = B.5
main: readadc10 puerto,w1    ; read value into w1
sertxd(#w1,cr,lf)
goto main       ; loop back to start

临时代码PICAXE

symbol temp = B.4

readtemp temp, w0    ; read value into w1
debug
sertxd(#w0,cr,lf)
goto main

Python代码

   import pygame
   import sys, serial
   from pygame.locals import *




   ser = serial.Serial()
   ser.port = 3
   ser.baudrate = 4800

   while True:

        datos = ser.readline()            
        grados = float(datos)
        print grados

问题是picaxe从light和temp发送同时数据,但是当python接收数据时,我不知道如何识别每个数据。

任何人都可以帮助我吗?

感谢!

1 个答案:

答案 0 :(得分:0)

如果您有温度读数和同时发送的亮度读数,您可以将它们放在由空格分隔的一行上。

PICAXE:

sertxd(#w0," ",#w1,cr,lf)

的Python:

readings = ser.readline()
[reading1, reading2] = readings.split()
temperature = float(reading1)
lightlevel = float(reading2)

如果两种类型的阅读不规则地产生,你可以在每个阅读之前发送一个字符来识别它是什么类型。

PICAXE:

sertxd("T ",#w0,cr,lf)
...
sertxd("L ",#w1,cr,lf)

的Python:

reading = ser.readline()
[readingtype, readingvalue] = reading.split()
if readingtype == "T":
    temperature = float(readingvalue)
elif readingtype == "L":
    lightlevel = float(readingvalue)