Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 5162|回復: 16
打印 上一主題 下一主題

超音波感測 讀取序列埠數值 問題~

[複製鏈接]
1#
發表於 2018-12-18 21:01:06 來自手機 | 顯示全部樓層
本帖最後由 超新手 於 2018-12-19 08:58 編輯

用 try except 把不能 轉換的字串印出來就知道了

不過我猜可能的原因是
如果字串少於 2 個 byte
那就會變成空字串
float 沒辦法把空字串轉成浮點數


或是....直接不管它
try:
  decode=float(response[0:len(response)-2].decode("utf-8"))
  print(decode)
except:
  pass
2#
發表於 2018-12-27 17:52:01 | 顯示全部樓層
本帖最後由 超新手 於 2018-12-28 08:53 編輯

在送第一筆時, 前面多送個辨識字元即可, 如 a
Arduino
Serial.print("a");
Serial.println(d);
Serial.println(d2);

Python
當然就要記得要把'a' 拿掉
try:
  response = ser.readline()
  response = response.strip()
  if response[0] == ord('a'):
    print("1")  
    decoder=int(response[1:])                        
  else:
    print("2")               
    decoder=int(response)   
  print(decoder)  
except:
  pass
3#
發表於 2019-2-18 17:59:16 | 顯示全部樓層
我猜是UART線斷了
檢查看看(或是把兩組 UART 線對調)
看看結果會不會變
4#
發表於 2019-2-20 21:32:18 | 顯示全部樓層
本帖最後由 超新手 於 2019-2-21 08:31 編輯

要把副程式的變數decode1/decode2定義成global變數,
主程式才認的出來

def a():
  global decode2
  try:
.........

def b():
  global decode1
  try:
5#
發表於 2019-2-21 12:48:59 | 顯示全部樓層
另外. 你的程式改成這樣,
不是很容易讀取失敗嗎?
如果 在執行 a() 的時候, 對方送sonar b 有效資料過來
或是 在執行 b() 的時候, 對方送sonar a 有效資料過來
這兩種情形都不會讀到有效資料吧?
而且 except: 中又去執行自己一次?
這種高等的程式技巧.
如果使用不當, 很容易出問題
6#
發表於 2019-2-25 19:48:53 | 顯示全部樓層
這和軟體(PYTHON)沒關係
和你跑PYTHON的硬體, 昰不是有兩個 SERIAL PORT 有關
如果有, 就把 '/dev/ttyACM0' 改成另一個名字
例如 '/dev/ttyACM1'(注意 !!!!!!! ttyACM1 只是舉例, 要看你的硬體名稱)
ser1=serial.Serial('/dev/ttyACM1',9600,timeout=0.25)

7#
發表於 2019-2-26 08:51:05 | 顯示全部樓層
多了括號
def main():
    t1=threading.Thread(target=c)
    t1.start()
    t2=threading.Thread(target=b)
    t2.start()   
8#
發表於 2019-3-8 12:43:04 | 顯示全部樓層
本帖最後由 超新手 於 2019-3-8 12:44 編輯

不知道為什麼要寫的這麼複雜?
出事是遲早的事
試看看這樣行不行, 如果不行, 那就.....自求多福了
ser=serial.Serial('/dev/ttyACM1',9600,timeout=0.25)
ser2=serial.Serial('/dev/ttyACM0',9600,timeout=0.25)
lock=threading.Lock()

def a():
lock.acquire()
response=ser.readline()
lock.release()

def a():
lock.acquire()
response=ser2.readline()
lock.release()


def d():
lock.acquire()
response=ser.readline()
response2=ser2.readline()
lock.release()
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-5-2 10:31 , Processed in 0.198553 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表