Arduino

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

2
Arduino Sketch จะรวบรวมโดยตรงกับ GCC-AVR หรือไม่
เอาล่ะเราทุกคนได้เห็นคำถามเหล่านั้นทั่วทั้งเว็บเช่น Arduino vs C ++ หรือคำถามที่คล้ายกันอื่น ๆ และคำตอบส่วนใหญ่ไม่ได้สัมผัสความแตกต่างในการรวบรวมนอกเหนือจากข้อมูลที่เป็นนามธรรม คำถามของฉันมีจุดมุ่งหมายเพื่อแก้ไขความแตกต่างที่เกิดขึ้นจริง (ไม่ใช่การกำหนดค่าตามความชอบ) ในการเปลี่ยนชื่อไฟล์. ori เป็นไฟล์. cpp หรือนามสกุลไฟล์อื่น ๆ ที่คล้ายกันสำหรับ c ++ จะรวบรวมโดยใช้ GCC-AVR ฉันรู้ว่าอย่างน้อยคุณต้องรวมไฟล์ส่วนหัวของ Arduino แต่นอกเหนือจากนั้นสิ่งที่จะทำให้เกิดข้อผิดพลาดในการรวบรวมถ้ารวบรวมกล่าวว่า. ini ไปยังไฟล์. cpp โดยใช้พูดเช่น GCC-AVR เพื่อความเรียบง่ายลองใช้ตัวอย่างการกะพริบแบบคลาสสิคเพื่ออธิบายความแตกต่าง หรือหากคุณมีข้อมูลโค้ดที่ดีกว่าในการใช้โปรดรวมตัวอย่างไว้ในคำตอบและอธิบายความแตกต่างอย่างละเอียด โปรดอย่าแสดงความคิดเห็นว่าวิธีใดเป็นวิธีที่ดีกว่าหรือเครื่องมือที่จะใช้ FYI ฉันใช้ Platformio เพื่อการพัฒนาและฉันสังเกตเห็นกระบวนการแปลงที่เกิดขึ้นเบื้องหลังในระหว่างการรวบรวม ฉันพยายามเข้าใจสิ่งที่เกิดขึ้นจริงที่นั่นดังนั้นเมื่อฉันรหัสใน Arduino ฉันเข้าใจรุ่น C ++ ที่ "บริสุทธิ์" เช่นกัน ขอบคุณสำหรับคำตอบที่รอบคอบของคุณสำหรับคำถามของฉันล่วงหน้า

2
ความแตกต่างระหว่าง / dev / ttyACM0 และ / dev / ttyS0 (พอร์ต Arduino IDE ภายใต้ Linux)
ฉันใช้ Arduino IDE เพื่ออัพโหลดภาพร่างไปยัง Arduino Uno ของฉัน ระบบปฏิบัติการของฉันคือ Linux Ubuntu 14.04 LTS Arduino IDE มีสองพอร์ตโดยค่าเริ่มต้นสำหรับการสื่อสารกับ Arduino Uno: /dev/ttyACM0 /dev/ttyS0 ความแตกต่างระหว่างสองพอร์ตเหล่านี้คืออะไร? "ACM0" และ "S0" หมายถึงอะไร มีไฟล์กำหนดค่าในโครงสร้างโฟลเดอร์ OS ที่อธิบายพารามิเตอร์ของพอร์ตเหล่านี้หรือไม่? ฉันรู้ว่าเมื่อฉันเลือก/dev/ttyACM0ฉันสามารถส่งข้อมูลไปยัง Arduino Uno ของฉันได้ /dev/ttyS0แต่มันไม่ทำงานเมื่อฉันเลือก ฉันแค่อยากเข้าใจว่าพอร์ตเหล่านี้คืออะไรกันแน่

4
การเลือกเทคโนโลยีไร้สายเพื่อให้เกิดความล่าช้าน้อยที่สุด
ฉันกำลังร่างโครงการตอบคำถามในผับที่ผู้ตัดสินให้สัญญาณและผู้เล่นหลายคนกดปุ่มของพวกเขา คนแรกที่ชนะจะได้สิทธิ์ในการตอบคำถาม ฉันต้องการปุ่มทั้งหมด (ผู้เล่นผู้ตัดสิน + X) เป็นไร้สาย เนื่องจากผู้เล่นคำถามที่ดีที่สุดสามารถคลิกปุ่มภายในระยะ 10 มิลลิวินาทีของสัญญาณมันเป็นสิ่งสำคัญมากที่มีความแปรปรวนน้อยมากในการ ping ระหว่างปุ่มที่แตกต่างกัน ฉันไม่สามารถให้ผู้เล่นตะโกนว่า "ปุ่มของฉันล้าหลัง!" ในทางกลับกันฉันไม่ต้องการใช้เทคโนโลยีราคาแพง / ซับซ้อนกว่าที่ต้องการ ดังนั้นเทคโนโลยีไร้สายที่เหมาะสมที่สุดที่จะใช้คืออะไร กรุณาแบ่งปันประสบการณ์ของคุณจากโครงการที่คล้ายกัน (หรือเพียงแค่ความรู้เชิงทฤษฎี :) นี่คือสิ่งที่ฉันค้นคว้ามาแล้ว (แก้ไขฉันถ้าฉันผิด): บลูทู ธ 4 LE (เหมือนใน RFduino) ข้อดี: เวลาแฝง 3-6ms (โฆษณา), พลังงานต่ำข้อเสีย: ค่าใช้จ่าย, ไม่เกิน 7 ปุ่มไปยังอุปกรณ์ ข้อดีของ Wi-Fi: เวลาในการตอบสนอง 2 มิลลิวินาที (ฉันเพิ่งส่ง Ping ไปที่เราเตอร์ Wi-Fi ของฉัน) ปุ่มหลายสิบปุ่มหากจำเป็นต้องมีข้อเสีย: ค่าใช้จ่ายหิวพลังงาน …

1
การจำลองอุปกรณ์ 1 เส้น
สิ่งที่ฉันต้องการทำคือทำให้ ATTiny IC กลายเป็นทาสบนบัส 1 สายพร้อม S / N ของตัวเองและรายการคำสั่งสำหรับฟังก์ชั่นเฉพาะ สิ่งที่ฉันอยากรู้คือถ้าฉันสามารถใช้ห้องสมุดสายเดียวจากเว็บไซต์ arduino เพื่อส่งข้อมูลเป็นทาส ตัวอย่างเช่นคุณสามารถมีทาสได้ในห้องเดียวที่มีเซ็นเซอร์หลายประเภทซึ่งจะรายงานต่อนายเกี่ยวกับข้อมูลที่ร้องขอหรือผู้ควบคุมสามารถบอกให้ควบคุมสิ่งที่คล้ายกับผ้าม่าน คำถาม ฉันต้องตรวจสอบรถประจำทางและตอบสนองต่อคำขอจากต้นแบบและคำนึงถึงวิธีที่เซ็นเซอร์ปกติจะส่งข้อมูลหรือไม่ ฉันควรใช้ทาสในความถี่ใดเพื่อให้ได้ฟังก์ชันการทำงานที่ดีที่สุด ฉันจะไม่ใช้พลังงานกาฝากเป็นบันทึก

2
เพิ่มความละเอียดบิต PWM
ฉันต้องการเพิ่มความละเอียดบิต PWM ของ Arduino Uno ในขณะนี้มันมี 8 บิตซึ่งฉันถือว่าต่ำเกินไป เป็นไปได้โดยไม่สูญเสียความสามารถในการขัดจังหวะและล่าช้าหรือไม่ Koen แก้ไขการตั้งค่านี้ให้ผลลัพธ์แบบ 16 บิต void setupPWM16() { DDRB |= _BV(PB1) | _BV(PB2); /* set pins as outputs */ TCCR1A = _BV(COM1A1) | _BV(COM1B1) /* non-inverting PWM */ | _BV(WGM11); /* mode 14: fast PWM, TOP=ICR1 */ TCCR1B = _BV(WGM13) | _BV(WGM12) …
10 arduino-uno  pwm 

1
วิธีรีเซ็ต Arduino จากซอฟต์แวร์
อย่างที่คุณทราบ Arduino IDE จะรีเซ็ต Arduino เมื่อเปิด Serial Monitor ฉันต้องการโปรแกรมของฉันด้วย แต่ฉันไม่รู้ ฉันตรวจสอบซอร์สโค้ดของ Arduino IDE (Serial.java & SerialMonitor.java) แต่ฉันไม่สามารถหาตำแหน่งที่จะส่งคำสั่งรีเซ็ตได้ มันอยู่ที่ไหน? ฉันใช้ C # เพื่อสื่อสารกับซีเรียล
10 serial  reset 

1
การตั้งค่า timer3 ในโหมด CTC - ขัดแย้งกับไลบรารีเซอร์โว
ฉันต้องการตั้งค่าตัวจับเวลาเพื่อเรียกใช้ฟังก์ชัน 800 ครั้งต่อวินาที ฉันใช้ Arduino Mega และ Timer3 กับ prescaler ที่ 1024 เพื่อเลือกตัวประกอบ prescaler ที่ฉันได้พิจารณาขั้นตอนต่อไปนี้: CPU ความถี่: 16MHz ความละเอียดตัวจับเวลา: 65536 (16 บิต) ความถี่แบ่ง CPU โดย prescaler เลือก: 16x10 ^ 6/ 1024 = 15625 แบ่งส่วนที่เหลือผ่านความถี่ที่ต้องการ 62500/800 = 19 ใส่ผลลัพธ์ + 1 ในการลงทะเบียน OCR3 ฉันใช้ตารางต่อไปนี้เพื่อตั้งค่าการลงทะเบียนของ TCCR3B: ข้อผิดพลาด ไม่สามารถคอมไพล์โค้ดได้ นี่เป็นข้อผิดพลาดที่คอมไพเลอร์ส่งคืน: Servo \ Servo.cpp.o: …

1
การนับพัลส์ด้วยการขัดจังหวะ
ฉันพยายามนับพัลส์จากคลื่นสี่เหลี่ยม 12,500 Hz เพื่อกระตุ้นการส่งออก นี่คือรหัสที่ฉันมี เมื่อรีเซ็ต Arduino แล้วมันจะพิมพ์ 315 ไปยังซีเรียลในตัวอย่าง 25 มิลลิวินาที 315 x 40 = 12600 ซึ่งดูเหมือนว่าฉันจะทำงานได้อย่างสมบูรณ์ ปัญหาเดียวของฉันคือมันคืนค่าหมายเลขนี้เพียงครั้งเดียวเมื่อรีเซ็ตบอร์ด ตอนนี้ถ้าฉันย้ายรหัสเดียวกันนั้นลงไปvoid loopมันนับได้ว่าให้ผลตอบแทนที่ไม่แน่นอน ฉันไม่เข้าใจสิ่งที่ฉันต้องใส่ในส่วนวนซ้ำเพื่อให้ฉันสามารถนับซ้ำ ๆ ได้อย่างถูกต้องและนับจำนวนการสลับของขาอินพุตที่ฉันได้รับในช่วงระยะเวลาหนึ่ง สัญญาณเฮิรตซ์หรือไม่ volatile int IRQcount; int pin = 2; int pin_irq = 0; //IRQ that matches to pin 2 void setup() { // Put your setup code …
10 interrupt 

3
วิธีการเรียกฟังก์ชั่น C จากร่าง Arduino?
ฉันอยากจะรู้ว่ามีวิธีการเรียกฟังก์ชั่นที่มีอยู่ในไฟล์ C โดยใช้ร่าง Arduino หรือไม่? ไฟล์ C ของฉันประกาศและกำหนดฟังก์ชั่น เพื่อบันทึกการกำหนดฟังก์ชั่นยุ่งไว้ในร่าง Arduino ของฉันฉันต้องการที่จะเรียกฟังก์ชั่นตรงจากร่าง มีวิธีมาตรฐานในการทำเช่นนี้โดยใช้ Arduino และ C? นี่คือร่าง: #include "crc16.h"; void setup(){ } void loop(){ CalculateCRC16("<09M", 4); } และนี่คือไฟล์ C ที่ถูกตัดทอน: #include <stdio.h> #include <stdint.h> uint16_t crctable[256] = { 0x0000, 0x1189,..... uint16_t // Returns Calculated CRC value CalculateCRC16( // Call example CalculateCRC16("<09M", …

4
Arduino motor shield การใช้พินสีส้ม / ขาว
ฉันมีตัวป้องกันมอเตอร์ Arduino เช่นนี้เสียบเข้ากับบอร์ด Mega ของฉัน ฉันต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับบล็อคสีส้มและสีขาวบนกระดาน เว็บไซต์ Arduinoมีข้อมูลต่อไปนี้ แต่ก็ไม่ได้ให้คำอธิบายในสิ่งที่ดีที่สุดคือการใช้พวกเขาสำหรับหรือที่ขาถูกแมปกับข้อมูลที่หมุด ฯลฯ ตัวเชื่อมต่อ TinkerKit สำหรับอินพุตแบบอะนาล็อกสองตัว (สีขาว) เชื่อมต่อกับ A2 และ A3 ตัวเชื่อมต่อ TinkerKit สำหรับเอาต์พุต Aanlog สองอัน (เป็นสีส้มตรงกลาง) เชื่อมต่อกับเอาต์พุต PWM บนพิน D5 และ D6 TinkerKit คอนเน็กเตอร์สำหรับอินเตอร์เฟส TWI (สีขาวมี 4 พิน) ตัวหนึ่งสำหรับอินพุทและอีกตัวสำหรับเอาท์พุท สิ่งที่ฉันต้องการทำคือเชื่อมต่อเซอร์โวกับบอร์ดและหวังว่าฉันจะสามารถใช้OUTบล็อกส้มอันใดอันหนึ่งได้ ฉันไม่ได้ประสบความสำเร็จในการหาตัวอย่างของเรื่องนี้ซึ่งทำให้ฉันสงสัยว่ามันเป็นไปได้หรือไม่ ฉันจะเสียบมัน แต่ฉันกลัวการทอดโล่ / mega / servo อาจเป็นความกลัวอย่างไม่มีเหตุผล แต่ฉันไม่สามารถจ่ายได้อีกในขณะนี้! ฉันไม่ทราบว่าหมุดใดในบล็อกที่กำหนดให้กับข้อมูล, vcc และ …
10 pins  shields  motor 

3
ใครช่วยอธิบายรหัสที่ดูแปลก ๆ นี้ใช้ในการตั้งค่าเครื่องจับเวลา
ในขณะที่ดูภาพร่างที่คนอื่นเขียนฉันอาจเจอโค้ดที่มีลักษณะดังนี้: TCCR1A = 0; TCCR1B = 0; TCNT1 = 34286; TCCR1B |= (1 << CS12); TIMSK1 |= (1 << TOIE1); ทั้งหมดที่ฉันรู้ก็คือมันมีบางอย่างที่เกี่ยวกับเวลา / ตัวจับเวลา (ฉันคิดว่า) ฉันจะถอดรหัส - และสร้าง - รหัสเช่นนี้ได้อย่างไร อะไรคือTCCR1A, TCCR1B, TCNT1, CS12, TIMSK1และTOIE1?

2
ฉันควรใช้ทรานซิสเตอร์ mosfet และควรใช้รีเลย์เมื่อใด [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Arduino Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ฉันคุ้นเคยกับรีเลย์บางตัวและมีประโยชน์โดยเฉพาะอย่างยิ่งสำหรับโหลดขนาดใหญ่เช่นหลอดไส้หรืออุปกรณ์ AC 120V อื่น ๆ อย่างไรก็ตามดูเหมือนว่า overkill จะใช้รีเลย์สำหรับพวงของ LED ที่เชื่อมโยงกัน (ขนาน) ที่ใช้ 60 mA (มากเกินไปสำหรับ Arduino) นอกจากนี้มันจะไม่ทำงานหากคุณต้องการเปิด / ปิดบ่อยหรือทำ PWM ฉันเคยได้ยินเกี่ยวกับทรานซิสเตอร์และมอสเฟตและรู้เกี่ยวกับพวกเขาบ้างเล็กน้อย เมื่อใดที่ฉันควรใช้แต่ละคนและฉันจะรู้ได้อย่างไรว่าจะได้รับประเภทใด นอกจากนี้ดูเหมือนว่ารีเลย์อาจมีราคาแพงกว่าทรานซิสเตอร์ / มอสเฟต แก้ไข:ฉันจะใช้สิ่งเหล่านี้กับ Arduino ของฉันได้อย่างไร

1
ทำไมต้องต่อไดโอดระหว่างขาตั้งค่า Arduino และ 555
ฉันพยายามที่จะสร้างโดยใช้เวลาจ้องจับผิด 555 IC และฉันต่อไปนี้ ฉันไม่เข้าใจว่าทำไมไดโอด 1N4148 เชื่อมต่อระหว่างขารีเซ็ตของ Arduino และเอาท์พุทของตัวจับเวลา 555 เท่าที่ฉันเข้าใจขาตั้งของ Arduino ควรสูงและเมื่อมันถูกดึงต่ำ Arduino ก็จะรีเซ็ต แต่ทำไมเราต้องเพิ่มไดโอดตรงนี้ มันมีจุดประสงค์อะไร

2
มีทางเลือกที่ไม่ใช่ลอยเพื่อ pow ()?
ฉันได้ทำการอ้างอิงภาษา LANGUAGE ในเว็บไซต์ Arduinoและฉันไม่สามารถหาสิ่งที่ไม่เทียบเท่ากับที่pow() ฉันจะต้องหายไปบางสิ่งที่ใหญ่ แต่สำหรับชีวิตของฉันฉันนิ่งงัน! ฉันพบpow()ในคอลัมน์ FUNCTIONS ใต้หัวข้อ Math (เหมือนที่ฉันคาดไว้) แต่มันบอกว่าทั้งพารามิเตอร์ [base] และ [exponent] เป็นทั้งคู่ (float) และมีเพียงหกรายการอื่น ๆ ภายใต้หัวข้อคณิตศาสตร์; ดูเหมือนว่าพวกเขาจะไม่เป็นรุ่นจำนวนเต็ม สิ่งที่ฉันต้องการทำคือสร้างพลังของ 2 โดยใช้เลขชี้กำลังจาก 0 ถึง 10 เช่น 2 ^ 0 = 1 จากนั้น 2 ^ 1 = 2 จากนั้น 2 ^ 2 = 4 จากนั้น 2 ^ 3 = …

4
เปิด Arduino ด้วยตัวจับเวลาทุก 24 ชั่วโมง
ขณะนี้ฉันกำลังทำงานในโครงการ Arduino ที่ส่งการชาร์จแบตเตอรี่รถยนต์ของฉันวันละครั้งผ่าน ESP8266 ให้ฉัน ในช่วงฤดูหนาวฉันไม่ได้ขับรถและฉันอยากได้รับแจ้งเมื่อแบตเตอรี่มีค่าเกินกว่าค่าวิกฤตดังนั้นฉันจึงสามารถชาร์จและป้องกันความเสียหายได้ ดังนั้นประสิทธิภาพการใช้พลังงานจึงเป็นสิ่งสำคัญสำหรับโครงการดังนั้นจึงไม่ปล่อยแบตเตอรี่ออกมาเอง ฉันอ่านมากเกี่ยวกับโหมดสลีปตัวควบคุมแบบดรอปดาวน์ที่มีประสิทธิภาพ ฯลฯ สิ่งเหล่านี้มีเหมือนกันกับตัวควบคุมแรงดันไฟฟ้าทำงานอยู่ตลอดเวลาซึ่งไม่ใช่สิ่งที่ฉันต้องการ ฉันกำลังมองหา "วงจรสวิตช์ตัวจับเวลา" มันควรจะนับถอยหลัง 24 ชั่วโมงแล้วเปิดรีเลย์หรือ MOSFET ซึ่งเชื่อมต่อตัวควบคุมแรงดันไฟฟ้าเข้ากับพลังงานและเมื่อเปิด Arduino และ ESP8266 เมื่อ Arduino เสร็จสิ้นการส่งสัญญาณมันจะรีเซ็ตตัวจับเวลาซึ่งจะตัดการเชื่อมต่อตัวควบคุมแรงดันไฟฟ้าจากพลังงานและอื่น ๆ แน่นอนวงจรจับเวลาควรใช้พลังงานน้อยมากเท่านั้น ไม่มีใครรู้วงจรเช่นนั้นหรือไม่? ฉันค้นหาAliExpressด้วยคำศัพท์ทั้งหมดที่อยู่ในใจของฉันไม่ประสบความสำเร็จ หรืออาจเป็น IC ที่สามารถใช้ (ง่าย) ในการสร้างวงจรดังกล่าว?
9 power  timers  relay 

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