Robofun 機器人論壇

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

python轉arduino 超音波感測 問題求解~~~

[複製鏈接]
1#
發表於 2018-12-14 19:55:30 | 顯示全部樓層
firmata 是用 UART 互連的
速度是 57600bps,
也就是就算來回只送一個byte, 也要花約 250us
更何況firmata的協定還不止傳一個byte
用這麼慢的速度去量測音波的來回(1cm 約 60us)
一定會不準的
2#
發表於 2018-12-15 16:05:50 | 顯示全部樓層
本帖最後由 超新手 於 2018-12-15 16:06 編輯

1)一定要在Arduino 偵測完超音波, 再把值讀回, 值才會準
所以最簡單的方法就是去改寫 Firmata 的程式
例如用你的超音波程式去取代原來讀A/D 的程式
這樣你就可以用Firmata的架構, 不用大改
原本 arduino Firmata讀a/d的程式
Firmata.sendAnalog(analogPin, analogRead(analogPin));
改成
if(analogPin == A0){
// 以下是隨便寫
  digitalWrite(Trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig, LOW);
  pulse_len = pulsein(ECH, HIGH, 1000);
  Firmata.sendAnalog(analogPin, pulse_len);
} else {
  Firmata.sendAnalog(analogPin, analogRead(analogPin));
}
2)上傳的數值不是本來就可以用 if 了嗎
   v = get_distance()
  if v[0] >= 10:
   
  if v[1] == 100:
  
3) 那個 %....確定不是寫錯嗎?
print("cm=%f\tinches=%f" % get_distance())


3#
發表於 2018-12-17 19:48:54 | 顯示全部樓層
response = ser.readline()
a=int(response)
if a <100:
  print("Quit")
試試看
4#
發表於 2018-12-18 07:28:54 | 顯示全部樓層







Serial.print(d);
Serial.print("cm");
Serial.println();
改成
Serial.println(d);


您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-3 10:30 , Processed in 0.208609 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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