Serial.begin(9600); for(int i=0; i < 2; i++) { pinMode(ultraSoundSignalPins, INPUT); // Switch signalpin to input } pinMode(ultraSoundTriggerPin, OUTPUT); // set this pin to output //give the sensors time to boot up delay(250); // send RX pin high to signal to chain to ping digitalWrite(ultraSoundTriggerPin, HIGH); delayMicroseconds(30); digitalWrite(ultraSoundTriggerPin, LOW); pinMode(ultraSoundTriggerPin, INPUT); // electrically disconnects the pin delay(50); 可以請問這段的意思是什麼 有點看不懂 謝謝 |
一樣坐在電腦前面上網聊天, 做一樣的事情,我卻有額外的收入。 網路創業的宅經濟網路世代, 唯一的風險就是你沒有參與!! 想在家工作,創造持續性收入!! 請點入註冊免費體驗90天>> http://litailhsu.blogspot.com/ (註冊成功後,請每天務必查收信箱重要信息!!) |
回復 29# yao412030 不客氣, 也感謝你給我研究的動力, 試試 使用Simultaneous Operation的方式,也是應該的嘗試. 另外,如果你的自走車, 寬度不過十幾公分, 其實只用一顆MaxSonar-EZ1 也可以在碰到障礙物時, 知道要轉哪個方向, 如下舉例,給你參考: http://megaswf.com/serve/1186867 |
回復 24# yao412030 另外一種可能就是因為斜面折射的關係, 所以比較遠的那一顆接受到近的那顆的訊號, 而且比較多, 所以,以後每次在車子轉動時你就反過來寫, 大概如下: }else if(right && left <= 30 && right>left){ //偵測到左右方障礙物且左方距離障礙物較遠減速轉向左方 analogWrite(g_nMotor_2_Pin_B,255); analogWrite( g_nMotor_1_Pin_A, 0); analogWrite( g_nMotor_1_Pin_B , 120); l = 1; }else if (right >= 30 && right > left){ //偵測結束回復速度 analogWrite( g_nMotor_1_Pin_A, 0); analogWrite( g_nMotor_1_Pin_B , 180); }else if(right && left <= 30 && right<left){ //偵測到左右方障礙物且右方距離障礙物較遠減速轉向右方 analogWrite(g_nMotor_2_Pin_A,255); analogWrite( g_nMotor_1_Pin_A, 0); analogWrite( g_nMotor_1_Pin_B , 120); }else if (left >= 30 && right < left){ //偵測結束回復速度 analogWrite( g_nMotor_1_Pin_A, 0); analogWrite( g_nMotor_1_Pin_B , 180); r = 1; |
本帖最後由 vegewell 於 2011-10-16 22:10 編輯 回復 26# yao412030 你必須先確定是 MaxSonar-EZ1本身沒問題, 如果你沒驅使馬達轉動的時候, 兩顆MaxSonar-EZ1對著各種障礙物,包括你畫的圖這種角度對著牆壁, 兩顆MaxSonar-EZ1讀出的值是否正確? 如果正確,就表示 MaxSonar-EZ1本身沒問題, 至於你馬達的程式,因為我不曉得你是怎麼連線及控制馬達, 所以不曉得你的程式對不對, 如果你肯定正確的話,就表示最可能出現的問題是ARDUINO, ARDUINO可能又控制馬達,造成電力不足, 所以有數值跳動的問題產生, 這種情形在ARDUINO控制servo時經常發生. |
本帖最後由 yao412030 於 2011-10-15 22:12 編輯 大大您好 小弟我又遇到問題了..... 就是小弟我有寫說如果左右兩科都偵測到障礙物時,要判斷哪邊距離障礙物比較遠,轉向離障礙物較遠的方向時 我的超音波類比值整個會怪怪的 假如說我前方有到牆壁,左邊比較接近牆壁,正常來說左邊類比值一定會小於右邊,可是我的卻不是,我的居然是左邊大於右邊... 反之也是一樣.... 數值整個變非常奇怪,我也檢查我的程式碼好像也沒啥問題在.... 我只用大大您提供的電路給我兩顆雖然不會互相干擾,左右其中一顆偵測到也不會發現說有類比值不穩的地方,可是兩顆同時偵測到就會出現問題 可否請大大幫助我呢? 謝謝!! 小弟我提供一下當兩邊都有遇到障礙物判斷距離轉向的寫法!! }else if(right && left <= 30 && right<left){ //偵測到左右方障礙物且左方距離障礙物較遠減速轉向左方 analogWrite(g_nMotor_2_Pin_B,255); analogWrite( g_nMotor_1_Pin_A, 0); analogWrite( g_nMotor_1_Pin_B , 120); l = 1; }else if (right >= 30 && right < left){ //偵測結束回復速度 analogWrite( g_nMotor_1_Pin_A, 0); analogWrite( g_nMotor_1_Pin_B , 180); }else if(right && left <= 30 && right>left){ //偵測到左右方障礙物且右方距離障礙物較遠減速轉向右方 analogWrite(g_nMotor_2_Pin_A,255); analogWrite( g_nMotor_1_Pin_A, 0); analogWrite( g_nMotor_1_Pin_B , 120); }else if (left >= 30 && right > left){ //偵測結束回復速度 analogWrite( g_nMotor_1_Pin_A, 0); analogWrite( g_nMotor_1_Pin_B , 180); r = 1; |
本帖最後由 vegewell 於 2011-9-20 21:18 編輯 回復 20# yao412030 那你也蠻會的, 知道要降至3.3V, 請問你是哪裡怎麼降至3.3V的? 你的意思是說,現在可以正確的顯示,至少誤差不會太大? 除了顯示值差距太小, 就沒有問題了嗎? The LV-MaxSonar®-EZ0™ detects objects from 0-inches to 254-inches 最長可偵測 是(6.45-meters), 那你想偵測的最遠為何?假設是100公分 假設0公分時類比值是10, 那100公分時假設類比值25, 所以你要在程式裡加入map()函數: ---------------------------------- ultrasoundValue = (echo / .58138); ultrasoundValue = map(ultrasoundValue, 10, 25, 1000, 2500); Serial.println(); Serial.print("UltraSound Value"); Serial.print( ultraSoundSignalPins); Serial.print( "= "); Serial.print(ultrasoundValue); ------------------------------------- 試看看 因為是long 不是int 所以不把握, |
小弟我現在在測試大大這張電路圖接法還有這個的程式碼http://arduino.cc/forum/index.php/topic,65727.0.html 小弟我發現當我使用5V的時候感測器都沒動作.... 之後我降成3.3V之後感測器有動作而且兩顆不會互相干擾.... 可是小弟我發現一個問題是當我手指整個蓋住感測器他的類比值是10 可是我把手拉到離感測器約8公分時類比值也差不多顯示10~12左右 請問大大有辦法解決這類比值數據上的間隔吧....這樣間隔實在是太小了 感謝囉! |
回復 16# yao412030 不過,沒有刪的原程式, 我現在自己用 Arduino Mega 去編譯 是 Done Compiling, 而且 Done uploading, 我是用最新版本 Arduino 0022, 你是怎麼用的? 原程式在此 http://arduino.cc/forum/index.php/topic,65727.0.html |
解釋是: [Analog pins are INPUT only, so there is no reason to set the pin mode for them. As a result, the pinMode() function only applies to digital pins. So, you just set digital pins 0 to 5 as input, including the ones managed by the Serial instance.] 所以你把下列幾行刪除試試(多餘的): for(int i=0; i < 2; i++) { pinMode(ultraSoundSignalPins, INPUT); // Switch signalpin to input } ====================== |
回復 14# vegewell 大大您好 小弟我剛剛看了你PO的程式碼發現我編譯檢查時ARDUINO說有錯誤 sketch_sep19a.cpp: In function 'void setup()': sketch_sep19a:8: error: invalid conversion from 'int*' to 'uint8_t' sketch_sep19a:8: error: initializing argument 1 of 'void pinMode(uint8_t, uint8_t)' sketch_sep19a.cpp: In function 'void loop()': sketch_sep19a:28: error: invalid conversion from 'int*' to 'uint8_t' sketch_sep19a:28: error: initializing argument 1 of 'int analogRead(uint8_t)' sketch_sep19a:34: error: call of overloaded 'print(int [2])' is ambiguous C:\Program Files\Arduino\arduino-0022\hardware\arduino\cores\arduino/Print.h:44: note: candidates are: void Print::print(const String&) <near match> C:\Program Files\Arduino\arduino-0022\hardware\arduino\cores\arduino/Print.h:46: note: void Print::print(char, int) <near match> C:\Program Files\Arduino\arduino-0022\hardware\arduino\cores\arduino/Print.h:47: note: void Print::print(unsigned char, int) <near match> C:\Program Files\Arduino\arduino-0022\hardware\arduino\cores\arduino/Print.h:48: note: void Print::print(int, int) <near match> C:\Program Files\Arduino\arduino-0022\hardware\arduino\cores\arduino/Print.h:49: note: void Print::print(unsigned int, int) <near match> C:\Program Files\Arduino\arduino-0022\hardware\arduino\cores\arduino/Print.h:50: note: void Print::print(long int, int) <near match> C:\Program Files\Arduino\arduino-0022\hardware\arduino\cores\arduino/Print.h:51: note: void Print::print(long unsigned int, int) <near match> 好像是這行開始出錯的pinMode(ultraSoundSignalPins, INPUT); // Switch signalpin to input 請問我該如何修改呢?? |
小弟我今天花了2小時把文章看了看一下,這幾天會開始實際操作~ 謝謝大大們的詳細解說,如果有問題還要麻煩大大了~感恩 |
依照那國外做者,請先試試下圖的接法: arduino的程式如下 int ultraSoundSignalPins[] = {0,1}; // 2 Ultrasound signal pins int ultraSoundTriggerPin = 6; // output pin to start Ultrasound signals void setup() { Serial.begin(9600); for(int i=0; i < 2; i++) { pinMode(ultraSoundSignalPins, INPUT); // Switch signalpin to input } pinMode(ultraSoundTriggerPin, OUTPUT); // set this pin to output //give the sensors time to boot up delay(250); // send RX pin high to signal to chain to ping digitalWrite(ultraSoundTriggerPin, HIGH); delayMicroseconds(30); digitalWrite(ultraSoundTriggerPin, LOW); pinMode(ultraSoundTriggerPin, INPUT); // electrically disconnects the pin delay(50); } void loop() { unsigned long ultrasoundValue; unsigned long echo; delay(50); for(int i=0; i < 2; i++) { //Now the values from each sensor can be read: echo = analogRead(ultraSoundSignalPins); //Listen for echo ultrasoundValue = (echo / .58138); Serial.println(); Serial.print("UltraSound Value"); Serial.print( ultraSoundSignalPins); Serial.print( "= "); Serial.print(ultrasoundValue); delay(500); } } ================== 如有問題, pin0 and pin1的線互換看看, another 有沒有接 1 k 的電阻? 依照做者的說法,在測至一米前,都蠻(準確度)的 , |
小黑屋|手機版|Archiver|機器人論壇 from 2005.07
GMT+8, 2024-11-22 00:29 , Processed in 0.190911 second(s), 11 queries , Apc On.
Powered by Discuz! X3.2
© 2001-2013 Comsenz Inc.