Arduino

คำถาม & คำตอบสำหรับนักพัฒนาซอฟต์แวร์และซอฟต์แวร์โอเพ่นซอร์สที่เข้ากันได้กับ Arduino

3
ฟังก์ชั่นสามารถเรียกใช้โดยอัตโนมัติเมื่ออินพุทเปลี่ยนแปลงได้หรือไม่?
ขณะนี้ร่างของฉันกำลังตรวจสอบพินอินพุตทุกครั้งที่วนรอบลูปหลัก หากตรวจพบการเปลี่ยนแปลงจะเรียกใช้ฟังก์ชันที่กำหนดเองเพื่อตอบสนองต่อการเปลี่ยนแปลงนั้น นี่คือรหัส (ตัดลงไปที่จำเป็น): int pinValue = LOW; void pinChanged() { //... } void setup() { pinMode(2, INPUT); } void loop() { // Read current input int newValue = digitalRead(2); // Has the input changed? if (newValue != pinValue) { pinValue = newValue; pinChanged(); } } น่าเสียดายที่สิ่งนี้ไม่ได้ทำงานอย่างถูกต้องเสมอไปสำหรับการเปลี่ยนแปลงสั้น ๆ ในอินพุต (เช่นพัลส์สั้น …
21 pins  interrupt  isr 

4
อายุการใช้งานที่แท้จริงของ EEPROM คืออะไร
ATMEL กล่าวว่าอายุการใช้งานเซลล์ของเซลล์ EEPROM อยู่ที่ประมาณ 100,000 รอบการเขียน / เซลล์ นี่เป็นสิ่งที่ EEPROM ทำงานจริงหรือไม่? ถ้าฉันไม่เปลี่ยนค่าของเซลล์สิ่งนี้จะทำให้เครียดตลอดชีวิตหรือไม่? ตัวอย่างเช่นถ้าผมเขียนค่า0xFFไปยังเซลล์เดียวกันอีกครั้งและอีกครั้งนี้จะแตกต่างจากการเขียนใด ๆ0x00, 0xFF, 0x00ฯลฯ
21 eeprom 


2
ทำไมบางพินถึงมีความถี่ PWM แตกต่างกัน?
อ้างอิงจากArduino สำหรับanalogWrite()ความถี่ PWM บนพินส่วนใหญ่คือ ~ 490 Hz อย่างไรก็ตามมันมีค่า ~ 980 Hz สำหรับหมุด 5 และ 6 บน Uno และสำหรับหมุด 3 และ 11 บน Leonardo ทำไมเหล่านี้แตกต่างกันอย่างไร มันเป็นคุณสมบัติการออกแบบโดยเจตนาหรือเป็นไปตามที่ฮาร์ดแวร์กำหนดไว้หรือไม่?

2
เหตุใดฉันจึงไม่สามารถประกาศคลาสในแท็บอื่นใน Arduino IDE ได้
ฉันต้องการย้ายโค้ดของฉันออกเป็นแท็บที่สองใน Arduino IDE เพื่อให้การจัดระเบียบดีขึ้น ตอนแรกฉันแค่ลองขยับฟังก์ชั่นเท่านั้นและมันก็ใช้ได้ดี ฉันสามารถเรียกใช้ฟังก์ชั่นจากsetup()ฟังก์ชั่นในแท็บหลักของฉันและไม่มีปัญหาในการรวบรวมหรืออัพโหลด อย่างไรก็ตามฉันพยายามใส่ทั้งคลาสลงในแท็บที่สองและทันใดนั้นมันก็ไม่ทำงานอีกต่อไป ตัวอย่างเช่น: แท็บ 1: TestClass obj; void setup() { obj.init(); } void loop() { //... } แท็บ 2: class TestClass { public: void init() { //... } }; เมื่อฉันพยายามรวบรวมสิ่งนี้มันทำให้ฉันมีข้อผิดพลาดดังต่อไปนี้: tab1:1: error: 'TestClass' does not name a type tab1.ino: In function 'void setup()': tab1:5: error: …

3
คลาสและวัตถุ: ฉันต้องใช้ไฟล์ประเภทใดและจำนวนเท่าใด
ฉันไม่เคยมีประสบการณ์กับ C ++ หรือ C มาก่อน แต่รู้วิธีเขียนโปรแกรม C # และเรียนรู้ Arduino ฉันต้องการจัดระเบียบภาพร่างของฉันและค่อนข้างสบายใจกับภาษา Arduino แม้จะมีข้อ จำกัด แต่ฉันอยากจะมีวิธีการเชิงวัตถุในการเขียนโปรแกรม Arduino ของฉัน ดังนั้นฉันเห็นว่าคุณสามารถมีวิธีต่อไปนี้ (ไม่ใช่รายการครบถ้วนสมบูรณ์) เพื่อจัดระเบียบรหัส: ไฟล์. ini ไฟล์เดียว; ไฟล์. in หลายไฟล์ในโฟลเดอร์เดียวกัน (ที่ IDE เรียกและแสดงเช่น "แท็บ") ไฟล์. io ที่มีไฟล์. h และ. cpp ที่รวมอยู่ในโฟลเดอร์เดียวกัน เหมือนข้างบน แต่ไฟล์เป็นไลบรารี่ที่ติดตั้งไว้ในโฟลเดอร์โปรแกรม Arduino ฉันยังได้ยินวิธีต่อไปนี้ แต่ยังไม่ได้ทำงาน: ประกาศคลาส C ++ ในไฟล์. ini ไฟล์เดียว (เคยได้ยิน …
20 programming  c++  class 

5
ฉันใช้ RAM มากเกินไป สิ่งนี้จะวัดได้อย่างไร
ฉันอยากรู้ว่าฉันใช้ RAM เท่าใดในโครงการเท่าที่ฉันสามารถบอกได้ว่าไม่มีวิธีการทำงานจริง ๆ (นอกเหนือจากการผ่านและคำนวณด้วยตนเอง) ฉันได้ขึ้นเวทีในโครงการที่ค่อนข้างใหญ่ซึ่งฉันตัดสินใจแล้วว่า RAM ของฉันหมด ฉันได้พิจารณาสิ่งนี้เพราะฉันสามารถเพิ่มหัวข้อและจากนั้นนรกทั้งหมดก็หลุดไปที่อื่นในรหัสของฉันโดยไม่มีเหตุผลที่ชัดเจน ถ้าฉันมี#ifndefอย่างอื่นมันก็ใช้งานได้อีก ไม่มีอะไรผิดปกติทางโปรแกรมกับรหัสใหม่ ฉันสงสัยว่าในขณะที่ฉันไปถึงจุดจบของ RAM ที่มีอยู่ ฉันไม่คิดว่าฉันใช้สแต็กมากเกินไป (แม้ว่าจะเป็นไปได้) วิธีที่ดีที่สุดในการพิจารณาจำนวนแรมที่ฉันใช้จริงคืออะไร เมื่อผ่านไปและพยายามที่จะทำงานออกมาฉันมีปัญหาเมื่อฉันไปหา enums และ structs; หน่วยความจำมีราคาเท่าใด แก้ไขครั้งแรก : นอกจากนี้ฉันได้แก้ไขร่างของฉันตั้งแต่เริ่มต้นสิ่งเหล่านี้ไม่ใช่ผลลัพธ์ที่แท้จริงที่ฉันได้รับในตอนแรก แต่เป็นสิ่งที่ฉันได้รับตอนนี้ text data bss dec hex filename 17554 844 449 18847 499f HA15_20140317w.cpp.elf 16316 694 409 17419 440b HA15_20140317w.cpp.elf 17346 790 426 18562 4882 HA15_20140317w.cpp.elf …
19 sram 

1
รีเซ็ต Arduino Uno ในรหัส
เป็นไปได้หรือไม่ที่จะรีเซ็ต Arduino (เช่นเพื่อรีบูต) จากโค้ด (เช่นจากร่างภาพ)? ฉันรู้ว่าเป็นไปได้ด้วยวงจรพิเศษ แต่มีโอกาสที่จะทำให้มันเป็นเพียงแค่รหัส? ด้านล่างเป็นรหัสของฉันและความคิดเห็น//resetเป็นที่ที่ฉันต้องการบังคับให้รีเซ็ต #include <TrueRandom.h> int i; int randSeed; long randNumber; void setup(){ Serial.begin(9600); Serial.println("20 pseudo Zufallszahlen:"); for (i=1;i<=20;i++) Serial.print(random(10)); Serial.println(); Serial.println(); //randomSeed(TrueRandom.random()); randSeed = analogRead (A0); randomSeed(randSeed); Serial.print("Der 'seed' Wert: "); Serial.println(randSeed); Serial.println(); Serial.println("20 Zufallszahlen mit analogem 'seed' Wert:"); for (i=1;i<=20;i++) Serial.print(random(10)); Serial.println(); Serial.println("---------------------------"); …

1
ATtiny85: การใช้พลังงานเทียบกับความเร็วสัญญาณนาฬิกา
สั้นและง่าย: การใช้พลังงานสำหรับ ATtiny85 ทำงานที่ 1 MHz และ 8 MHz โดยใช้นาฬิกาภายในคืออะไร ไม่ได้ใช้โหมดสลีปใด ๆ ฉัน googled มากและไม่สามารถหาข้อมูลใด ๆ เกี่ยวกับเรื่องนี้ ฉันถามเพราะฉันต้องการทราบว่าควรใช้ 1 MHz เพื่อเพิ่มอายุการใช้งานแบตเตอรี่หรือไม่
19 power  attiny 

4
รูปแบบและวิธีปฏิบัติที่ดีที่สุดของโปรโตคอลการสื่อสาร
ทุกครั้งที่ฉันออกแบบโพรโทคอลอนุกรมที่จะใช้ระหว่างสอง Arduino ฉันรู้สึกบิตเหมือนฉัน reinventing ล้อ ฉันสงสัยว่ามีวิธีปฏิบัติที่ดีที่สุดหรือรูปแบบที่ผู้คนติดตาม คำถามนี้น้อยเกี่ยวกับรหัสจริง แต่เพิ่มเติมเกี่ยวกับรูปแบบของข้อความ ตัวอย่างเช่นถ้าฉันต้องการบอกให้อาร์ดิโนแฟลชมันเป็น LED ครั้งแรก 3 ครั้งฉันอาจส่ง: ^L1,F3\n '^': เริ่มคำสั่งใหม่ 'L': กำหนดคำสั่ง (L: กำหนดเป้าหมายคำสั่งนี้เป็น LED) '1': กำหนดเป้าหมาย LED แรก ',': ตัวคั่นบรรทัดคำสั่งค่าใหม่ในข้อความนี้เพื่อติดตาม 'F': คำสั่งย่อยของ Flash '3': 3 ครั้ง (แฟลช LED สามครั้ง) '\ n': จบคำสั่ง คิด? คุณมักจะเขียนโปรโตคอลอนุกรมใหม่อย่างไร ถ้าฉันต้องการส่งแบบสอบถามจาก arduino 1 ถึง arduino 2 แล้วรับการตอบกลับ
19 serial 

13
การอัปโหลด Arduino Nano ให้ข้อผิดพลาด: avrdude: stk500_recv (): โปรแกรมเมอร์ไม่ตอบสนอง
ฉันมีArduino Nano (Sainsmart)ที่ฉันพยายามอัพโหลดภาพร่าง ภายใต้ Arduino IDE Arduino Nano w/ ATmega328อุปกรณ์ที่เลือกเป็น อย่างไรก็ตามการอัพโหลดภาพร่างทำให้ฉันมีข้อผิดพลาด avrdude: stk500_recv(): programmer is not responding ฉันลองทั้งพอร์ต USB ( /dev/tty.usbserial& /dev/cu.usbserial) แต่ข้อผิดพลาดเดิมยังคงอยู่ Arduino เชื่อมต่อกับ Macbook Air ผ่านสาย USB และPWRไฟแสดงสถานะ LED บน Arduino เปิดอยู่และLไฟแสดงสถานะ LED กะพริบ ไม่มีปัญหาในการอัปโหลดไปยัง Arduino Uno ลองหลังจากติดตั้งไดรเวอร์ FTDI ล่าสุด (Mac OSX, x64, v2.2.18, FTDIUSBSerialDriver_10_4_10_5_10_6_10_7.mpkg) จากhttp://www.ftdichip.com/Drivers/VCP.htm อย่างไรก็ตามมันก็ไม่ได้ช่วยอะไร มีอะไรผิดพลาดหรือเปล่า?

2
Arduino Pro Mini (เวอร์ชั่น 3.3V) ช่วงแรงดัน / ความอดทนของอินพุต
ฉันมี Arduino Pro Mini clone (จีนน้อยราคาถูก) และต้องการจ่ายไฟให้กับแหล่งจ่ายไฟ 12V (เช่นเดียวกับแรงดันไฟฟ้าของพัดลม) ตามข้อมูลจำเพาะของ Arduino Pro Miniขา RAW สามารถใช้ 3.35-12V (รุ่น 3.3V) ในทางปฏิบัตินี่หมายถึง 12V PSU ไม่สามารถใช้งานได้เนื่องจากเกือบตลอด 12V ที่มีโหลดต่ำ ฉันอ่านว่าตัวควบคุมแรงดันไฟฟ้าในบอร์ดนี้มีความสามารถสูงถึง 16V อินพุต ฉันลองเสียบอะแดปเตอร์ไฟ 12V ราคาถูกที่อ่าน 15.1V โดยไม่โหลด แต่มีส่วนประกอบบนบอร์ด arduino clone ระเบิดจริง ๆ ทันที บอร์ดดูเหมือนว่าจะยังคงทำงานเมื่อขับเคลื่อนจากโปรแกรมเมอร์ usb ส่วนประกอบที่ทำให้หมดไปนั้นอยู่เหนือหมุด VCC, RST และ GND ทำไมสิ่งนี้ถึงเกิดขึ้น ฉันเพิ่งเกิดความเสียหายและที่สำคัญที่สุดคือระดับแรงดันไฟฟ้าที่ปลอดภัยที่จะใช้คืออะไร ฉันมีอุปกรณ์จ่ายไฟแบบสวิตชิ่ง 12V อยู่สองสามตัวมันน่าเสียดายถ้าฉันไม่สามารถใช้งานได้ …

3
โปรแกรม Arduino จะทำงานเมื่อทำงานเป็นรูทเท่านั้น
การอัพโหลดภาพร่างอย่างง่ายดูเหมือนว่าจะทำงานเมื่อฉันเรียกใช้โปรแกรม Arduino ในฐานะรูท ( sudo) ฉันต้องการเรียกใช้ในฐานะผู้ใช้ทั่วไป มีใครประสบปัญหาเดียวกันก่อนและแก้ไขหรือไม่ นี่คือสิ่งที่ฉันได้รับจากlsusb: $ lsusb Bus 002 Device 022: ID 2341:0043 Arduino SA Uno R3 (CDC ACM) และระบุโปรแกรม Arduino /dev/ttyACM0เป็น นี่คือการอนุญาต: $ ls -l /dev/ttyACM0 crw-rw---T 1 root dialout 166, 0 Mar 14 22:03 /dev/ttyACM0 นี่คือผลลัพธ์จาก id groups=1000(abhiram),20(dialout),24(cdrom),25(floppy),29(audio), 30(dip),44(video),46(plugdev),105(scanner),110(bluetooth),112(netdev) เมื่อฉันอัปโหลดภาพร่างจากตัวอย่างในฐานะผู้ใช้ทั่วไปฉันพบข้อผิดพลาดนี้: avrdude:stk500_recv(): programmer not responding ข้อเสนอแนะใด …

2
การวนซ้ำไม่สิ้นสุดภายในลูป () จะทำงานเร็วขึ้นหรือไม่
เมื่อคุณเขียนแบบร่างโดยทั่วไปคุณจะต้องพึ่งพาloop()การถูกเรียกซ้ำ ๆ ตราบใดที่ Arduino ยังทำงานอยู่ การย้ายเข้าและออกจากloop()ฟังก์ชั่นจะต้องแนะนำค่าใช้จ่ายเล็กน้อย เพื่อหลีกเลี่ยงปัญหานี้คุณอาจสร้างวงวนไม่สิ้นสุดของคุณเองเช่นนี้ void loop() { while (true) { // do stuff... } } นั่นเป็นวิธีที่ทำงานได้เพื่อปรับปรุงประสิทธิภาพหรือไม่ มันจะทำให้เกิดปัญหาอื่น ๆ ไหมถ้าloop()ไม่กลับมา?

2
ทำไมฉันไม่สามารถอัพโหลดภาพร่างได้ในขณะที่ส่วนประกอบ / อุปกรณ์อื่นเชื่อมต่อกับ Uno ของฉัน
ฉันต้องการสร้างวงจรที่ค่อนข้างเรียบง่ายซึ่งจะทำการแฟลชชุด LED ตามลำดับโดยใช้ Arduino Uno ของฉัน (โดยเฉพาะเจาะจงมากขึ้นนั่นคือโคลน SainSmart) ฉันเขียนสเก็ตช์ของฉันและมันก็คอมไพล์แล้ว หลังจากนั้นฉันเชื่อมต่อตัวต้านทาน 8 LEDS + กับพิน 0 ถึง 7 แล้วเชื่อมต่อ Uno เข้ากับคอมพิวเตอร์ของฉันผ่าน USB ฉันเคยอัปโหลดภาพร่างสำเร็จแล้วดังนั้นฉันจึงมั่นใจว่าการตั้งค่าและไดรเวอร์อื่น ๆ ของฉันนั้นถูกต้อง อย่างไรก็ตามเมื่อฉันพยายามอัพโหลดภาพร่างของฉันในครั้งนี้มันไม่ทำงาน ฉันพยายามลบทุกอย่างที่ฉันเชื่อมต่อกับหมุดของ Arduino และทันใดนั้นการอัปโหลดก็ใช้งานได้อีกครั้ง ทำไมสิ่งนี้ถึงเกิดขึ้น มันหมายความว่าฉันต้องตัดการเชื่อมต่อทุกสิ่งออกจากกระดานทุกครั้งที่ฉันอัพโหลดภาพร่าง?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.