問題是指北針不能接受DA/CL或是PWN或是DIGITAL訊號吧 他只對你把他搖來搖去會有反應 不過, 昨天看到窮人版多點觸控螢幕, 讓我想到 我也來做個窮人版羅盤好了 把最便宜的webcam對準指北針, 然後自己影像辨識...哈哈(成本應該能低於兩百) 不過應該也不會有人跟我買這個吧@@ |
不用客氣, 誠如前面所言, 程式不是我寫的........ 唉 我是不是也該像你一樣 買個指北針 ........ 跟 6352 比對一下 勒 ?! 一個指北針似乎比從 Sparkfun 買一個 6352 便宜多了 |
怪!!!! 這程式碼真的差別不大啊, 跟我抓的版本真的是幾乎一樣 可是....可以RUN了, 天啊 , 我卡住一個禮拜的問題, 可以RUN了 請受小弟充滿誠意的感激一鞠躬啊!!!!! 就只是多了些pinXXX的指令, 這些指令只是讓LED燈亮吧, 應該對6352沒影響才對 為何這樣就可以動了啊, 超怪的 還是因為Wire.begin(); 這行呢?! 因為我看原廠的程式這行是在Serial.begin(9600); 之前, 您的版本是在之後...這樣會有差喔? 會收不太到感覺是因為中間receive的時候要給她點時間, 所以while迴圈之前加個DELAY(50)就可以比較正確收到 角度好像是正確了, 我拿圓規和羅盤去對好像還滿準 啊....感動!!! 真是太感謝 正好工廠告訴我乒乓球砲的零件也完成了, 哇哈哈, 雙喜臨門啊 開香檳慶祝去..... 不過, 小弟有個疑問還請不吝指教 請教您是在哪邊工作啊? 怎會有做這個的經驗 (我是無業遊民 , 在家接CASE, 吃自己的哩) |
本帖最後由 rose40 於 2009-7-31 19:16 編輯 我也是網路上 Copy 的給你參考 角度不對 但有回應, 我使用了如下的 code 但很奇怪的當箭頭 N 指向西南邊時,讀出的值才接近於零, 而不是指向 北邊 才接近於零?! 70us (microsecond) delay 忘記是Datasheet 還是網站講的 :p 你看的那個是 RTC 的 Code, 6352 是送個 Get Data 指令等 70 us 再收 data吧. 角度不對 還沒有去細究..... #include <Wire.h> int HMC6352Address = 0x42; // This is calculated in the setup() function int slaveAddress; int ledPin = 13; boolean ledState = false; byte headingData[2]; int i, headingValue; void setup() { // Shift the device's documented slave address (0x42) 1 bit right // This compensates for how the TWI library only wants the // 7 most significant bits (with the high bit padded with 0) slaveAddress = HMC6352Address >> 1; // This results in 0x21 as the address to pass to TWI Serial.begin(9600); pinMode(ledPin, OUTPUT); // Set the LED pin as output Wire.begin(); } void loop() { // Flash the LED on pin 13 just to show that something is happening // Also serves as an indication that we're not "stuck" waiting for TWI data ledState = !ledState; if (ledState) { digitalWrite(ledPin,HIGH); } else { digitalWrite(ledPin,LOW); } // Send a "A" command to the HMC6352 // This requests the current heading data Wire.beginTransmission(slaveAddress); Wire.send("A"); // The "Get Data" command Wire.endTransmission(); delay(10); // The HMC6352 needs at least a 70us (microsecond) delay // after this command. Using 10ms just makes it safe // Read the 2 heading bytes, MSB first // The resulting 16bit word is the compass heading in 10th's of a degree // For example: a heading of 1345 would be 134.5 degrees Wire.requestFrom(slaveAddress, 2); // Request the 2 byte heading (MSB comes first) i = 0; while(Wire.available() && i < 2) { headingData = Wire.receive(); i++; } headingValue = headingData[0]*256 + headingData[1]; // Put the MSB and LSB together Serial.print("Current heading: "); Serial.print(int (headingValue / 10)); // The whole number part of the heading Serial.print("."); Serial.print(int (headingValue % 10)); // The fractional part of the heading Serial.println(" degrees"); delay(500); } |
感謝這麼熱心幫助回答 我有很仔細看了您的程式碼, 發現其中有個我一直不明白的地方 I2C會有什麼MASTER/SLAVE的關係, 這是什麼呢?! 您的程式碼中有一行: #define DS1307_I2C_ADDRESS 0×68 632的程式碼中也有一行 int compassAddress = 0x42 >> 1 // the default 7-bit slave address is 66 (0x42) // shift the address 1 bit right, // the Wire library only needs the 7 most significant bits for the address 上面這段英文的意思是說 :預設的7bit 紀錄IO 位址, 在SLAVE模式下是66?, 所以右移1bit變成33? 33 是指變成MASTER?! 這兩者的關係到底是什麼呢!? 我有改過, 不管有沒有那個>>1位移指令, 都沒反應 另外, 原廠程式碼說到 Wire.endTransmission(); // stop transmitting delay(10); // 文件建議最少6秒??? 才能讀取傳回值, 可是我找的原始碼卻寫10ms? Wire.requestFrom(compassAddress, 2); 而我看您的程式碼裡面, 這個delay是根本省掉了? 這是說根本不需要DELAY? Wire.requestFrom(DS1307_I2C_ADDRESS, 7);<---沒delay就算了, 還一口氣讀7byte? 哈哈 抱歉喔, 因為我對這個部分實在有太多疑問, 網站的資訊又分散各處 實在是努力很久沒有結論哩, 希望不吝分享使用經驗喔,感激不盡 |
本帖最後由 rose40 於 2009-7-31 15:01 編輯 看起來接法應該沒問題, 有那圖應該是 Sparkfun, 我接過 Mega 和 Seeed studio 的HMC6352 類似 http://analyst-tw.jjvk.com/?p=77 我接 rtc 也OK, 時間輸出也OK, 所以 spi 應該是OK. 接 6352 會有輸入輸出, 但是輸出的角度不太對就是...... EMAIL 問了 Seeed studio 的工程師 沒回應......唉 |
另外, 照原廠網站講的接analog P4 / P5的作法我也是過一樣不行 個人猜想, MEGA的定義和別的東西不太一樣 因為原廠網站目前為止還沒有更詳細的文件出現 可能還在撰寫中, 其他版本都有相關的網頁或是PDF了 http://arduino.cc/en/Guide/HomePage 裡面的GettingStart目前為止還沒出現MEGA版本的超連結 這塊板子說實話還滿好用 本來一看到覺得很複雜, 後來仔細閱讀原廠文件發現她線路這樣安排真的很好做事 只要搭一塊ArduinoMEGA擴充版上去, 上面就可以自己悍接一堆想要的東西 電路的整合性就會比較好 前幾天才用2個7位數字顯示器作了個數位計時器來玩 用電路板悍成一塊, 底下的針腳直接插上去就好, 不需要用麵包版搞的跟被搶打到一樣 |
本帖最後由 aroboto 於 2009-7-30 16:42 編輯 3# mzw2008 抱歉,今日才看到此文章 藝科的客戶 歡迎透過藝科新建構的論壇作發問問題 www.aroboto.com/forum 工程部門針對此論壇每日都會作確認 已購買產品的客戶,可以使用購物網站的帳號直接作登錄 相信比較不會出現您無法解決問題的困擾 針對您提出的問題,今明兩日 會請工程師作測試 並將相關測試資料回覆給您 BEN BEN |
感謝回覆 他板子上已經標明的很清楚 (原廠PDF文件卻沒有清楚的寫出, 也找不到詳細版子放大接線指示圖) pin 20/21是這兩個腳位 可是我插上去也是不行 資料'A' 送過去 6532以後, 等半天也沒有任何資料的回傳 程式碼用的是藝科網站上的那個不行, 我有去wire網站抓來那個程式碼也差不多 也是沒反應 裡面那段 if(2 <= Wire.available()) // if two bytes were received { reading = Wire.receive(); // receive high byte (overwrites previous reading) reading = reading << 8; // shift high byte to be high 8 bits reading += Wire.receive(); // receive low byte as lower 8 bits reading /= 10; Serial.println(reading); // print the reading } 我有改為 while (Wire.available()) // 一但抓到任何回傳都直接印出來 { reading = Wire.receive(); Serial.println(reading); // print the reading } 但測試半天依舊抓不到任何東西 EZ1超音波/ping/加速度計同時上去都沒問題, 但現在單接6352就怎麼弄都沒辦法 請各方高手幫幫忙吧 感激不盡 |
SDA/SCL 腳位 of Arduino mega is different w/ Arduino 2009 Do you check this? |
小黑屋|手機版|Archiver|機器人論壇 from 2005.07
GMT+8, 2025-4-11 12:02 , Processed in 0.132271 second(s), 12 queries , Apc On.
Powered by Discuz! X3.2
© 2001-2013 Comsenz Inc.