สารบัญ:

ROBOCAR ที่ควบคุมด้วยรีโมท INFRA RED โดยใช้ AVR (ATMEGA32) MCU: 5 ขั้นตอน
ROBOCAR ที่ควบคุมด้วยรีโมท INFRA RED โดยใช้ AVR (ATMEGA32) MCU: 5 ขั้นตอน

วีดีโอ: ROBOCAR ที่ควบคุมด้วยรีโมท INFRA RED โดยใช้ AVR (ATMEGA32) MCU: 5 ขั้นตอน

วีดีโอ: ROBOCAR ที่ควบคุมด้วยรีโมท INFRA RED โดยใช้ AVR (ATMEGA32) MCU: 5 ขั้นตอน
วีดีโอ: IR remote controlled vehicle robot with ATmega32 2024, กรกฎาคม
Anonim
ROBOCAR ที่ควบคุมด้วยรีโมท INFRA RED โดยใช้ AVR (ATMEGA32) MCU
ROBOCAR ที่ควบคุมด้วยรีโมท INFRA RED โดยใช้ AVR (ATMEGA32) MCU

PROJECT ปัจจุบันอธิบายถึงการออกแบบและการใช้งาน RoboCar ที่ควบคุมด้วยรีโมทอินฟราเรด (IR) ซึ่งสามารถใช้กับแอพพลิเคชั่นควบคุมอัตโนมัติแบบไร้คนขับได้หลายแบบ ฉันได้ออกแบบ RoboCar ที่ควบคุมจากระยะไกล (การเคลื่อนไหวซ้าย-ขวา/หน้า-หลัง) ระบบทั้งหมดใช้ไมโครคอนโทรลเลอร์ (Atmega32) ที่ทำให้ระบบควบคุมฉลาดขึ้นและปรับเปลี่ยนได้ง่ายสำหรับแอปพลิเคชันอื่น ช่วยให้ผู้ใช้สามารถสั่งการหรือควบคุม RoboCar และสั่งงานสวิตช์ไฟหลักได้ในระยะประมาณ 5 เมตร

คำสำคัญ: ตัวถอดรหัส IR, ไมโครคอนโทรลเลอร์ AVR (Atmega32), รีโมทคอนโทรลทีวี, การสื่อสารไร้สาย

_

ขั้นตอนที่ 1: การสื่อสารภายในสีแดง

สื่อสารอินทราเรด
สื่อสารอินทราเรด

หลักการสื่อสาร IR:

ก) การส่ง IR

ตัวส่ง IR LED ภายในวงจรของมัน ซึ่งปล่อยแสงอินฟราเรดสำหรับทุกๆ ชีพจรไฟฟ้าที่ได้รับ พัลส์นี้ถูกสร้างขึ้นเมื่อกดปุ่มบนรีโมท ซึ่งทำให้วงจรสมบูรณ์ ทำให้เกิดอคติกับ LED LED ที่ลำเอียงจะปล่อยแสงที่ความยาวคลื่น 940 นาโนเมตรเป็นชุดของพัลส์ ซึ่งสอดคล้องกับการกดปุ่ม อย่างไรก็ตาม เนื่องจากเมื่อรวมกับ IR LED แหล่งกำเนิดแสงอินฟราเรดอื่นๆ เช่น มนุษย์อย่างเรา หลอดไฟ ดวงอาทิตย์ ฯลฯ ข้อมูลที่ส่งอาจถูกรบกวนได้ วิธีแก้ปัญหานี้คือโดยการปรับ สัญญาณที่ส่งจะถูกมอดูเลตโดยใช้ความถี่พาหะ 38 KHz (หรือความถี่อื่นระหว่าง 36 ถึง 46 KHz) IR LED ทำขึ้นเพื่อสั่นที่ความถี่นี้ในช่วงระยะเวลาของพัลส์ ข้อมูลหรือสัญญาณไฟมีการปรับความกว้างพัลส์และมีอยู่ในความถี่ 38 KHz การส่งสัญญาณอินฟราเรดหมายถึงพลังงานในบริเวณสเปกตรัมการแผ่รังสีแม่เหล็กไฟฟ้าที่ความยาวคลื่นยาวกว่าแสงที่มองเห็นได้ แต่สั้นกว่าคลื่นวิทยุ ในทำนองเดียวกันความถี่อินฟราเรดจะสูงกว่าไมโครเวฟ แต่ต่ำกว่าแสงที่มองเห็นได้ นักวิทยาศาสตร์แบ่งสเปกตรัมรังสีอินฟราเรด (IR) ออกเป็นสามส่วน ความยาวคลื่นระบุเป็นไมครอน (สัญลักษณ์ µ โดยที่ 1 µ = 10-6 เมตร) หรือในนาโนเมตร (ตัวย่อ nm โดยที่ 1 นาโนเมตร = 10-9 เมตร = 0.001 5) แถบคลื่นอินฟราเรดที่อยู่ใกล้ที่สุดมีพลังงานในช่วงความยาวคลื่นที่ใกล้เคียงที่สุดกับส่วนที่มองเห็นได้ ตั้งแต่ประมาณ 0.750 ถึง 1.300 5 (750 ถึง 1300 นาโนเมตร) แถบ IR ระดับกลาง (เรียกอีกอย่างว่าแถบ IR กลาง) ประกอบด้วยพลังงานในช่วง 1.300 ถึง 3,000 5 (1300 ถึง 3000 นาโนเมตร) แถบ IR ระยะไกลขยายจาก 2.000 ถึง 14,000 5 (3000 nm ถึง 1.4000 x 104nm)

b) แผนกต้อนรับ IR

เครื่องรับประกอบด้วยเครื่องตรวจจับภาพถ่ายซึ่งพัฒนาสัญญาณไฟฟ้าขาออกเมื่อมีแสงตกกระทบ เอาต์พุตของเครื่องตรวจจับถูกกรองโดยใช้ตัวกรองแถบความถี่แคบที่ละทิ้งความถี่ทั้งหมดที่อยู่ต่ำกว่าหรือสูงกว่าความถี่พาหะ (38 KHz ในกรณีนี้) เอาต์พุตที่กรองแล้วจะถูกส่งไปยังอุปกรณ์ที่เหมาะสม เช่น ไมโครคอนโทรลเลอร์หรือไมโครโปรเซสเซอร์ ซึ่งควบคุมอุปกรณ์ต่างๆ เช่น พีซีหรือหุ่นยนต์ เอาต์พุตจากตัวกรองสามารถเชื่อมต่อกับออสซิลโลสโคปเพื่ออ่านพัลส์

การประยุกต์ใช้ IR:

อินฟราเรดถูกใช้ในแอพพลิเคชั่นการสื่อสาร การตรวจสอบ และการควบคุมแบบไร้สายที่หลากหลาย นี่คือตัวอย่างบางส่วน:

· กล่องควบคุมระยะไกลความบันเทิงภายในบ้าน

· ไร้สาย (เครือข่ายท้องถิ่น)

· ลิงค์ระหว่างคอมพิวเตอร์โน้ตบุ๊กและคอมพิวเตอร์ตั้งโต๊ะ

· โมเด็มไร้สาย

· เครื่องตรวจจับการบุกรุก

·เครื่องตรวจจับความเคลื่อนไหว

· เซ็นเซอร์อัคคีภัย

· ระบบการมองเห็นตอนกลางคืน

· อุปกรณ์ตรวจวินิจฉัยทางการแพทย์

· ระบบนำทางขีปนาวุธ

· อุปกรณ์ตรวจสอบทางธรณีวิทยา

การส่งข้อมูล IR จากอุปกรณ์เครื่องหนึ่งไปยังอีกเครื่องหนึ่งบางครั้งเรียกว่าการฉายแสง

ขั้นตอนที่ 2: เซ็นเซอร์ IR & โปรโตคอล NEC Fromat

เซ็นเซอร์ IR & โปรโตคอล NEC Fromat
เซ็นเซอร์ IR & โปรโตคอล NEC Fromat
เซ็นเซอร์ IR & โปรโตคอล NEC Fromat
เซ็นเซอร์ IR & โปรโตคอล NEC Fromat
เซ็นเซอร์ IR & โปรโตคอล NEC Fromat
เซ็นเซอร์ IR & โปรโตคอล NEC Fromat
เซ็นเซอร์ IR & โปรโตคอล NEC Fromat
เซ็นเซอร์ IR & โปรโตคอล NEC Fromat

เซ็นเซอร์ IR(รูปที่ 1)

TSOP1738, SFH-5110-38 (38kHz)

คุณสมบัติของเซ็นเซอร์ TSOP:

  • พรีแอมพลิฟายเออร์และตัวตรวจจับภาพถ่ายอยู่ในแพ็คเกจเดียว
  • ตัวกรองภายในสำหรับความถี่ PCM
  • ปรับปรุงการป้องกันจากการรบกวนของสนามไฟฟ้า
  • ความเข้ากันได้ของ TTL และ CMOS
  • เอาต์พุตที่ใช้งานต่ำ ใช้พลังงานต่ำ
  • ภูมิคุ้มกันสูงต่อแสงโดยรอบ
  • สามารถรับส่งข้อมูลได้อย่างต่อเนื่อง

โปรโตคอล NEC:

โปรโตคอลการส่ง NEC IR ใช้การเข้ารหัสระยะพัลส์ของบิตข้อความ การระเบิดของพัลส์แต่ละครั้งมีความยาว 562.5µs ที่ความถี่พาหะ 38kHz (26.3µs) บิตลอจิกถูกส่งดังนี้ (รูปที่ 2):

  • ตรรกะ '0' – ระเบิดพัลส์ 562.5µs ตามด้วยช่องว่าง 562.5µs โดยมีเวลาส่งรวม 1.125ms
  • ตรรกะ '1' – ระเบิดพัลส์ 562.5µs ตามด้วยช่องว่าง 1.6875ms โดยมีเวลาส่งรวม 2.25ms

พัลส์พาหะประกอบด้วย 21 รอบที่ 38kHz พัลส์มักจะมีอัตราส่วนเครื่องหมาย/ช่องว่าง 1:4 เพื่อลดการใช้กระแสไฟ:

(รูปที่ 3)

ลำดับรหัสแต่ละลำดับเริ่มต้นด้วยพัลส์ 9ms หรือที่เรียกว่าพัลส์ AGC ตามด้วยความเงียบ 4.5ms:

(รูปที่ 4)

ข้อมูลจะประกอบด้วย 32 บิต ที่อยู่ 16 บิต ตามด้วยคำสั่ง 16 บิต ซึ่งแสดงตามลำดับการส่ง (ซ้ายไปขวา):

(รูปที่ 5)

บิตข้อมูลสี่ไบต์แต่ละบิตจะส่งบิตที่มีนัยสำคัญน้อยที่สุดก่อน รูปที่ 1 แสดงรูปแบบของเฟรมส่งสัญญาณ NEC IR สำหรับที่อยู่ 00h(00000000b) และคำสั่ง ADh (10101101b)

ต้องใช้ทั้งหมด 67.5ms ในการส่งเฟรมข้อความ ต้องการ 27ms เพื่อส่งที่อยู่ 16 บิต (ที่อยู่ + ผกผัน) และคำสั่ง 16 บิต (คำสั่ง + ผกผัน)

(รูปที่ 6)

เวลาที่ใช้ในการส่งเฟรม:

16 บิตสำหรับที่อยู่ (ที่อยู่ + ผกผัน) ต้องการเวลาส่ง 27ms และ 16 บิตสำหรับคำสั่ง (คำสั่ง + ผกผัน) ยังต้องใช้เวลา 27ms ในการส่ง เพราะ (ที่อยู่ + ผกผันที่อยู่) หรือ (command+command inverse) จะมี 8 '0's และ 8 '1's เสมอ (8 * 1.125ms) + (8 * 2.25ms) == 27 ms ตามเวลาทั้งหมดที่ต้องใช้ในการส่งเฟรมคือ (9ms +4.5ms +27ms+27ms) = 67.5 ms

ทำซ้ำรหัส: หากปุ่มบนรีโมทคอนโทรลถูกกดค้างไว้ จะมีการออกรหัสซ้ำ โดยปกติประมาณ 40 มิลลิวินาทีหลังจากที่พัลส์ระเบิดซึ่งหมายถึงการสิ้นสุดของข้อความ รหัสซ้ำจะถูกส่งต่อไปในช่วงเวลา 108ms จนกว่าคีย์จะถูกปล่อยในที่สุด รหัสซ้ำประกอบด้วยสิ่งต่อไปนี้ ตามลำดับ:

  • ชีพจรเต้นชั้นนำ 9ms
  • พื้นที่ 2.25ms
  • ชีพจร 562.5µs ระเบิดเพื่อทำเครื่องหมายจุดสิ้นสุดของช่องว่าง (และด้วยเหตุนี้การสิ้นสุดของรหัสทำซ้ำที่ส่ง)

(รูปที่ 7)

การคำนวณล่าช้า (1ms):

ความถี่นาฬิกา=11.0592 Mhz

รอบเครื่อง = 12

ดีเลย์=1ms

TimerValue= 65536 - ((หน่วงเวลา * ClockFreq)/รอบเครื่อง)=65536-((1ms * 11.0592Mhz)/12)

= 65536 - 921= 0xFC67

ขั้นตอนที่ 3: การควบคุมมอเตอร์กระแสตรงโดยใช้ L293D

การควบคุมมอเตอร์กระแสตรงโดยใช้ L293D
การควบคุมมอเตอร์กระแสตรงโดยใช้ L293D

มอเตอร์กระแสตรง

มอเตอร์ DC แปลงพลังงานไฟฟ้าเป็นพลังงานกลที่สามารถใช้ทำงานที่มีประโยชน์มากมาย มันสามารถสร้างการเคลื่อนไหวทางกลเช่นไปข้างหน้า/ย้อนกลับของ RoboCar ของฉัน มอเตอร์กระแสตรงมีหลายระดับเช่น 6V และ 12V มันมีสองสายหรือหมุด เราสามารถย้อนกลับทิศทางการหมุนได้โดยการกลับขั้วของอินพุต

ที่นี่เราชอบ L293D เนื่องจากพิกัด 600mA ดีสำหรับการขับมอเตอร์ DC ขนาดเล็กและไดโอดป้องกันจะรวมอยู่ใน IC คำอธิบายของพินแต่ละอันมีดังนี้: เปิดใช้งานพิน: นี่คือหมายเลขพิน 1 และหมายเลขพิน 9. หมายเลขพิน 1 ใช้เพื่อเปิดใช้งานไดรเวอร์ Half-H 1 และ 2 (บริดจ์ H ทางด้านซ้าย) หมายเลขพิน 9 ใช้เพื่อเปิดใช้งานไดรเวอร์ H-bridge 3 และ 4 (บริดจ์ H ทางด้านขวา)

แนวคิดนี้เรียบง่าย หากคุณต้องการใช้สะพาน H เฉพาะ คุณต้องให้ตรรกะสูงในการเปิดใช้งานพินที่สอดคล้องกันพร้อมกับแหล่งจ่ายไฟของ IC พินนี้ยังสามารถใช้เพื่อควบคุมความเร็วของมอเตอร์โดยใช้เทคนิค PWM VCC1 (พิน 16): พินพาวเวอร์ซัพพลาย เชื่อมต่อกับแหล่งจ่ายไฟ 5V VCC2 (ขา 8): แหล่งจ่ายไฟสำหรับมอเตอร์ ใช้แรงดัน +ve กับมันตามอัตราของมอเตอร์ หากคุณต้องการขับมอเตอร์ที่ 12V ให้ใช้ 12V กับพินนี้

นอกจากนี้ยังสามารถขับมอเตอร์โดยตรงบนแบตเตอรี่ นอกเหนือไปจากที่ใช้สำหรับจ่ายพลังงานให้กับวงจร เพียงแค่ต่อขั้ว +ve ของแบตเตอรี่นั้นเข้ากับพิน VCC2 และทำให้ GND ของแบตเตอรี่ทั้งสองใช้ร่วมกัน (แรงดันไฟฟ้าสูงสุดที่ขานี้คือ 36V ตามแผ่นข้อมูล)GND (พิน 4, 5, 12, 13): เชื่อมต่อเข้ากับ GND ทั่วไปของวงจรอินพุต (พิน 2, 7, 10, 15):

เหล่านี้เป็นพินอินพุทซึ่งสัญญาณควบคุมได้รับจากไมโครคอนโทรลเลอร์หรือวงจร/ไอซีอื่นๆ ตัวอย่างเช่น หากบนพิน 2 (อินพุตของไดรเวอร์ครึ่งแรก H) เราให้ลอจิก 1 (5V) เราจะได้แรงดันไฟฟ้าเท่ากับ VCC2 บนพินเอาต์พุตที่สอดคล้องกันของไดรเวอร์ครึ่ง H ครึ่งแรก เช่น หมายเลขพิน 3. ในทำนองเดียวกันสำหรับลอจิก 0 (0V) บนพิน 2, 0V บนพิน 3 ปรากฏขึ้น เอาต์พุต (พิน 3, 6, 11, 14): พินเอาต์พุต ตามสัญญาณอินพุตสัญญาณเอาต์พุตมา

การเคลื่อนไหวของมอเตอร์ A B

------------------------------------------------------------------------------------------

………………หยุด: ต่ำ: ต่ำ

……ตามเข็มนาฬิกา: ต่ำ: สูง

ทวนเข็มนาฬิกา: สูง: ต่ำ

…………….หยุด: สูง: สูง

ขั้นตอนที่ 4: แผนภาพวงจรสำหรับไดรเวอร์มอเตอร์และเซ็นเซอร์ IR

แผนภาพวงจรสำหรับตัวขับมอเตอร์และเซ็นเซอร์อินฟราเรด
แผนภาพวงจรสำหรับตัวขับมอเตอร์และเซ็นเซอร์อินฟราเรด
แผนภาพวงจรสำหรับตัวขับมอเตอร์และเซ็นเซอร์อินฟราเรด
แผนภาพวงจรสำหรับตัวขับมอเตอร์และเซ็นเซอร์อินฟราเรด
แผนภาพวงจรสำหรับตัวขับมอเตอร์และเซ็นเซอร์อินฟราเรด
แผนภาพวงจรสำหรับตัวขับมอเตอร์และเซ็นเซอร์อินฟราเรด

ATmega32 เป็นไมโครคอนโทรลเลอร์ CMOS 8 บิตพลังงานต่ำที่ใช้ RISCarchitecture ที่ปรับปรุง AVR ด้วยการดำเนินการตามคำสั่งที่มีประสิทธิภาพในวงจรนาฬิกาเดียว ATmega32 จึงมีปริมาณงานที่เข้าใกล้ 1 MIPS ต่อ MHz ทำให้ผู้ออกแบบระบบสามารถเพิ่มประสิทธิภาพการใช้พลังงานเมื่อเทียบกับความเร็วในการประมวลผล

แกน AVR รวมชุดคำสั่งที่หลากหลายเข้ากับรีจิสเตอร์การทำงานเอนกประสงค์ 32 ตัว รีจิสเตอร์ 32 ตัวทั้งหมดเชื่อมต่อโดยตรงกับ Arithmetic Logic Unit (ALU) ซึ่งช่วยให้เข้าถึงรีจิสเตอร์อิสระสองรายการในคำสั่งเดียวที่ดำเนินการในรอบสัญญาณนาฬิกาเดียว สถาปัตยกรรมที่เป็นผลลัพธ์นั้นมีประสิทธิภาพโค้ดมากกว่าในขณะที่บรรลุปริมาณงานได้เร็วกว่าไมโครคอนโทรลเลอร์ CISC ทั่วไปถึงสิบเท่า

ATmega32 มีคุณสมบัติดังต่อไปนี้:

  • หน่วยความจำโปรแกรม Flash แบบตั้งโปรแกรมได้ในระบบ 32 Kbytes พร้อมความสามารถในการอ่าน-ขณะเขียน
  • 1024 ไบต์ EEPROM, 2K ไบต์ SRAM,
  • 32 สาย I/O วัตถุประสงค์ทั่วไป
  • 32 ทะเบียนการทำงานเอนกประสงค์
  • อินเทอร์เฟซ JTAG สำหรับ Boundaryscan
  • รองรับการดีบักบนชิปและการเขียนโปรแกรม, ตัวจับเวลา/ตัวนับที่ยืดหยุ่นสามตัวพร้อมโหมดเปรียบเทียบ, การขัดจังหวะภายในและภายนอก, USART ที่ตั้งโปรแกรมได้แบบอนุกรม, อินเทอร์เฟซแบบอนุกรมสองสายแบบไบต์เชิง, 8 ช่อง,
  • ADC 10 บิตพร้อมสเตจอินพุตดิฟเฟอเรนเชียลเสริมพร้อมอัตราขยายที่ตั้งโปรแกรมได้ (แพ็คเกจ TQFP เท่านั้น)
  • Watchdog Timer ที่ตั้งโปรแกรมได้พร้อม Oscillator ภายใน
  • พอร์ตอนุกรม SPI และ
  • ซอฟต์แวร์โหมดประหยัดพลังงานที่เลือกได้หกโหมด

    • โหมดปกติหยุด CPU ในขณะที่อนุญาตให้ USART
    • อินเทอร์เฟซสองสาย, ตัวแปลง A/D,
    • สแรม
    • ตัวจับเวลา/ตัวนับ,
    • พอร์ต SPI และ
    • ระบบขัดจังหวะเพื่อทำงานต่อไป
    • โหมดปิดเครื่องจะบันทึกเนื้อหารีจิสเตอร์แต่หยุด Oscillator โดยปิดใช้งานฟังก์ชันชิปอื่นๆ ทั้งหมดจนกว่าจะถึงการขัดจังหวะภายนอกหรือการรีเซ็ตฮาร์ดแวร์ครั้งถัดไป
    • ในโหมดประหยัดพลังงาน ตัวจับเวลาแบบอะซิงโครนัสจะยังคงทำงานต่อไป ทำให้ผู้ใช้สามารถรักษาฐานตัวจับเวลาไว้ได้ในขณะที่ส่วนที่เหลือของอุปกรณ์อยู่ในโหมดสลีป
    • โหมดลดเสียงรบกวนของ ADC จะหยุด CPU และโมดูล I/O ทั้งหมด ยกเว้นตัวจับเวลาแบบอะซิงโครนัสและ ADC เพื่อลดสัญญาณรบกวนระหว่างการแปลง ADC
    • ในโหมดสแตนด์บาย Oscillator คริสตัล/เรโซเนเตอร์จะทำงานในขณะที่อุปกรณ์ที่เหลืออยู่ในโหมดสลีป ซึ่งช่วยให้สตาร์ทเครื่องได้รวดเร็วมากพร้อมกับใช้พลังงานต่ำ
    • ในโหมด Extended Standby ทั้ง Oscillator หลักและ Asynchronous Timer จะยังคงทำงานต่อไป

วงจรที่เกี่ยวข้องทั้งหมดมีให้ที่นี่และให้วงจรหลัก (atmega32) ด้วย

ขั้นตอนที่ 5: โปรแกรม Avr

โปรแกรม Avr
โปรแกรม Avr
โปรแกรม Avr
โปรแกรม Avr

1. สำหรับ "เซ็นเซอร์ระยะไกล":

#รวม #รวม

#รวม "remote.h"

// Globals ผันผวนเวลา int ที่ไม่ได้ลงนาม; //ตัวจับเวลาหลัก จัดเก็บเวลาใน 10us // อัปเดตโดย ISR(TIMER0_COMP) ถ่านที่ไม่ได้ลงนาม BitNo; //Pos ของ BIT ถัดไป ถ่านที่ไม่ได้ลงนาม ByteNo; //Pos ของ Byte ปัจจุบัน

IrData ถ่านที่ไม่ได้ลงนามที่ระเหยได้[4]; // ข้อมูลสี่ไบต์ของ Ir Packet //2-Byte Address 2-Byte Data volatile unsigned char IrCmdQ[QMAX]; // คำสั่งสุดท้ายที่ได้รับ (บัฟเฟอร์)

ถ่านที่ไม่ได้ลงนามที่ระเหยได้ PrevCmd; //ใช้สำหรับทำซ้ำ

//ตัวแปรที่ใช้สำหรับเริ่มเล่นซ้ำหลังจากกดคีย์ในช่วงเวลาหนึ่งเท่านั้น

ถ่านที่ไม่ได้ลงนามที่ระเหยได้ ทำซ้ำ; ///1=ใช่ 0=ไม่มีถ่านที่ไม่ได้ลงนาม RCount; //นับซ้ำ

ถ่านระเหย QFront=-1, QEnd=-1;

สถานะถ่านที่ไม่ได้ลงนามที่ระเหยได้; //สถานะผู้รับ

ขอบถ่านที่ไม่ได้ลงนามที่ระเหยได้; //ขอบของการขัดจังหวะ [RISING=1 OR FALLING=0]

การหยุด int ที่ไม่ได้ลงนามที่ระเหยได้;

/****************************************************** ***************************************************/ /* ฟังก์ชันเริ่มต้น * //****************************************************** *************************************************/

เป็นโมฆะ RemoteInit () {

ถ่านฉัน; สำหรับ(i=0;i<4;i++) IrData=0;

หยุด=0; สถานะ=IR_VALIDATE_LEAD_HIGH; ขอบ=0; ซ้ำ=0;

//ตั้งค่าตัวจับเวลา1 //----------- TCCR0|=((1<

TIMSK|=(1<

OCR0=TIMER_COMP_VAL; //ตั้งค่าเปรียบเทียบค่า

ถ่านที่ไม่ได้ลงชื่อ GetRemoteCmd (ถ่านรอ) { cmd ถ่านที่ไม่ได้ลงชื่อ;

ถ้า(รอ) ในขณะที่(QFront==-1); อื่น if(QFront==-1) return (RC_NONE);

cmd=IrCmdQ[QFront];

ถ้า (QFront==QEnd) QFront=QEnd=-1; อื่น { if(QFront==(QMAX-1)) QFront=0; อย่างอื่น QFront++; }

ส่งคืน cmd;

}

2. หลัก ():

int หลัก (เป็นโมฆะ){

uint8_t cmd=0; DDRB=0x08;

DDRD=0x80;

DDRC=0x0f; PORTC=0x00;

ในขณะที่ (1) // Infinite Loop ไปยังเซ็นเซอร์ IR ที่ใช้งานอยู่ {

cmd=GetRemoteCmd(1);

สวิตช์ (cmd) {

กรณีที่ xx: { //BOT เคลื่อนที่ไปข้างหน้า //Ch+ btn forwardmotor();

หยุดพัก; // มอเตอร์ทั้งสองในทิศทางไปข้างหน้า

}

………………………………………………….

………………………………………………….

………………………………………………….

ค่าเริ่มต้น: PORTC=0x00;break; // มอเตอร์ทั้งซ้ายและขวาหยุด }

}

}/*สิ้นสุด main*/

……………………………………………………………………………………………………………………

// มันเป็นโมเดลพื้นฐาน แต่ฉันสามารถใช้ในโหมด PWM ได้

//……………………………………………..มีความสุข……………………………………………………//

แนะนำ: