國立成功大學

Arduino ATtiny接紅外線和伺服馬達問題

7月11日 13:17
如題,暑假無聊想做一個用電視遙控器遙控的小機器,小機器收到紅外線之後經過ATtiny85再讓伺服馬達轉動。 以下是我的code: #include<IRremote.h> #include <Servo.h> Servo myservo; IRrecv irrecv(2); decode_results results; void setup() { myservo.attach(5); irrecv.enableIRIn(); } void loop() { if(irrecv.decode(&results)) { if(results.value==2105377915) { myservo.write(180); delay(900); myservo.write(0); } } irrecv.resume(); delay(100); } 但是卻在燒錄進ATtiny85時出現以下錯誤: Documents\Arduino\libraries\Arduino-IRremote-master\src/IRReceive.cpp.h:1390:9: error: 'Serial' was not declared in this scope Serial.println( ^~~~~~ 試著將Library裡面所有Serial.println刪掉之後,卻出現更多錯誤 上網爬過文之後發現似乎是有關IRremote和Servo兩個library的timer有關。希望各位大神可以幫幫忙m(_ _)m
1
回應 10
文章資訊
Logo
每月有 4 則貼文
共 10 則留言
Attiny85 本身沒有 Hardware UART ,自然就不能用 Serial,換一個有 UART 的 Attiny 試試看吧。 若對嵌入式系統有底子的話,可以試試看改 IR Lib 用 Software UART 看看,但我認為保險一點還是換個 chip 比較快。 UART Lib 可靠度: Hardware Serial > 非SoftSerial Lib > SoftSerial
但 Attiny85 可以用在 IR 和 Servo 上,我查了一下別人使用 Servo8bit 這個 Lib 控制 Servo 的,你要不也試試看? 然後 delay(100) 改用 millis() 的方式 計時 static long unsigned t = millis(); if (millis() - t < 90) { //other code t = millis(); }
原 PO - 國立成功大學
B2 感謝你的指導!我會試試看的
B3 最後有解決嗎?
原 PO - 國立成功大學
B4 我打算先嘗試ATtiny85跟紅外線感測器的整合,而網路上看到一篇網站,說明只要把紅外線的library跟core換成他提供的檔就可以讓ATtiny85跟紅外線感測器溝通:
但是我目前就卡在裝core時不知道他的board.txt要如何改?(裝core的步驟在網站中的Step 4 troubleshooting)
B5 去找 ARDUINO IDE 放開發板源碼的地方,/arduino15/packages/hardware/ 這個文件夾裡面會有Attiny85的board.txt
原 PO - 國立成功大學
B6 他在他的core的README裡面這樣寫的
說要去更改upload.tool的元素 而這是我要使用的core
我看過arduino15的boards.txt了 但是那行改來改去 IDE上面的Programmmer還是顯示“No programmer available for this board“
求解大神!這邊應該是我最後幾個難關了
B7 Programmers 和 Arduino15 裡的東西是不同的,Arduino15 放的是燒進 Arduino 的 Firmware,Programmer 是跟 Firmware 燒錄時進行溝通的 Bootloader 有關。 即使不能選擇 programmer,那還能燒錄給 Attiny85 嗎? 有用 UART轉TTL 燒錄應該沒問題,avrdude 是一個常用的燒錄工具,會把 hex file 另加些指令輸入給開發板上。
抱歉我手上沒有 Attiny85 的板子,無法幫你測試,但我這邊裝了一下 lib 和 AttinyCore 來編譯 IRremote 和 Servo 的 sketch,我是可以 compile,這邊給你步驟: 1. 我是使用 AttinyCore 的 firmware,這應該沒有大問題,改一下 Arduino IDE 的開發板 source,然後去開發板管理器下載就行。 Git:
2. Servo lib 我使用 Servo8bit,下載下來直接丟 arduino/libraries 就可以了,記得 sketch 要改啊。 Git:
3. IR remote 我用 Arduino 程式庫提供的 IR remote,不會有 Serial 的問題。 修改後的 sketch: #include<IRremote.h> #include <Servo8Bit.h> Servo8Bit myservo; IRrecv irrecv(2); decode_results results; void setup() { myservo.attach(5); irrecv.enableIRIn(); } void loop() { if(irrecv.decode(&results)) { if(results.value==2105377915) { myservo.write(180); delay(900); myservo.write(0); } } irrecv.resume(); delay(100); } 照理講應該可以 compile,你試試看吧。
原 PO - 國立成功大學
B9 感謝你的幫忙...雖然我還是用不出來,在燒錄進Attiny85時會出現各種錯誤,再加上接下來我也要開始忙其他事務,所以我暫時先放棄了 不過還是感謝你的幫忙啦!下次有時間我會繼續做做看的